NaN
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015å¹´7æ.
NaN ã¯ã°ãã¼ãã«ããããã£ã§ãéæ° (Not-A-Number) ã表ãå¤ã§ãã
試ãã¦ã¿ã¾ããã
function sanitize(x) {
if (isNaN(x)) {
return NaN;
}
return x;
}
console.log(sanitize("1"));
// äºæ³ãããçµæ: "1"
console.log(sanitize("NotANumber"));
// äºæ³ãããçµæ: NaN
å¤
Number.NaN ã¨åãæ°å¤ã§ãã
NaN ã®ããããã£å±æ§ | |
|---|---|
| æ¸è¾¼å¯è½ | ä¸å¯ |
| åæå¯è½ | ä¸å¯ |
| è¨å®å¯è½ | ä¸å¯ |
解説
NaN ã¯ã°ãã¼ãã«ãªãã¸ã§ã¯ãã®ããããã£ã§ããè¨ãæããã°ãã°ãã¼ãã«ã¹ã³ã¼ãã«ãã夿°ã§ãã
æè¿ã®ãã©ã¦ã¶ã¼ã§ã¯ãNaN ã¯æ§æä¸å¯ãã¤æ¸ãè¾¼ã¿ä¸å¯ã®ããããã£ã§ããããã§ãªãå ´åã§ããããã䏿¸ããããã¨ã¯é¿ãã¦ãã ããã
NaN ãè¿ãæ¼ç®ã«ã¯ 5 種é¡ãããã¾ãã
- æ°å¤ã¸ã®å¤æã«å¤±æããï¼
parseInt("blabla")ãNumber(undefined)çã®æç¤ºçãªãã®ãMath.abs(undefined)ã®ãããªæé»çãªãã®ï¼ - çµæã宿°å¤ã«ãªããªãç®è¡æ¼ç®ï¼
Math.sqrt(-1)ãªã©ï¼ - ä¸ç¢ºå®å½¢ï¼
0 * Infinityã1 ** InfinityãInfinity / InfinityãInfinity - Infinityããªã©ï¼ - ãªãã©ã³ãã
NaNã§ãããã¾ãã¯NaNãåå¾ããã¡ã½ãããå¼ï¼7 ** NaNã7 * "blabla"ãªã©ããã®ãã¨ã¯NaNã伿æ§ãæã¤ãã¨ãæå³ãã¾ãã - 䏿£ãªå¤ãæ°å¤ã¨ãã¦è¡¨ãå¿
è¦ããããã®ä»ã®å ´åï¼ä¸æ£ãª Date ã§ãã
new Date("blabla").getTime()ã"".charCodeAt(1)ãªã©ï¼
NaN ã¨ãã®æå㯠JavaScript ãçºæãããã®ã§ã¯ããã¾ãããæµ®åå°æ°ç¹æ¼ç®ã«ããããã®æå³ã¥ãï¼NaN !== NaN ãå«ãï¼ã¯ IEEE 754 ã«ãã£ã¦æå®ããã¦ãã¾ããNaN ã®æåã«ã¯ä»¥ä¸ãå«ã¾ãã¾ãã
- æ°å¦æ¼ç®ï¼ãã ããããæ¼ç®ãé¤ãï¼ã«ããã¦
NaNãé¢ä¸ããå ´åãçµæã¯é常NaNã¨ãªãã¾ããï¼ä¸è¨ã®åä¾ãåç §ãã¦ãã ãããï¼ - é¢ä¿æ¼ç®åï¼
>ã<ã>=ã<=ï¼ã®ããããã®ãªãã©ã³ããNaNã®å ´åãçµæã¯å¸¸ã«falseã¨ãªãã¾ãã NaNã¯ãä»ã®å¤ï¼å¥ã®NaNå¤ãå«ãï¼ã¨ã¯çãããªãï¼==ã!=ã===ã!==ï¼ãå«ãä»ã®ãããªãå¤ã¨ãçãããªãã
NaN 㯠JavaScript ã§å½å¤ã®å¤ã®ä¸ã¤ã¨åæã«ããã¾ãã
ä¾
>NaN ã«å¯¾ããæ¤æ»
ããå¤ã NaN ãã©ããã夿ããã«ã¯ãNumber.isNaN() ã¾ã㯠isNaN() ã使ç¨ããã¨æãæç¢ºã«å¤å®ã§ãã¾ãããããã¯ãNaN ã¯èªèº«ã¨çãããªãå¯ä¸ã®å¤ã§ãããããx !== x ã®ãããªèªå·±æ¯è¼ã§æ¤æ»ãããã¨ãå¯è½ã§ãã
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
Number.isNaN(NaN); // true
function valueIsNaN(v) {
return v !== v;
}
valueIsNaN(1); // false
valueIsNaN(NaN); // true
valueIsNaN(Number.NaN); // true
ãã ãã isNaN() 㨠Number.isNaN() ã«ã¯éãããããã¨ã«æ°ãã¤ãã¦ãã ãããåè
ã¯ãå¤ãã®ãã®ã NaN ã§ãã£ãããå¤ã®å¤æã®çµæ NaN ã«ãªãå ´åã« true ãè¿ãã¾ããå¾è
ã¯å¤ãã®ãã®ã NaN ã®ã¨ãã«ã ã true ãè¿ãã¾ãã
isNaN("hello world"); // true
Number.isNaN("hello world"); // false
åãçç±ã§ãé·æ´æ°å¤ã®å ´å㯠isNaN() ã§ã¯ã¨ã©ã¼ãçºçãã¾ããã Number.isNaN() ã§ã¯çºçãã¾ããã
isNaN(1n); // TypeError: Conversion from 'BigInt' to 'number' is not allowed.
Number.isNaN(1n); // false
ããã«ãé
åã¡ã½ããã®ä¸ã«ã¯ NaN ãæ¢ããªããã®ãããã°ãæ¢ãããã®ãããã¾ããå
·ä½çã«ã¯ãã¤ã³ããã¯ã¹æ¤ç´¢ã¡ã½ããï¼indexOf()ãlastIndexOf()ï¼ã¯ NaN ãæ¢ããã¨ã¯ã§ãã¾ãããã夿¤ç´¢ã¡ã½ããï¼includes()ï¼ã¯æ¢ããã¨ãã§ãã¾ãã
const arr = [2, 4, NaN, 12];
arr.indexOf(NaN); // -1
arr.includes(NaN); // true
// é©åã«å®ç¾©ãããè¿°èªãåãå
¥ããã¡ã½ããã¯å¸¸ã« NaN ãæ¢ããã¨ãã§ãã
arr.findIndex((n) => Number.isNaN(n)); // 2
NaN ã¨ãã®æ¯è¼ã«ã¤ãã¦è©³ããã¯ãç価æ§ã®æ¯è¼ã¨å䏿§ãåç
§ãã¦ãã ããã
æç¢ºã«èå¥å¯è½ãª NaN å¤
2 ã¤ã®æµ®åå°æ°ç¹æ°ãç°ãªãäºé²è¡¨ç¾ãæã¡ãªããã両æ¹ã¨ã NaN ã¨ãªãå¯è½æ§ãããã¾ãããã㯠IEEE 754 ã¨ã³ã³ã¼ãæ¹å¼ã«ããã¦ãææ°ã 0x7ff ã§ä»®æ°é¨ã0ã§ãªãæµ®åå°æ°ç¹æ°ã¯ãã¹ã¦ NaN ã¨ãªãããã§ããJavaScript ã§ãåä»ãé
åã使ç¨ãã¦ãããåä½ã®æä½ãè¡ããã¨ãã§ãã¾ãã
const f2b = (x) => new Uint8Array(new Float64Array([x]).buffer);
const b2f = (x) => new Float64Array(x.buffer)[0];
// NaN ã®ãã¤ã表ç¾ã®åå¾
const n = f2b(NaN);
const m = f2b(NaN);
// 符å·ãããã夿´ããï¼NaN ã«ã¯å½±é¿ããªãï¼
n[7] += 2 ** 7;
// n[0] += 2**7; ããã°ã¨ã³ãã£ã¢ã³ã®å¦çç³»ã®ãã
const nan2 = b2f(n);
console.log(nan2); // NaN
console.log(Object.is(nan2, NaN)); // true
console.log(f2b(NaN)); // Uint8Array(8) [0, 0, 0, 0, 0, 0, 248, 127]
console.log(f2b(nan2)); // Uint8Array(8) [0, 0, 0, 0, 0, 0, 248, 255]
// ã¾ãæåã®ãããã夿´ãããããã¯ä»®æ°ã®æä¸ä½ãããã§ãããNaN ã«ã¯å½±é¿ããªãã
m[0] = 1;
// m[7] = 1; ããã°ã¨ã³ãã£ã¢ã³ã®å¦çç³»ã®ãã
const nan3 = b2f(m);
console.log(nan3); // NaN
console.log(Object.is(nan3, NaN)); // true
console.log(f2b(NaN)); // Uint8Array(8) [0, 0, 0, 0, 0, 0, 248, 127]
console.log(f2b(nan3)); // Uint8Array(8) [1, 0, 0, 0, 0, 0, 248, 127]
æé»ã« NaN ãã¨ã¹ã±ã¼ã
NaN ã¯æ°å¦æ¼ç®ãéãã¦ä¼æãããããé常ã¯è¨ç®ã®æå¾ã«ä¸åº¦ NaN ãæ¤æ»ããã ãã§ã¨ã©ã¼ç¶æ
ãæ¤åºã§ãã¾ããNaN ãé»ã£ã¦ç¡è¦ãããå¯ä¸ã®å ´åã¯ãææ°ã 0 ã®ã¹ãä¹ã使ç¨ããå ´åã§ããããã®å ´ååºæ°ã®å¤ãæ¤æ»ããã«å³åº§ã« 1 ãè¿ãã¾ãã
NaN ** 0 === 1; // true
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-value-properties-of-the-global-object-nan> |