亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Javascript中的delete操作符詳細(xì)介紹

 更新時(shí)間:2014年06月06日 09:55:53   作者:  
這篇文章主要介紹了Javascript中的delete操作符詳細(xì)介紹,著重介紹了哪些情況可以使用delete操作符,以有delete操作符的返回值等問(wèn)題,需要的朋友可以參考下

一、變量

說(shuō)到j(luò)avascript中的delete操作符,還是首先要搞清楚javascript中的變量和屬性之間的關(guān)系。

javascript中,變量和對(duì)象屬性關(guān)系非常微妙,甚至可以很多時(shí)候會(huì)被等同起來(lái),因?yàn)?javascript 在執(zhí)行腳本之前會(huì)創(chuàng)建一個(gè)global對(duì)象,在瀏覽器中就是window對(duì)象,所有的全局變量都是這個(gè)global對(duì)象的屬性,執(zhí)行函數(shù)時(shí)也會(huì)創(chuàng)建一個(gè)activation對(duì)象,所有的局部變量都是這個(gè)activation對(duì)象的屬性。這些可以大家可以去了解一下javascript作用域和閉包。

復(fù)制代碼 代碼如下:
 
//原型中聲明的屬性無(wú)法被刪除

var global = 1;
this.global; // 1, 可以通過(guò)this來(lái)訪問(wèn)global對(duì)象
this.global2 = 2;
global2; // 12
function foo() {
var local = 36;
// 不過(guò)無(wú)法直接訪問(wèn)activation,
// 因此無(wú)法通過(guò) foo.local 的方式來(lái)訪問(wèn)local變量
}

似乎變量就等同于對(duì)象屬性,其實(shí)不然,至少對(duì)于delete操作符來(lái)說(shuō)還是不一樣的。我的理解是變量聲明是必須通過(guò) var 語(yǔ)句來(lái)完成的,未通過(guò)var 語(yǔ)句聲明的全局變量都是都是window對(duì)象的屬性。這樣就很容易的理解變量和對(duì)象屬性的關(guān)系了。

二、delete操作符

delete操作符是用來(lái)刪除對(duì)象屬性的。對(duì)于引用類型的值,它也是刪除對(duì)象屬性的本身,不會(huì)刪除屬性指向的對(duì)象。如果有疑問(wèn)可以看看基本類型和引用類型的值,或者測(cè)試下面的代碼:

復(fù)制代碼 代碼如下:
 
var o = {};
var a = { x: 10 };
o.a = a;
delete o.a; // o.a屬性被刪除
console.log(o.a); // undefined
console.log(a.x); // 10, 因?yàn)閧 x: 10 } 對(duì)象依然被 a 引用,所以不會(huì)被回收

另外,delete o.x 也可以寫(xiě)作 delete o["x"],兩者效果相同。

三、變量是不能刪除的

通過(guò)var聲明的變量和通過(guò)function聲明的函數(shù)擁有dontdelete特性,是不能被刪除。未通過(guò)var聲明的全局變量(全局對(duì)象的屬性)

復(fù)制代碼 代碼如下:
 
var global = {
    a: 123,
    b: {
        c: 1345
    }
};
delete global; //無(wú)效
console.log(global)

obj = {
    a: 123
};
delete obj; // 刪除obj全局變量,window對(duì)象的obj屬性
console.log(obj);//obj is not defined

 

四、原型中聲明的屬性和對(duì)象自帶的屬性無(wú)法被刪除

原型prototype中聲明的屬性和對(duì)象自帶的屬性(其實(shí)這些屬性也是在原型prototype中的)可以認(rèn)為是帶有dontdelete的特性的,無(wú)法被刪除。例如

復(fù)制代碼 代碼如下:
 
//原型中聲明的屬性無(wú)法被刪除

function obj() {
    this.x = 1;
}
obj.prototype.x = 2;

var o = new obj();
console.log(o.x); // 1, 構(gòu)造函數(shù)中定義的o.x

delete o.x;
console.log(o.x); // 2, prototype中定義的o.x,即使再次執(zhí)行delete o.x也不會(huì)被刪除

//對(duì)象自帶的屬性無(wú)法被刪除

var strings = "123456";
console.log(strings.length);//6
delete strings.length;
console.log(strings.length);//依然是6

五、eval語(yǔ)句下的幾個(gè)例外

eval執(zhí)行的代碼中,通過(guò)var聲明的變量雖然與正常的var聲明變量同屬于global對(duì)象,但它們不具有dontdelete特性,能被刪除。但是eval的代碼中的函數(shù)內(nèi)通過(guò)var定義的變量具有dontdelete,不能被刪除。

復(fù)制代碼 代碼如下:
eval("var x = 42;");
x; // => 42
delete x;
x; // => referenceerror: x is not defined
eval("function f() { return 12; }");
f(); // => 12
delete f;
f(); // => referenceerror: f is not defined
//eval執(zhí)行的代碼中,通過(guò)var聲明的變量雖然與正常的var聲明變量同屬于global對(duì)象,
// 但它們不具有dontdelete特性,能被刪除。
eval("(function () {" +
    " var x = 42;" +
    " delete x;" +
    " return x;" +
    "})();")
// => 42
// eval的代碼中的函數(shù)內(nèi)通過(guò)var定義的變量具有dontdelete,不能被刪除。

六、delete的返回值

