乐趣区

关于前端:R21真假判断-属性遍历

true or false

在判断语句中,下列值会被认定为false:

  • false
  • null
  • undefined
  • '' 空字符
  • 0 数字 0
  • NaN 数字 NaN

留神:

null == undefined;      // true
null === undefined;     // false 
NaN == NaN;             // false

遍历属性

1. 应用 for...in... 遍历

  • for...in... 能够遍历对象所有可枚举属性,包含原型链上的属性。也能够遍历数组的下标。
  • Object.prototype.hasOwnProperty(prop) 办法能够判断 prop 属性(包含不可枚举属性)是否是非原型链办法。
let a = {
    propA: 'a-prop',
    propB: function(){}
}
a.__proto__ = { // 原型链属性
    protoA: 'a-prop-proto'
}
Object.defineProperty(a, 'propC', {
    value: 'prop-c',
    enumerable: false,      // 不可枚举, for in 无奈遍历该属性
    configurable: true,
    writable: true
})

// 能够遍历自身和原型链上的属性
for (let prop in a) {console.log(`${prop}属性是否是非原型链属性:`, a.hasOwnProperty(prop));
}
const arr = ['a', 'b', 'c'];
// 遍历数组的下标
for (let i in arr) {console.log('arr props:', i);
}
// 遍历数组的值
for (let j of arr) {console.log('arr values:', j);
}

2. Object.keys

Object.keys 只遍历对象 非原型链 可枚举 的属性。

let a = {
    propA: 'a-prop',
    propB: function(){}
}
a.__proto__ = { // 原型链属性
    protoA: 'a-prop-proto'
}
Object.defineProperty(a, 'propC', {
    value: 'prop-c',
    enumerable: false,      // 不可枚举, for in 无奈遍历该属性
    configurable: true,
    writable: true
})

console.log(Object.keys(a));        // 只有 propA, propB
退出移动版