如果是数字,会按照对应的进制数据格式,统一转换为十进制并返回。
Number(10); // 10
Number(010); // 8,010是八进制的数据,转换成十进制是8
Number(0x10); // 16,0x10是十六进制数据,转换成十进制是16
如果是Boolean类型的值,true将返回为“1”,false将返回为“0”。
Number(true); // 1
Number(false); // 0
如果值为null,则返回“0”
Number(null); // 0
如果值为undefined,则返回“NaN”
Number(undefined); // NaN
如果值为字符串类型,则遵循下列规则
如果该字符串只包含数字,则会直接转换成十进制数;如果数字前面有0,则会直接忽略这个0。
Number('21'); // 21
Number('012'); // 12
如果字符串是有效的浮点数形式,则会直接转换成对应的浮点数,前置的多个重复的0会被清空,只保留一个。
Number('0.12'); // 0.12
Number('00.12'); // 0.12
如果字符串是有效的十六进制形式,则会转换为对应的十进制数值。
Number('0x12'); // 18
Number('0x21'); // 33
如果字符串是有效的八进制形式,则不会按照八进制转换,而是直接按照十进制转换并输出,因为前置的0会被直接忽略。
Number('010'); // 10
Number('0020'); // 20
如果字符串为空,即字符串不包含任何字符,或为连续多个空格,则会转换为0。
Number(''); // 0
Number(' '); // 0
如果字符串包含了任何不是以上5种情况的其他格式内容,则会返回“NaN”。
Number('123a'); // NaN
Number('a1.1'); // NaN
Number('abc'); // NaN
如果值为对象类型
则会先调用对象的valueOf()函数获取返回值,并将返回值按照上述步骤重新判断能否转换为Number类型。
如果都不满足,则会调用对象的toString()函数获取返回值,并将返回值重新按照步骤判断能否转换成Number类型。如果也不满足,则返回“NaN”
valueOf()
var obj = {
age: 21,
valueOf: function () {
return this.age;
},
toString: function () {
return 'good';
}
};
Number(obj); // 21
toString()
ar obj = {
age: '21',
valueOf: function () {
return [];
},
toString: function () {
return this.age;
}
};
Number(obj); // 21
通过valueOf()函数和toString()函数都无法将对象转换成Number类型的示例(最后返回“NaN”)。
var obj = {
age: '21',
valueOf: function () {
return 'a';
},
toString: function () {
return 'b';
}
}
Number(obj); // NaN
笔记内容来自于书籍 JavaScrint 重难点实例精讲