<div align="center"> <font size="3"><img id="_aimg_28663" aid="28663" zoomfile="data/attachment/forum/201507/09/113038zatwuziui9vtgbuv.jpg" src="data/attachment/forum/201507/09/113038zatwuziui9vtgbuv.jpg" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" style="max-width:90%" alt="5.jpg" title="5.jpg" w="257"><br> <br> </font><div align="left"> <font size="3"> JavaScript对象是一种复合值:它是属性和已命名值的集合。通过"."符号来引用属性值。当属性值是一个函数时,称为方法。</font><br> </div> </div> <br> <font size="3"> ①一段你常用但却未必明白其真正底层原理的代码:</font><br> <div class="blockcode"> <div id="code_XgY"><ol> <li>var s = "hello world!";<br> </li> <li>var word = s.substring(s.indexOf(" ")+1,s.length);</li> </ol></div> <em onclick="copycode($('code_XgY'));">复制代码</em> </div> <br> <font size="3"> 如前面所说,这里变量s只是一个字符串原始类型,它怎么会有属性(s.length)和方法(s.indexOf()、 s.substring())呢?没错,这正跟我们正要介绍的包装对象有关。原因是:只要引用了字符串s的属性,JavaScript就会将字符串值通过调用new String(s)的方式转换成对象,这个对象继承了字符串(String)对象的方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会被销毁。</font><font size="3"><br> </font><br> <font size="3"> 同字符串一样,数字和布尔值也有各自的方法:通过Number()和Boolean()构造函数创建一个临时对象。存取字符串、数字或布尔值的属性时创建的临时对象就是包装对象。5种原始类型中的剩余两种null和undefined没有包装对象:访问它们的属性会造成一个类型错误(Uncaught TypeError)。明白了上面的代码,那么再看如下代码:</font><br> <div class="blockcode"> <div id="code_sG4"><ol> <li>var s = "test";<br> </li> <li>s.len = 4;//给它设置一个属性<br> </li> <li>var t = s.len;</li> </ol></div> <em onclick="copycode($('code_sG4'));">复制代码</em> </div> <br> <font size="3"> 不认真的同学这里就会认为最后t就是等于4了。难道最后t不等于4吗?是的,最后t的值是undefined。想知道为什么请看继续看解析:原来以这里第二行代码只是创建了一个临时字符串对象,并给len属性赋值为4,随即销毁这个对象。而第三行又是通过原始字符串s创建一个新字符串对象(这个不是第二行代码创建的对象,第二行代码创建的对象已经被销毁了)并尝试读取其len属相,这个属性自然不存在,因此表达式的结果为undefined。这段代码说明了在读取字符串、数字和布尔值的属性值或方法(实际上是它们对应包装对象的属性值或方法)表现的像对象一样。但如果你试图给属性赋值,则会忽略这个操作:修改只是发生在临时对象身上,而这个临时对象并不会继续保留下来。</font><br> <br> <font size="3"> 注意:可通过String(),Number(),Boolean()构造函数来显示创建包装对象:</font><br> <div class="blockcode"> <div id="code_ImX"><ol> <li>var s = "test",n=1,b=true;//一个字符串、数字和布尔值<br> </li> <li>var S = new String(s);//一个字符串对象<br> </li> <li>var N = new Number(n);//一个数值对象<br> </li> <li>var B = new Boolean(b);//一个布尔对象</li> </ol></div> <em onclick="copycode($('code_ImX'));">复制代码</em> </div> <br> <font size="3"> JavaScript会在必要时将包装对象转换成原始值,因此上段代码中的对象S、N和B常常但不总是表现的和值s、n和b一样。"=="等于运算符将原始值和其包装对象视为相等,但“===”全等运算将它们视为不等。通过typeof运算符也可以看到原始值和其包装对象的不同:</font><br> <br> <font size="3"> ①typeof(s); ->"string"</font><br> <font size="3"> typeof(S); ->"object"</font><br> <br> <font size="3"> ②typeof(n); ->"string"</font><br> <font size="3"> typeof(N); ->"object"</font><font size="3"><br> </font><br> <font size="3"> ③typeof(b); ->"string"</font><br> <font size="3"> typeof(B); ->"object"</font><br> <br> <font size="3"> <font size="2"><font color="Gray">本文作者:Craftsman_Gao</font></font></font><br> <font size="2"><font color="Gray"> 原文链接:<a href="http://www.cnblogs.com/craftsman-gao/archive/2015/07/08/4631501.html" target="_blank">http://www.cnblogs.com/craftsman ... /07/08/4631501.html</a><br> 本站中的所有文章仅以学习和交流为目的,如果我们的工作有侵犯到您的权益,请及时联系站长QQ:2601929995,我们会在第一时间进行处理!</font></font><br> <br>