js Number()函数

js yekong

如果是数字,会按照对应的进制数据格式,统一转换为十进制并返回。

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 重难点实例精讲

喜欢