1.Object.values()
返回值为数组,返回的是对象的键值对中属性的值value.它返回的数组顺序,如果对象的key值是数字,则返回值会对key值进行排序,返回的是排序后的结果
console.log(Object.values({one:2,two:1})) //[2,1]
console.log(Object.values({3:'a',4:'b',1:'c'})) //["c","a","b"]
若键名是symbol,编译时会被自动忽略
console.log(Object.values({[Symbol()]:1,"a":2})) //[2]
2.Object.keys()
返回值也是数组,但是它返回的是对象的键值对中的键名key.并且返回的数组顺序,如果对象的key值是数字,则返回值会对key值进行排序,返回的是排序后的结果
console.log(Object.keys({3:'a',4:'b',1:'c'})); //["1","3","4"]
若键名是symbol,编译时会被自动忽略
console.log(Object.keys({[Symbol()]:1,"a":2})) //["a"]
当参数为数组时,返回值为索引组成的数组
console.log(Object.keys([1,2,3,4])) //["0","1","2","3"]
当参数为字符串时,返回值也是索引组成的数组
console.log(Object.keys('中国新青年')) //["0","1","2","3","4"]
两者比较如下
var obj = { f1: 'abc', f2: 2 };
console.log(Object.keys(obj)) //["f1", "f2"]
console.log(Object.values(obj)) //["abc", 2]
3.Object.entries()
作用:将一个对象中可枚举属性的键名和键值按照二维数组的方法返回.若对象是数组,则会将数组的下标作为键值返回
let result=Object.entries({one:1,two:2});
console.log(result); //[["one",1],["two",2]]
console.log(Object.entries([1,3])); //[["0",1],["1",3]]
若键名是symbol,编译时会被自动忽略
console.log(Object.entries({[Symbol()]:1,two:2})) //["two",2]
entries()返回的数组顺序和Object.values(), Object.keys()一样,即如果对象的key值是数字,则返回值会对key值进行排序,返回的是排序后的结果
console.log(Object.entries({3:'a',4:'b',1:'c'})) //[["1","c"],["3","a"],["4","b"]]
三者同时比较如下
var obj = { foo: 'bar', baz: 42 };
console.log(Object.keys(obj)) //["foo", "baz"]
console.log(Object.values(obj)) //["bar", 42]
console.log(Object.entries(obj)) //[["foo", "bar"], ["baz", 42]]
let f1={[Symbol()]:'d',3:'a',4:'b',1:'c'};
console.log(Object.keys(f1)) //["1","3","4"]
console.log(Object.values(f1)) //["c","a","b"]
console.log(Object.entries(f1)) //[["1","c"],["3","a"],["4","b"]]