JavaScript Object.entries()

admin發表於2018-08-26

Object.entries方法返回給定物件自有可列舉屬性鍵值對的陣列。

上述概念強調兩點:

(1).可以返回的屬性鍵值對必須是自有,也就是不能是從原型鏈上繼承而來。

(2).返回值是一個陣列,陣列的元素是儲存有鍵值對的子陣列。

遍歷返回的鍵值對的順序與使用for in語句返回的順序規則相同。

關於這個順序規則在JavaScript Object.values()一章節有介紹。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
Object.entries(obj)

引數解析:

(1).obj:必需,被返回可列舉鍵值對的物件。

瀏覽器相容:

(1).IE瀏覽器不支援此方法。

(2).Edge瀏覽器支援此方法。

(3).谷歌瀏覽器支援此方法。

(4).火狐瀏覽器支援此方法。

(5).opera瀏覽器不支援此方法。

(6).safria瀏覽器支援此方法。

此方法是ES2017新增。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼
let web={
    webName:"螞蟻部落",
    age:6,
    address:"青島市南區"
}
console.log(Object.entries(web));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/26/001457jspqf75p56glq44s.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到Object.entries方法的返回值是一個陣列,它的元素也是一個陣列。

每一個子陣列具有兩個元素,分別是指定物件的屬性名稱和屬性值,也就是鍵值對。

再來看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
let web={
  webName:"螞蟻部落",
  age:6,
  address:"青島市南區"
}
Object.defineProperty(Antzone, "url", {
    value: "http://www.softwhy.com",
    enumerable: false
});
console.log(Object.entries(web));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/26/001536nqg8nzfvgngz9kz1.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

由於url屬性是不可列舉的,所以Object.entries方法無法獲取到。

[JavaScript] 純文字檢視 複製程式碼
let web={
  webName:"螞蟻部落",
  age:6,
  address:"青島市南區"
}
Object.prototype.codeTest="ES2015";
console.log(web);

上述程式碼在原型鏈上為物件新增一個codeTest屬性,屬性值為"ES2015"。

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/26/001622sqejjmjjkhhypaxe.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

現在對web物件應用Object.entries方法,程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
let web={
  webName:"螞蟻部落",
  age:6,
  address:"青島市南區"
}
Object.prototype.codeTest="ES2015";
console.log(Object.entries(web));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/26/001655qp12j94lgymjiktk.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

有上圖可見,Object.entries方法對於原型鏈上繼承的非自有屬性無能為力。

相關文章