js刪除對象或數組中的某個屬性


1.delete 

  delete是刪除對象的屬性沒有任何剩菜剩下的唯一真正的方法,但它的工作比其“替代”設置慢100倍 object[key] = undefined

var myObject = {
    "ircEvent": "PRIVMSG",
    "method": "newURI",
    "regex": "^http://.*"
};
delete myObject.regex;

console.log(myObject);

delete 操作符會從某個對象上移除指定屬性。成功刪除的時候回返回 true,否則返回 false。但是,以下情況需要重點考慮:

  • 如果你試圖刪除的屬性不存在,那么delete將不會起任何作用,但仍會返回true
  • 如果對象的原型鏈上有一個與待刪除屬性同名的屬性,那么刪除屬性之后,對象會使用原型鏈上的那個屬性(也就是說,delete操作只會在自身的屬性上起作用)
  • 任何使用 var 聲明的屬性不能從全局作用域或函數的作用域中刪除。
    • 這樣的話,delete操作不能刪除任何在全局作用域中的函數(無論這個函數是來自於函數聲明或函數表達式)
    • 除了在全局作用域中的函數不能被刪除,在對象(object)中的函數是能夠用delete操作刪除的。
  • 任何用letconst聲明的屬性不能夠從它被聲明的作用域中刪除。
  • 不可設置的(Non-configurable)屬性不能被移除。這意味着像MathArrayObject內置對象的屬性以及使用Object.defineProperty()方法設置為不可設置的屬性不能被刪除。

具體信息: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/delete

 

2.  obj.field = undefined;

這個選擇不是這個問題的正確答案!但是,如果你小心使用它,你可以大大加快一些算法。如果您delete在循環中使用並且在性能方面存在問題,請閱讀詳細解釋

 var obj = {
     field: 1     
 };
 obj.field = undefined;

具體信息: https://includestdio.com/1127.html

 

3.  數組中使用delete

在數組中,與普通的舊對象不同,使用delete在表單中留下垃圾,null在數組中創建一個“洞”, 而且length不變

var array = [1, 2, 3, 4];
delete array[2];
/* Expected result --> [1, 2, 4]
 * Actual result   --> [1, 2, null, 4]
 */

4. 數組中使用splice

arrayObject.splice(index,howmany,item1,.....,itemX)
index: 必需。整數,規定添加/刪除項目的位置,使用負數可從數組結
    尾處規定位置。
howmany: 必需。要刪除的項目數量。如果設置為 0,則不會刪除項目。
item1: 可選。向數組添加的新項目。
var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"

document.write(arr + "<br />")
arr.splice(2,0,"William")
document.write(arr + "<br />")
/*
*George,John,Thomas,James,Adrew,Martin
*George,John,William,Thomas,James,Adrew,Martin
*/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM