delete是一元操作符,它用來刪除對象屬性或者數(shù)組元素。就像 賦值、遞增、遞減運(yùn)算符一樣,delete也是具有副作用的,它是用來做刪除操作的,不是用來返回一個值的,例如:
創(chuàng)新互聯(lián)專注于永福企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計,電子商務(wù)商城網(wǎng)站建設(shè)。永福網(wǎng)站建設(shè)公司,為永福等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站設(shè)計,專業(yè)設(shè)計,全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
var o = { x: 1, y: 2}; // 定義一個對象 delete o.x; // 刪除一個屬性 "x" in o // => false:這個屬性在對象中不再存在 var a = [1,2,3]; // 定義一個數(shù)組 delete a[2]; // 刪除最后一個數(shù)組元素 2 in a; // => false:元素2在數(shù)組中已經(jīng)不存在了 a.length // => 3:注意,數(shù)組長度并沒有改變,盡管上一行代碼刪除
需要注意的是,刪除屬性或者刪除數(shù)組元素不僅僅是設(shè)置了一個 undefined的值。當(dāng)刪除一個屬性時,這個屬性將不再存在。讀取一個不 存在的屬性將返回undefined,但是可以通過in運(yùn)算符(見4.9.3節(jié))來檢測這個屬性是否在對象中存在。
delete希望他的操作數(shù)是一個左值,如果它不是左值,那么delete將 不進(jìn)行任何操作同時返回true。否則,delete將試圖刪除這個指定的左 值。如果刪除成功,delete將返回true。然而并不是所有的屬性都可刪 除,一些內(nèi)置核心和客戶端屬性是不能刪除的,用戶通過var語句聲明 的變量不能刪除。同樣,通過function語句定義的函數(shù)和函數(shù)參數(shù)也不能刪除。
在ECMAScript 5嚴(yán)格模式中,如果delete的操作數(shù)是非法的,比如 變量、函數(shù)或函數(shù)參數(shù),delete操作將拋出一個語法錯誤 (SyntaxError)異常,只有操作數(shù)是一個屬性訪問表達(dá)式(見4.4節(jié))的 時候它才會正常工作。在嚴(yán)格模式下,delete刪除不可配置的屬性(參 照6.7節(jié))時會拋出一個類型錯誤異常。在非嚴(yán)格模式下,這些delete操 作都不會報錯,只是簡單地返回false,以表明操作數(shù)不能執(zhí)行刪除操作。
這里有一些關(guān)于delete運(yùn)算符的例子:
var o = {x:1, y:2}; //定義一個變量,初始化為對象 delete o.x; //刪除一個對象屬性,返回true typeof o.x; //屬性不存在,返回"undefined" delete o.x; //刪除不存在的屬性,返回true delete o; //不能刪除通過var聲明的變量,返回false //在嚴(yán)格模式下,將拋出一個異常 delete 1; //參數(shù)不是一個左值,返回true this.x = 1; //給全局對象定義一個屬性,這里沒有使用 var delete x; //試圖刪除它,在非嚴(yán)格模式下返回true //在嚴(yán)格模式下會拋出異常,這時使用"delete this.x"來代替 x; //運(yùn)行時錯誤,沒有定義x
以上就是關(guān)于javascript中delete運(yùn)算符的基礎(chǔ)知識點(diǎn),感謝大家的學(xué)習(xí)和對創(chuàng)新互聯(lián)的支持。