摘要:如果你想讓一個(gè)數(shù)組元素的值變?yōu)槎皇莿h除它,可以使用給其賦值而不是使用操作符。此時(shí)數(shù)組元素是在數(shù)組中的操作符與直接釋放內(nèi)存只能通過解除引用來間接釋放沒有關(guān)系。
delete 操作符用來刪除一個(gè)對象的屬性 語法EDIT
delete expression
expression 應(yīng)該是一個(gè)對象的屬性引用,例如:
delete object.property
delete object["property"]
如果 expression 的計(jì)算結(jié)果不是一個(gè)對象的屬性引用,那么,delete不會(huì)起任何作用。
參數(shù)objectName 對象名. property 需要?jiǎng)h除的屬性. 返回值
【注意】在嚴(yán)格模式中,如果屬性是一個(gè)不可配置(non-configurable)屬性,刪除時(shí)會(huì)拋出異常,非嚴(yán)格模式下返回 false。其他情況都返回 true。
描述EDITdelete 操作符與直接釋放內(nèi)存(只能通過解除引用來間接釋放)沒有關(guān)系??刹榭磧?nèi)存管理頁面。
【注意】你可以使用 delete 操作符來刪除一個(gè)隱式聲明的全局變量,也就是沒有使用 var 定義的全局變量.全局變量其實(shí)是global對象(window)的屬性.
如果 delete 操作符刪除成功,則被刪除的屬性將從所屬的對象上徹底消失。然后,如果該對象的原型鏈上有一個(gè)同名屬性,則該對象會(huì)從原型鏈上繼承該同名屬性。
Temporal dead zone在ECMAScript 6中,通過 const 或 let 聲明指定的 "temporal dead zone" (TDZ) 對 delete 操作符也會(huì)起作用。因此,下面的代碼將會(huì)拋出 ReferenceError。
function foo(){
delete x;
let x;
}
function bar() {
delete y;
const y;
}
一些對象的屬性不能被delete. ECMA 262 規(guī)范中把這些屬性標(biāo)記為 DontDelete.
x = 42; // 隱式聲明的全局變量
var y = 43; // 顯式聲明的全局變量
myobj = {
h: 4,
k: 5
}
// 隱式聲明的全局變量可以被刪除
delete x; // 返回 true
// 顯式聲明的全局變量不能被刪除,該屬性不可配置(not configurable)
delete y; // 返回 false
//內(nèi)置對象的內(nèi)置屬性不能被刪除
delete Math.PI; // 返回 false
//用戶定義的屬性可以被刪除
delete myobj.h; // 返回 true
// myobj 是全局對象(window)的屬性,而不是變量,因此可以被刪除
delete myobj; // 返回 true
function f() {
var z = 44;
// delete doesn"t affect local variable names
delete z; // returns false
}
你不能刪除一個(gè)對象從原型繼承而來的屬性(不過你可以從原型上直接刪掉它).
function Foo(){}
Foo.prototype.bar = 42;
var foo = new Foo();
// 無效的操作
delete foo.bar;
// logs 42,繼承的屬性
console.log(foo.bar);
// 直接刪除原型上的屬性
delete Foo.prototype.bar;
// logs "undefined",已經(jīng)沒有繼承的屬性
console.log(foo.bar);
刪除數(shù)組元素
當(dāng)你刪除一個(gè)數(shù)組元素時(shí),數(shù)組的 length 屬性并不會(huì)變小。
例如,如果你刪除了a[3], a[4]仍然是a[4], a[3]成為undefined. 即便你刪除了最后一個(gè)元素也是如此 (delete a[a.length-1]).
當(dāng)用 delete 操作符刪除一個(gè)數(shù)組元素時(shí),被刪除的元素已經(jīng)完全不屬于該數(shù)組。下面的例子中, trees[3] 被使用delete徹底刪除。
var trees = ["redwood","bay","cedar","oak","maple"];
delete trees[3];
if (3 in trees) {
// 這里不會(huì)被執(zhí)行
}
如果你想讓一個(gè)數(shù)組元素的值變?yōu)?undefined 而不是刪除它,可以使用 undefined 給其賦值而不是使用 delete 操作符。下面的例子中,trees[3] 被賦值為undefined,但該元素仍然存在。
var trees = ["redwood","bay","cedar","oak","maple"];
trees[3]=undefined;
if (3 in trees) {
// 這里會(huì)被執(zhí)行
}
1.delete使用原則:delete 操作符用來刪除一個(gè)對象的屬性。
2.delete在刪除一個(gè)不可配置的屬性時(shí)在嚴(yán)格模式和非嚴(yán)格模式下的區(qū)別:
在嚴(yán)格模式中,如果屬性是一個(gè)不可配置(non-configurable)屬性,刪除時(shí)會(huì)拋出異常;
非嚴(yán)格模式下返回 false。
3.delete能刪除隱式聲明的全局變量:這個(gè)全局變量其實(shí)是global對象(window)的屬性
4.delete能刪除的:
(1)可配置對象的屬性(2)隱式聲明的全局變量 (3)用戶定義的屬性 (4)在ECMAScript 6中,通過 const 或 let 聲明指定的 "temporal dead zone" (TDZ) 對 delete 操作符也會(huì)起作用
delete不能刪除的:
(1)顯式聲明的全局變量 (2)內(nèi)置對象的內(nèi)置屬性 (3)一個(gè)對象從原型繼承而來的屬性
5.delete刪除數(shù)組元素:
(1)當(dāng)你刪除一個(gè)數(shù)組元素時(shí),數(shù)組的 length 屬性并不會(huì)變小,數(shù)組元素變成undefined
(2)當(dāng)用 delete 操作符刪除一個(gè)數(shù)組元素時(shí),被刪除的元素已經(jīng)完全不屬于該數(shù)組。
(3)如果你想讓一個(gè)數(shù)組元素的值變?yōu)?undefined 而不是刪除它,可以使用 undefined 給其賦值而不是使用 delete 操作符。此時(shí)數(shù)組元素是在數(shù)組中的
6.delete 操作符與直接釋放內(nèi)存(只能通過解除引用來間接釋放)沒有關(guān)系。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/81536.html
摘要:將指定的數(shù)字索引值轉(zhuǎn)換成字符串索引值變成,然后將其作為屬性名來用。返回一個(gè)由刪除元素組成的數(shù)組。該方法返回的數(shù)組元素是調(diào)用的數(shù)組的一個(gè)子集。使用的函數(shù)有四個(gè)參數(shù)初始值積累值數(shù)組元素元素索引數(shù)組本身。 前言 很多人在學(xué)習(xí)原生JS的過程中會(huì)遇到一些疑惑,比如在學(xué)習(xí)array時(shí),就很容易搞不清哪些方法會(huì)改變原來數(shù)組,哪些方法不會(huì)改變原來數(shù)組?再比如很多人會(huì)使用new Date()獲取時(shí)間,卻...
摘要:反之亦然非嚴(yán)格合并嚴(yán)格看起來是非嚴(yán)格的。在普通的里面給一個(gè)拼寫錯(cuò)誤的變量名賦值會(huì)使全局對象新增一個(gè)屬性并繼續(xù)工作盡管后面可能出錯(cuò)在現(xiàn)在的中有可能。第三嚴(yán)格模式禁止刪除聲明變量。 文章整理自MSDN:https://developer.mozilla.org... 1.逐步使用嚴(yán)格模式 ECMAScript 5的嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式不是一個(gè)...
摘要:閉包能用來實(shí)現(xiàn)私有化和創(chuàng)建工廠函數(shù)等作用。關(guān)于閉包的常見面試題是這樣的寫一個(gè)函數(shù),循環(huán)一個(gè)整數(shù)數(shù)組,延遲秒打印這個(gè)數(shù)組中每個(gè)元素的索引。 文章來源:http://mp.weixin.qq.com/s/vs0... 前言 在公眾號上看到了這篇文章,覺得很有用,有助于理解JS學(xué)習(xí)中的一些重點(diǎn)難點(diǎn)。決定把它整理下發(fā)布出來。該文章主要介紹了JS中的三個(gè)問題。在以后的幾篇文章里,我會(huì)詳細(xì)介紹這三...
摘要:讓你收獲滿滿碼個(gè)蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計(jì)篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學(xué)習(xí),特此花了幾個(gè)小時(shí)整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個(gè)蛋從2017年02月20...
摘要:詳解十大常用設(shè)計(jì)模式力薦深度好文深入理解大設(shè)計(jì)模式收集各種疑難雜癥的問題集錦關(guān)于,工作和學(xué)習(xí)過程中遇到過許多問題,也解答過許多別人的問題。介紹了的內(nèi)存管理。 延遲加載 (Lazyload) 三種實(shí)現(xiàn)方式 延遲加載也稱為惰性加載,即在長網(wǎng)頁中延遲加載圖像。用戶滾動(dòng)到它們之前,視口外的圖像不會(huì)加載。本文詳細(xì)介紹了三種延遲加載的實(shí)現(xiàn)方式。 詳解 Javascript十大常用設(shè)計(jì)模式 力薦~ ...
閱讀 3651·2021-11-23 09:51
閱讀 1995·2021-11-16 11:42
閱讀 3244·2021-11-08 13:20
閱讀 1099·2019-08-30 15:55
閱讀 2210·2019-08-30 10:59
閱讀 1242·2019-08-29 14:04
閱讀 1026·2019-08-29 12:41
閱讀 2029·2019-08-26 12:22