Javascript教程:delete刪除對象

來源:互聯網
上載者:User

在javascript中,我們有時候要使用delete刪除對象。但是,對於delete的一些細節我們未必盡知。昨天,看到kangax分析delete的文章,獲益匪淺。本文將文章的精華部分翻譯出來,與各位分享。

  1. 原理
    1. 代碼類型
    2. 執行內容
    3. 啟用物件/可變對象
    4. 屬性特性
    5. 內建對象和DontDelete
    6. 未聲明的賦值
  2. Firebug 困惑
    1. 通過eval刪除變數
  3. 瀏覽器安全色性
    1. Gecko DontDelete bug
  4. IE bugs
  5. 誤區
  6. ‘delete’和宿主對象
  7. ES5strict 模式
  8. 總結

原理

為什麼我們能刪除一個對象的屬性?

var o = { x: 1 };
delete o.x; // true
o.x; // undefined

但是,像這樣聲明的變數則不行:

var x = 1;
delete x; // false
x; // 1

或者如此聲明的函數:

function x(){}
delete x; // false
typeof x; // "function"

注意,當一個屬性不能被刪除時,delete只返回false。

要理解這一點,我們首先需要掌握像變數執行個體化和屬性特性這樣的概念--遺憾的是這些在關於javascript的書中很少講到。我將在接下來的幾個段落中試著簡明的重溫這些概念。 理解它們一點也不難,如果你不在乎它們為什麼這麼運行,你可以隨意的跳過這一章。

代碼類型

在ECMAScript中有三種類型的可執行代碼:全域代碼(Global code)函數代碼(Function code)Eval code。這些類型有那麼點自我描述,但這裡還是作一個簡短的概述:

  1. 當一段原始碼本文被視為程式時,它在全域範圍中執行,被當成全域代碼(Global code)。在一個瀏覽器環境中,SCRIPT元素中的內容通常被當作程式來解析,因此,它被當作全域代碼來評估。
  2. 在一個函數內部直接執行的任何代碼,很明顯被當作函數代碼(Function code)。在瀏覽器紅中事件屬性的內容(如:<p onclick="...">)通常被當作函數代碼(Function code)來解析;
  3. 最後,提供給內建函數eval()的文本被當作Eval 代碼(Eval code)來解析。我們很快會看到這種類型很特殊。



相關文章

聯繫我們

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