转化为数字的规则
在 JavaScript 中,将值转换为数字时,遵循以下规则:
1. undefined
- 转换为
NaN。
2. null
- 转换为
0。
3. 布尔值
true转换为1。false转换为0。
4. 数字
- 直接返回该数字。
5. 字符串
- 如果字符串是有效的数字表示(如
"123"),则转换为相应的数字(如123)。 - 如果字符串包含有效的浮点数表示(如
"123.45"),则转换为相应的浮点数(如123.45)。 - 如果字符串是空字符串
"",则转换为0。 - 如果字符串包含非数字字符或无法解析为数字(如
"abc"),则转换为NaN。
6. 对象
- 调用它的
[Symbol.toPrimitive]()(将 number 作为 hint 值) - 如果对象有
valueOf方法并返回一个原始值,则使用该值进行转换。 - 如果对象没有
valueOf方法或valueOf方法返回一个对象,则调用toString方法并使用返回的字符串进行转换。 - 如果
toString方法返回的字符串无法转换为数字,则结果为NaN。
示例
console.log(Number(undefined)); // NaN
console.log(Number(null)); // 0
console.log(Number(true)); // 1
console.log(Number(false)); // 0
console.log(Number(123)); // 123
console.log(Number("123")); // 123
console.log(Number("123.45")); // 123.45
console.log(Number("")); // 0
console.log(Number("abc")); // NaN
console.log(Number({})); // NaN
console.log(Number({ valueOf: () => 42 })); // 42
console.log(Number({ toString: () => "123" })); // 123