2017.2.20
Delete關(guān)鍵字
語法:
delete?expression
expression應(yīng)該是一個對象的屬性引用,例如:
delete?object.property
delete?object['property']
如果expression的計(jì)算結(jié)果不是一個對象的屬性引用,那么恢筝,delete不會起任何作用。
參數(shù)
objectName 對象名.
property ? ? ? ?需要刪除的屬性.
在嚴(yán)格模式中巨坊,如果屬性是一個不可配置(non-configurable)屬性撬槽,刪除時會拋出異常,非嚴(yán)格模式下返回false趾撵。其他情況都返回true侄柔。
delete 操作符與直接釋放內(nèi)存(只能通過解除引用來間接釋放)沒有關(guān)系共啃。可查看內(nèi)存管理頁面暂题。developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management
你可以使用delete操作符來刪除一個隱式聲明的全局變量,也就是沒有使用var定義的全局變量.全局變量其實(shí)是global對象(window)的屬性.
如果delete操作符刪除成功移剪,則被刪除的屬性將從所屬的對象上徹底消失。然后薪者,如果該對象的原型鏈上有一個同名屬性纵苛,則該對象會從原型鏈上繼承該同名屬性。
一些對象的屬性不能被delete ? 顯示全局變量不能直接被刪除言津,如果是刪除相應(yīng)屬性可以攻人,隱式全局變量能被全部刪除(不管是字符串,數(shù)字悬槽,還是對象···)
你不能刪除一個對象從原型繼承而來的屬性(不過你可以從原型上直接刪掉它).
刪除數(shù)組元素
當(dāng)你刪除一個數(shù)組元素時怀吻,數(shù)組的 length 屬性并不會變小。例如初婆,如果你刪除了a[3], a[4]仍然是a[4], a[3]成為undefined. 即便你刪除了最后一個元素也是如此 (delete a[a.length-1]).
數(shù)組內(nèi)刪除變成了undefined的數(shù) ?該位子還是存在著的,但是該位置上的值是沒有了 所以 x in arr 是false
如果你想讓一個數(shù)組元素的值變?yōu)閡ndefined而不是刪除它蓬坡,可以使用undefined給其賦值而不是使用delete操作符。下面的例子中磅叛,trees[3] 被賦值為undefined渣窜,但該元素仍然存在。
引用:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/delete
In關(guān)鍵字
1.For...In 聲明用于對數(shù)組或者對象的屬性進(jìn)行循環(huán)/迭代操作宪躯。
for(var i in object) {
? ? ?xxxxx
}
2.判斷對象是否為數(shù)組/對象的元素/屬性:
var arr = ["a","b","2","3","str"]; ?
var result = ("b" in arr); ? ? ? ? ? ? ? //false ? ? ? ? ?數(shù)組是索引index ? ? 對象是鍵值key
var result1 = (4 in arr); ? ? ? ? ? ? ? //true
var obj = {
? ? ? ? w:'wen'
? ? ? ? j:'jiao'
}
var result = (1 in obj);? ? ? ? ? ? ? //false? ? ? ? ? 數(shù)組是索引index? ? 對象是鍵值key
var result1 = ("j" in obj); ? ? ? ? ?//true