JavaScript中的字符串、数字、布尔值不是对象

《JavaScript权威指南》(第六版)

字符串、数字、布尔值是有别于对象的。

但是,有人讲,字符串既然不是对象,为什么它会有属性和方法?对象不就是拥有属性和方法的数据吗?

其实,之所以出现这种说法,是因为一个叫“包装对象”的东西。存取字符串、数字或布尔值的属性时,会临时创建一个对象,这个对象在属性引用结束后会自动销毁。而字符串、数字和布尔值的属性都是只读的,并且不能给他们定义属性。

举个栗子:

var s = "test"; //创建一个字符串
s.len = 4;      //设置一个新属性
var t = s.len;  //查询这个属性可知,t值是undefined

当运行上面的代码时,t的值是undefined。第二行代码引用到了字符串s的属性,JavaScript将字符串通过调用new String(s)的方式创建一个临时对象,这个对象继承了字符串的方法,被用来梳理属性的引用,但该语句结束后该对象被销毁。第三行通过原始的(没有被修改过)字符串创建一个新字符串对象,尝试读取其len属性,这个属性自然不存在,表达式求值结果为undefined。


需要注意的是,可通过String()、Number()或Boolean()构造函数来显式创建包装对象。例如:

var s = "test";          //一个字符串
var S = new String(s);   //一个字符串对象
JavaScript会在必要时将包装对象转换成原始值。“==”等于运算符将原始值和其包装对象视为相等,但"==="全等运算符将它们视为不等。通过typeof运算符可以看到原始值和其包装对象的不同。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值