Email:longsu2010 at yeah dot net 最近我和朋友談起JavaScript中對(duì)象的問(wèn)題。朋友以寫(xiě)JavaScript為生,而且生活的很好,,然而我發(fā)現(xiàn)他并不真正懂這們語(yǔ)言的某些核心特征,。如果你也有同樣的困惑,我下面嘗試解答,。 朋友引用了一本書(shū)中的解釋?zhuān)缦拢?BR>“有趣的是ECMAScript的原始值(像boolean,,number和string)是偽對(duì)象,那就是說(shuō)他們是有屬性和方法的,?!?BR>真的很抱歉,他不是這樣的,。我們先看一個(gè)例子 這個(gè)例子將會(huì)alert “undefined”,。為什么呢?如果a是一個(gè)偽對(duì)象那么為什么沒(méi)有保存屬性呢,?實(shí)際上a不是一個(gè)對(duì)象,,甚至不是一個(gè)偽對(duì)象。它是原始的number,。他沒(méi)有屬性,。眾多周知JavaScript自動(dòng)將變量從一個(gè)類(lèi)型轉(zhuǎn)為另一個(gè)類(lèi)型??聪旅娴拇a片段: number a和array [1, 2, 3]將自動(dòng)轉(zhuǎn)為string,。同樣的事情發(fā)生在點(diǎn)(.)操作符之前,JavaScript簡(jiǎn)單的將左側(cè)的操作數(shù)轉(zhuǎn)為object,。因此例子中的第二行會(huì)創(chuàng)建一個(gè)Number對(duì)象,,它的值與a相等(本例中是5),然后為剛創(chuàng)建的Number對(duì)象的t屬性賦值為3,。但是新的Number對(duì)象不會(huì)取代變量a(不會(huì)回寫(xiě)給變量a),,它只會(huì)被垃圾回收器回收掉。第三行會(huì)再一次創(chuàng)建一個(gè)新對(duì)象,,之后嘗試讀取新對(duì)象的t屬性,t屬性是“undefined”,。原始類(lèi)型(boolean,、number和string)不是對(duì)象,他們有可能像對(duì)象轉(zhuǎn)換,。轉(zhuǎn)換規(guī)則是什么呢,?JavaScript有六種內(nèi)建類(lèi)型:null、undefined,、number,、string、boolean和object。轉(zhuǎn)換規(guī)則如下: 1,、如果是對(duì)象那么保持不變,。 2、如果是null或者undefined拋出異常,。 3,、否則創(chuàng)建 (new Number(input)或者new String(input)或者new Boolean(input))。 希望這邊文章對(duì)于大家理解JavaScript對(duì)象有所幫助,。下一篇將寫(xiě)原型,。 譯者: var a = 2; var b = new Number(2); alert(a == b); // true alert(a === b); // false alert(a.valueOf()); // 2 alert(b.valueOf()); // 2 本文講述了當(dāng)對(duì)JavaScript內(nèi)建的原始值進(jìn)行點(diǎn)(.)操作時(shí)解析器的行為。如果你讀過(guò)Nicholas C. Zakas的《JavaScript高級(jí)程序設(shè)計(jì)》你一定會(huì)記得其中對(duì)此有詳細(xì)的解釋,。 相關(guān)文章: |
|
來(lái)自: 集微筆記 > 《JavaScript》