面试题总结(二)

155 阅读1分钟

1、let var const

函数提升优先于变量提升,函数提升会把整个函数放到顶部,而变量提升只是把声明方到顶部。

var 存在提升,可以在声明之前使用 值为 undefined。

let、const不可以是因为会形成暂时性死区

let不允许在同一个作用域重复声明同一个变量。

const声明一个基本类型的时候为常量,不可修改;声明对象可以修改。

2、typeof

typeof 对于基本类型,除了null 都可以正常显示

typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'
typeof null  // 'object'
typeof []  // 'object'
typeof {}  // 'object'

3、instance of 原理

instanceof 可以正确判断对象类型,判断方式以原型链的方式查找

function myInstanceof(left,right){
  let prototype = right.prototype;
  left = left.__proto__;
  while(true){
    if(left === null || left === undefined)
      return false
    if(prototype === left)
      return true
    left = left.__proto__
  }
}

4、原型及原型链

每个函数都有自己的 prototype

每个对象都有__proto__属性, 指向了创建该对象的构造函数的原型。其实这个属性指向了 prototype,所以使用 proto 来访问 对象可以通过__proto__ 来寻找不属于该对象的属性,proto 将对象连接起来组成了原型链