封裝對象——JavaScript中原始類型擁有屬性的原因

來源:互聯網
上載者:User

  我們先看段代碼:

var s = "Test";var len=s.length;

  我們知道在JavaScript中像上面這樣聲明的字串不是對象,但既然這裡的s不是對象,為什麼會有length的屬性呢?

  原因是在JavaScript中只要引用了字串(數字、布爾值也是一樣的)的屬性,JS就會將字串通過調用new String(s)的方式轉換成對象,這個對象繼承了字串的方法,並被用來處理屬性的引用。一旦屬性引用結束,這個新建立的對象就會銷毀(真實實現並不一定是這樣,但整個過程看起來是這樣)。這個過程就叫封裝對象。

  有沒有辦法驗證上面的解釋呢,我們來看兩段代碼:

  代碼一:

var s = "Test";s.len=10;//建立字串對象,並添加len屬性,然後銷毀var t = s.len;//建立字串對象,讀取len屬性,由於不存在所以結果是 undefined

  代碼二:

var s = new String("Test");s.len = 10;var t = s.len;//10

  最後一點需要注意的是,原始對象和封裝對象不嚴格相等:

var s = "Test", S=new String("Test");console.log(s == S);//trueconsole.log(s === S);//false
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.