码迷,mamicode.com
首页 > 编程语言 > 详细

javascript之包装对象

时间:2015-04-03 22:35:36      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

var s = "hello world!";            
var word = s.substring(s.indexOf(" ")+1,s.length);

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

同字符串一样,数字和布尔值也具有各自的方法:通过Number()和Boolean()构造函数创建一个临时对象,这些方法的调用均是来自于这个临时对象。

var s = "test";                    //创建一个字符串
s.len = 4;                           //给它设置一个属性
var t = s.len;                      //查询这个属性

当运行这段代码时,t的值是undefined。第二行代码创建一个临时字符串对象,并给其len属性赋值为4,随即销毁这个对象。第三行通过原始的(没有被修改过)字符串值创建一个新字符串对象,尝试读取其len属性,这个属性自然不存在,表达式求值结果为undefined。

存取字符串,数字或布尔值的属性时创建的临时对象称做包装对象,它只是偶尔用来区分字符串值和字符串对象,数字和数值对象以及布尔值和布尔对象。通常,包装对象只是被看做是一种实现细节,而不特别关注。由于字符串,数字和布尔值的属性都是只读的,并且不能给它们定义新属性,因此你需要明白它们是有别于对象的。

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

var s = "test", n = 1, b = true;            //一个字符串,数字,和布尔值
var S = new String (s);                        //一个字符串对象
var N = new Number(n);                   //一个数值对象
var B = new Boolean(b);                    //一个布尔对象

javascript会在必要时将包装对象转换成原始值,因此上段代码中的对象S,N和B常常——但不总是——表现的和值s,n和b一样。“==”等于运算符将原始值和其包装对象视为相等,但“===”全等运算符将它们视为不等。

javascript之包装对象

标签:

原文地址:http://my.oschina.net/fhd/blog/395905

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!