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