Object.keys()方法 返回對象屬性數組


MDN語法

Object.keys(obj)

參數obj:要返回其枚舉自身屬性的對象。

返回值:一個表示給定對象的所有可枚舉屬性的字符串數組。

1.傳入一個對象,返回的的是所有屬性值
var obj2={
    "b":5,
    "7":8,
    "6":8,
    "a":6,
    "8":9,
    "c":10,
    "-3":5
}
console.log(Object.keys(obj2)) // ["6", "7", "8", "b", "a", "c", "-3"]

可以看到,返回值數組里數字在前面,且會自動排序

這是因為Object.keys在內部會根據屬性名key的類型進行不同的排序邏輯。分三種情況:

  1. 如果屬性名的類型是Number,那么Object.keys返回值是按照key從小到大排序
  2. 如果屬性名的類型是String,那么Object.keys返回值是按照屬性被創建的時間升序排序。
  3. 如果屬性名的類型是Symbol,那么邏輯同String相同

(負數是作為字符串處理的,也是按照創建的時間順序)

2.傳入一個數組,返回的是索引值
var arr=[2,5,7,3,"t","7",6]
console.log(Object.keys(arr)) //["0", "1", "2", "3", "4", "5", "6"]
3.傳入一個字符串,返回的是索引值
var str="hello sansan"
console.log(Object.keys(str)) //["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"]
4.構造函數,返回空數組或屬性值
function sansan(width,long,height){
    this.width=width;
    this.long=long;
    this.height=height;
    this.area=function(){
       return this.height*this.width*this.long;
    }
}
console.log(Object.keys(sansan)) //[]
var xiamu=new sansan(2,3,4)
console.log(Object.keys(xiamu)) //["width", "long", "height", "area"]
參考博客

5分鍾徹底理解Object.keys

注意

在ES5里,如果此方法的參數不是對象(而是一個原始值),那么它會拋出 TypeError。在ES2015中,非對象的參數將被強制轉換為一個對象。

Object.keys("foo");
// TypeError: "foo" is not an object (ES5 code)

Object.keys("foo");
// ["0", "1", "2"]                   (ES2015 code)


免責聲明!

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



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