delete是普通運(yùn)算符,會(huì)返回true或false。當(dāng)被delete的對(duì)象的屬性存在并且擁有dontdelete時(shí) 返回false,否則返回true。 這里的一個(gè)特點(diǎn)就是,對(duì)象屬性不存在時(shí)也返回true,所以返回值并非完全等同于刪除成功與否。

復(fù)制代碼 代碼如下:
 
function c() {
    this.x = 42;
}
c.prototype.y = 12;
var o = new c();

delete o.x; // true
o.x; // undefined
"x" in o; // false
// o.x存在并且沒(méi)有dontdelete,返回true

delete o.y; // true
o.y; // 12
// o自身沒(méi)有o.y屬性,所以返回true
// 從這里也可以看到prototype鏈的存在,對(duì)象自身屬性和prototype屬性是不同的

delete o; // false
// global.o擁有dontdelete特性所以返回false

delete undefinedproperty; // true
// global沒(méi)有名為undefinedproperty的屬性因此返回true

delete 42; // true
// 42不是屬性所以返回true。有的實(shí)現(xiàn)會(huì)拋出異常(違反ecmascript標(biāo)準(zhǔn))

var x = 24;
delete x++; // true
x; // 25
// 被刪除的是x++的返回值(24),不是屬性,所以返回true

相關(guān)文章

  • 淺談javascript中的加減時(shí)間

    淺談javascript中的加減時(shí)間

    下面小編就為大家?guī)?lái)一篇淺談javascript中的加減時(shí)間。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • JavaScript 表單處理實(shí)現(xiàn)代碼

    JavaScript 表單處理實(shí)現(xiàn)代碼

    這篇文章主要介紹了JavaScript 表單處理實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04
  • window.location.reload 刷新使用分析(去對(duì)話框)

    window.location.reload 刷新使用分析(去對(duì)話框)

    這篇文章主要介紹了window.location.reload 刷新使用分析(去對(duì)話框),需要的朋友可以參考下
    2015-11-11
  • Javascript基礎(chǔ)教程之?dāng)?shù)據(jù)類型轉(zhuǎn)換

    Javascript基礎(chǔ)教程之?dāng)?shù)據(jù)類型轉(zhuǎn)換

    JavaScript是一種無(wú)類型語(yǔ)言,但同時(shí)JavaScript提供了一種靈活的自動(dòng)類型轉(zhuǎn)換的處理方式?;疽?guī)則是,如果某個(gè)類型的值用于需要其他類型的值的環(huán)境中,JavaScript就自動(dòng)將這個(gè)值轉(zhuǎn)換成所需要的類型。
    2015-01-01
  • 老生常談javascript變量的命名規(guī)范和注釋

    老生常談javascript變量的命名規(guī)范和注釋

    下面小編就為大家?guī)?lái)一篇老生常談javascript變量的命名規(guī)范和注釋。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • 詳解JavaScript函數(shù)綁定

    詳解JavaScript函數(shù)綁定

    在JavaScript與DOM交互中經(jīng)常需要使用函數(shù)綁定,定義一個(gè)函數(shù)然后將其綁定到特定DOM元素或集合的某個(gè)事件觸發(fā)程序上,綁定函數(shù)經(jīng)常和回調(diào)函數(shù)及事件處理程序一起使用,以便把函數(shù)作為變量傳遞的同時(shí)保留代碼執(zhí)行環(huán)境
    2013-08-08
  • 前端編碼規(guī)范(3)JavaScript 開(kāi)發(fā)規(guī)范

    前端編碼規(guī)范(3)JavaScript 開(kāi)發(fā)規(guī)范

    這篇文章主要介紹了前端編碼規(guī)范(3)JavaScript 開(kāi)發(fā)規(guī)范,需要的朋友可以參考下
    2017-01-01
  • JSON為什么那樣紅為什么要用json(另有洞天)

    JSON為什么那樣紅為什么要用json(另有洞天)

    json是1年內(nèi)迅速紅遍全球的東東;json.org是一種簡(jiǎn)潔有效的數(shù)據(jù)載體,是一種用字符串表示復(fù)雜js對(duì)象的方式,后端好生成,前端0解釋,接下來(lái)詳細(xì)介紹json風(fēng)行的幾點(diǎn)原因
    2012-12-12
  • 你必須知道的JavaScript 變量命名規(guī)則詳解

    你必須知道的JavaScript 變量命名規(guī)則詳解

    在編寫(xiě)代碼的時(shí)候難免涉及到變量的命名問(wèn)題,不能只要求變量名的語(yǔ)法正確,而忽略了變量命名對(duì)代碼可讀性的影響
    2013-05-05
  • 淺談javascript構(gòu)造函數(shù)與實(shí)例化對(duì)象

    淺談javascript構(gòu)造函數(shù)與實(shí)例化對(duì)象

    JavaScript 中的構(gòu)造函數(shù)和其它語(yǔ)言中的構(gòu)造函數(shù)是不同的。 通過(guò) new 關(guān)鍵字方式調(diào)用的函數(shù)都被認(rèn)為是構(gòu)造函數(shù)。任何JavaScript 函數(shù)都可以用做構(gòu)造函數(shù),構(gòu)造函數(shù)必須 使用new 運(yùn)算符作為前綴來(lái)創(chuàng)建新的實(shí)例。
    2015-06-06

最新評(píng)論