JavaScript中的對象(一)

來源:互聯網
上載者:User

最近我和朋友談起JavaScript中對象的問題。朋友以寫JavaScript為生,而且生活的很好,然而我發現他並不真正懂這們語言的某些核心特徵。如果你也有同樣的困惑,我下面嘗試解答。

朋友引用了一本書中的解釋,如下:
“有趣的是ECMAScript的原始值(像boolean,number和string)是偽對象,那就是說他們是有屬性和方法的。”
真的很抱歉,他不是這樣的。
我們先看一個例子
var a = 5;
a.t = 3;
alert(a.t);這個例子將會alert “undefined”。為什麼呢?如果a是一個偽對象那麼為什麼沒有儲存屬性呢?實際上a不是一個對象,甚至不是一個偽對象。它是原始的number。他沒有屬性。眾多周知JavaScript自動將變數從一個類型轉為另一個類型。看下面的程式碼片段:
var b = "w" + a + [1, 2, 3];number a和array [1, 2, 3]將自動轉為string。同樣的事情發生在點(.)操作符之前,JavaScript簡單的將左側的運算元轉為object。因此例子中的第二行會建立一個Number對象,它的值與a相等(本例中是5),然後為剛建立的Number對象的t屬性賦值為3。但是新的Number對象不會取代變數a(不會回寫給變數a),它只會被記憶體回收行程回收掉。第三行會再一次建立一個新對象,之後嘗試讀取新對象的t屬性,t屬性是“undefined”。
原始類型(boolean、number和string)不是對象,他們有可能像對象轉換。轉換規則是什麼呢?JavaScript有六種內建類型:null、undefined、number、string、boolean和object。轉換規則如下:
1、如果是對象那麼保持不變。
2、如果是null或者undefined拋出異常。
3、否則建立 (new Number(input)或者new String(input)或者new Boolean(input))。
希望這邊文章對於大家理解JavaScript對象有所協助。下一篇將寫原型。

譯者:
var a = 2;
var b = new Number(2);
alert(a == b); // true
alert(a === b); // false
alert(a.valueOf()); // 2
alert(b.valueOf()); // 2

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.