前言
之前遇到一个new Number(1)
数据类型判断问题,这里做一下整理梳理。
实例
let num1 = 1;
let num2 = Number(1);
let num3 = new Number(1)
num1 == num2 //true
num1 === num2 //true
num1 == num3 //true
num1 === num3 //false
typeof num1 //"number"
typeof num2 //"number"
typeof num3 //"object"
num1 instanceof Number // false
num2 instanceof Number // false
num3 instanceof Number // true
Object.prototype.toString.call(num1) //"[object Number]"
Object.prototype.toString.call(num2) //"[object Number]"
Object.prototype.toString.call(num3) //"[object Number]"
缘由
-
Number(1)
会转换参数为数字类型,如果参数无法转换成数字,就返回NaN。 -
new Number(1)
先转换数据类型,再封装为数字对象。
延伸
1.new Number()
、new String()
与new Boolean()
- 这三种
基础数据类型
的构造函数通过new
关键字会返回一个经过封装的对象。
2.注意
其他基础数据类型:null,undefined,symbol
-
null
undefined
没有Null()
与Undefined()
方法 -
symbol
有Symbol()
方法,但作为构造函数来说并不完整,它不支持语法:"new Symbol()"。