理解:用字面量方式和new方式创建基本类型值的区别

用字面量和用new创建基本类型值到底有什么区别?

每次创建数组或对象的时候,都能用以下两种方法创建

var s1 = "some text";
var s2 = new String("some text");

字面量

  1. 字面量语法简单,直接,优雅
  2. 且省去了大量new中的构造方法

第一点很好理解,第二点是什么意思呢?结合资料个人理解如下:
我们知道,基本类型值不是对象,因为从逻辑上讲它们不应该有方法,但是事实:

var s1 = "some text";
var s2 = s1.substring(2);	//'me text'

???

其实,为了让我们实现这种直观的操作,当读取一个基本类型值的时候,后台会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。

这里当第二行代码执行到是s1时,访问过程处于一种读取模式,也就是要从内存中读取这个字符串的值。而在读取模式中访问字符串时,后台会完成以下处理:

  1. 创建String类型的一个实例;
  2. 在实例上调用指定的方法;
  3. 销毁这个实例;

可以将以上三个步骤想象成是执行了下列ECMAScript代码。

var s1 = new String("some text")var s2 = s1.substring(2);
s1 = null

经过此番处理,基本的字符串值就变的跟对象一样了。上面三个步骤同样适用于Boolean和Number类型对应的布尔值和数字值。

除此外,自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁。这意味着我们不能在运行时为基本类型值添加属性和方法:

var s1 = "some text";
s1.color = "red";
alert(s1.color);		//undefined

平时当然可以显示调用Boolean、Number、String来创建基本包装类型的对象,但最好不要,除非必要。因为这种做法有时候很容易让人分不清自己是在处理基本类型还是引用类型。

参考《JavaScript高级程序设计(第三版)》 P118

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值