字符串不是对象,为什么可以调用属性?

请看这个例子:

        var s =“hello world”; //一个字符串

        var word = s.substring(s.indexOf(“”)+ 1,s.length); //使用字符串的属性

字符串本是原始类型,但是在这里为什么可以有对象类型一样的属性?

    在这里,只要引用了字符串s的属性,JavaScript就会将字符串值通过调用new String(s)的方式转换成对象,这个对象继承了字符串的方法,并用来处理属性的作用。一旦属性引用结束,这个新创建的对象就会销毁(其实在实现上并不一定创建和销毁这个临时对象,然而整个过程看起来就是这样的)

    同字符串一样,数字和布尔值也具有各自的方法:通过号码()和布尔()构造函数创建一个临时对象,这些方法的调用均是来自这个临时对象.NULL和未定义没有包装对象:访问它们的属性会造成一个错误。

 

  下面给一段代码,请思考它们的执行结果:

        var s =“test”; //创建一个字符串

        s.len = 4; //给它设置一个属性

        var t = s.len; //查询这个属性

    当运行这段代时,T的值是未定义的。第二行代码创建一个临时字符串对象,并给其LEN属性赋值为4,随即销毁这个对象。第三行通过原始的(没有被修改过的)字符串值创建一个新字符串对象,尝试读取LEN属性。其属性自然是不存在,表达式求值结果为未定义。这段代码说明了在读取字符串,数字和布尔值的属性值(或方法)的时候,表现的像对象一样但如果你视图给其属性赋值,则会忽略这个操作:修改只是发生在临时对象身上,而这个临时对象并未继续保留下来。

    存取字符串,数字或布尔值的属性时创建的临时对象称作包装对象,它只是偶尔用来区分字符串值和字符串对象,数字和数值对象以及布尔值和布尔对象。

注:本文章内容摘自书“JavaScript的权威指南第6版”

如果有错误的地方还请留言,大家一起讨论一下,谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值