var n1 = 1
和var n2 = new Number(1)
的区别。
当我们执行 n1 = 1 时,创建一个基本类型的值。
当执行n2 = new Number时,创建一个对象。(包装成一个对象)这样就就可以运行公共的方法,比如toString()、valueOf()等。
内存图
所以n2可以执行相应的方法。但是发现n1也一样可以执行toString()等方法。
这是因为js有一个自动转换的机制。当我们执行 n1.toString()时,在js内部帮我们生成一个临时的n1包装对象,执行完成后销毁这个对象。
var n = 1
n.xxx =2
。本来n是一个基本类型,是不存在属性的(所以执行n.xxx = 2应该会报错)。但是执行n.xxx = 2
时,js生成一个临时包装对象,执行完后就被销毁。所以console.log(n.xxx)
为undefined
new String()和new Boolean()也跟上面一样。