# 介绍

进去搜索往下找到 13_链式调⽤&对象属性与遍历&this指向&caller_callee

# for in 遍历对象

for in 遍历对象 遍历数组 不排除原型上自定义的属性,也就是继承原型自定义属性

注意:obj.key -> obj['key'] -> undefined

var obj = {
  brand: 'Benz',
  color: 'red',
  displacement: '3.0',
  lang: 5,
  width: 2.5
}

for (var key in obj) {
  console.log(key + ': ' + obj[key]);
}

img


# 判断对象属性是否存在

  1. obj.hasOwnProperty(key) 判断对象的属性是否存在 排除原型上自定义的属性 返回值 Boolean

  2. 'key' in obj 判断对象的属性是否存在 不排除原型上自定义的属性 返回值 Boolean

  3. obj instanceof Obj A对象是不是B对象构造出来的,原型链有重合的都是true 返回值 Boolean


# 判断是不是数组

  1. arr.constructor

  2. arr instanceof Array

  3. var str = Object.prototype.toString// 推荐

if (str.call(arr) === '[object Array]') {}

// 底层
Object.prototype = {
  toString: function () {
    this.toString();// call替换this
  }
}


# this指向问题

全局this this指向window

普通函数的this this指向window

构造函数的this 指向实例化对象

call/apply的this 改变this指向


# callee、caller

在严格模式下报错

argument.callee 括力 实参对应哪个函数就返回哪个函数。

argument.caller 括了 谁调用的当前函数就返回哪个函数。

callee的⽤法:他是arguments的⼀个属性,⽴即执⾏函数没有名字,所以用arguments.callee代替,他找的是这个本身函数并不是名字。