true or false
在判断语句中,下列值会被认定为false
:
false
null
undefined
''
空字符0
数字 0NaN
数字 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