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)
posted @ 2020-12-19 10:53  夏目的三三  阅读(981)  评论(0编辑  收藏  举报