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 将对象连接起来组成了原型链