JavaScript 出现 NaN 的情况大总结
每次看这个运算真的头大,为啥这个 NaN 啊简直让人恼火,这次就简单暴力做个大总结吧
注意事项:
- NaN(NOT A NUMBER) 是 JavaScript 的保留词,指不合法的数
- 运用 NaN 进行运算,最后得出也是 NaN
- 可以使用 isNaN()来判断是否某个值是否为数
// 判断是否为 NaN
console.log(isNaN("apple")); // true,是非数字就返回 true
console.log(isNaN(12)); // false
// 运用typeof NaN 返回是 number
console.log(typeof NaN); // number
// 尝试用一个非数字字符串进行➕(都是字符串的话会产生级联) ➖ ✖ ➗ %会得到 NaN(Not a Number)
console.log(12 + "apple"); // 字符串级联 12apple
console.log("12" + "apple"); // 字符串级联 12apple
console.log("apple" + 12); // apple12
console.log("apple" + "12"); // apple12
console.log(12 - "apple"); // 12 - "apple" = NaN
console.log("12" - "apple"); // "12" - "apple" = NaN
console.log(12 * "apple"); // 12 * "apple" = NaN
console.log("12" * "apple"); // "12" * "apple" = NaN
console.log(12 / "apple"); // 12 / "apple" = NaN
// "12" 转为 number进行除法运算,但是 "apple" 非数字字符串,最后得出 NaN
console.log("12" / "apple"); //"12" / "apple" = NaN
console.log(12 % "apple"); //NaN
console.log("12" % "apple"); //NaN
注意 true/false 布尔类型的转换:
- true 会转换为 1,false 会转换为 0
- 不是加法运算,后面的数是数字字符串,会转为数字 number 类型进行运算
- 是加法运算,后面的数无论是不是数字,都直接是级联
- true —> “true”,此时就是 string 类型(非数字类型的字符串)而不是 boolean,运算会出 NaN
console.log(typeof true); // boolean
console.log(true + "1"); // true1
console.log("1" + true); //1true
console.log("true" + "1"); //true1
console.log("1" + "true"); //1true
console.log(true - "1"); //0
console.log("1" - true); //0
console.log(true * "1"); //1
console.log("1" * true); //1
console.log(true / "1"); // 1
console.log("true" / "1"); // NaN
console.log(true % "1"); //0
console.log("1" % true); //0
注意 js 还有一种 Infinity(-Infinity ) —— js 在运算中超出最大可能输的范围返回的值
除以 0 也会出现 Infinity,typeof Infinity —> number
console.log(12 / 0); // Infinity
console.log(-12 / 0); // -Infinity
console.log(typeof Infinity); // number