JS的包装对象: 为什么能打印字符串的 length 长度

var str = "string";  //定义 str 为一个字符串, 基本类型
alert(str.length)  // 6
str.o = 10 //把它像对象一样添加一个属性赋值为 10
alert(str.o) //undefined 输出结果是 undefined


再定义一个
var strObj = new String("string") 它是一个对象类型,且这个对象类型是 string 对应的包装类

基本类型不是一个对象, 所以它不该有属性和方法. 但是str.length 却可以输出 6
那它为什么会有 length 属性??

此时 str.o = 10; 这样给 str 一个属性赋值 10 也是合法. 
但是打印 str.o 却是 undefined

javascript 中的机制, 把一个基本类型比如字符串, 尝试用对象方式使用它时, javascript 会自动的将基本类型转换为一个包装类型对象, 所以转换相当于 new 了一个 string, 它的值和 str 一样. 当访问完成后, 比如str.length返回以后或者 str.o 返回以后, 该临时对象会被销毁掉.
所以str.o 赋值 10 之后, 再去访问, 值就是 undefined

-----
同理, 1,2,3 等这些是数值型 number,它不是对象, 没有属性. 但是也可以把他们转换成字符串, 也是类似原理

猜你喜欢

转载自blog.csdn.net/m0_48446542/article/details/108957058