true or false

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

  • false
  • null
  • undefined
  • '' 空字符
  • 0 数字0
  • NaN 数字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