Object.{keys,values}方法随笔

for…in 语句

for…in 可以任意顺序的遍历一个 Object (对象)里面自有的、原型链上面的、可枚举的、非 Symblo 的属性。
对于每一个属性,都会被执行。

*注 可循环枚举原型链上的属性。

可枚举属性: 能被 for…in 语句迭代出来的就属性
不可枚举属性: 原型链上的属性原则上都属于不可枚举属性,不能被 for…in 语句迭代出来,但是每一个属性都会被执行

Object.keys()

Object.keys() 方法会返回一个字符串数组,如果键-值都不可枚举,则返回键组成的数组。

Object.keys() 会返回一个所有元素都是字符串的数组,该数组的元素都属于给定对象的可枚举属性,其遍历顺序和 for…in
遍历的顺序一致。


const NUMS = [1, 2, 3];
console.log(Object.keys(NUMS))              // ['0', '1', '2']

const Person = {
  name: 'Mary',
  job: 'IT',
  age: '20',
  sex: '男'
}

const KEYS = Object.keys(Person);
console.log(KEYS);                          // ["name", "job", "age", "sex"]

// array like object with random key ordering
var anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(anObj)); // console: ['2', '7', '100']

var myObj = Object.create({}, {
  getFoo: {
    value: function () { return this.foo; }
  } 
});
myObj.foo = 1;
console.log(Object.keys(myObj));            // ['foo']

Object.values()

Object.values() 返回一个数组。

Object.values() 返回一个数组,其元素是给定对象可枚举属性的值,其遍历顺序和 for…in
遍历的顺序一致。

const Person = {
  name: 'Mary',
  job: 'IT',
  age: '20',
  sex: '男'
}

const VALUES = Object.values(Person);
console.log(VALUES);                      //  ["Mary", "IT", "20", "男"]

// array like object with random key ordering
// when we use numeric keys, the value returned in a numerical order according to the keys
var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.values(an_obj)); // ['b', 'c', 'a']

// getFoo is property which isn't enumerable
var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
my_obj.foo = 'bar';
console.log(Object.values(my_obj));       // ['bar']

// non-object argument will be coerced to an object
console.log(Object.values('foo'));        // ['f', 'o', 'o']

所以当需要遍历一个 Object 的属性时,请尽量避免 for…in 语句的使用,我们可以使用 Object.keys() 方法。
或者 propertyIsEnumerable() 方法判断该属性是否是可枚举属性, hasOwnProperty() 方法判断可枚举属性里面是否
包含该属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值