本篇文章介绍面试中常常问的JS基础知识点。文章中的关联问题能够在面试官问了问题后本身进行引伸这些相关话题,从而引导面试官询问本身擅长的部分。后续会持续推出HTML知识点、CSS知识点、ES6知识点、JS进阶知识点、webpack知识点、react知识点、组件设计相关知识点、浏览器相关知识点、网络相关知识点、算法相关知识点等文章进行全面的知识梳理。react
Q: 基础类型有哪些?
A: 基础类型有 number、undefined、null、bollean、string、symbol。
关联Q: 和对象类型的存储有什么区别?
关联A: 基础类型存储在栈内存中,存储的是值,是没有函数能够调用的。对象类型存储在堆内存中,存储的是地址。
关联Q: null
是对象吗?
关联A: 虽然typeof null
输出的是object
,可是null
实际上是基础类型。这个错误是由于JS的最第一版本是32位系统,000开头表明的是对象,而null
表示全零,因此被错误的判断为object
webpack
Q: typeof
能正确的判断类型吗?
A: 对于基础类型,除了null
其他的基础类型都能正确判断类型,对于对象类型,除了函数都会显示object
,因此不能准确区分类型。
关联Q: instanceof能正确的判断类型吗?
关联A: instanceof
能够准确的判断对象类型,由于内部机制是经过原型链来判断的。可是它不能区分基础类型,固然也能够写一个自定义类,修改Symbol.hasInstance
属性来判断基础类型。
web
Q: == 和 === 有什么区别?
A: ===
不须要进行类型转换,只有类型相同,而且值相等时返回true
,==
须要进行类型转换比较。
关联Q: 类型转换的规则是怎样的?
关联A: 先判断类型是否相等,若是相等就判断值是否相等;判断类型是不是null
或者undefined
,若是是则返回true
;判断类型是不是number
和string
,若是是则把string
转成number
;判断类型其中一方是不是boolean
,若是是则把boolean
转成number
再进行比较;判断类型其中一方是不是object
,且另外一方是string、number、symbol
若是是则把object
转成原始类型在进行比较。对象转原始类型会调用内置的Symbol.toPrimitive
函数。
面试
Q: 如何正确判断this?
A: this的绑定规则有四种:默认绑定、隐式绑定、硬绑定、new绑定。new绑定的优先级最高,而后是硬绑定,而后是隐式绑定,最后是默认绑定。
关联Q: 箭头函数的this是什么?
关联A: 箭头函数的this
取决于包裹箭头函数的第一个普通函数的this
。
算法
Q: 什么是闭包?
A: 闭包就是可以访问另外一个函数做用域下的变量的函数。
关联Q: 闭包有哪些使用场景?
关联A: 封装私有变量、模仿块级做用域、实现JS的模块。
浏览器
Q: 浅拷贝和深拷贝是什么?
A: 浅拷贝只会拷贝全部属性值到新对象中,若是属性是对象拷贝的是地址。深拷贝会深层次的拷贝对象的值。
关联Q: 如何实现浅拷贝和深拷贝?
关联A: 浅拷贝能够经过Object.assign
方法来实现,另外也能够经过...
操做符来实现。深拷贝能够经过JSON.parse(JSON.stringify(object))
来解决,可是这个方法会忽略undefined、symbol
,且不能序列化函数,不能解决循环引用的对象。若是拷贝的对象含有内置类型不包含函数,也可使用MessageChannel
来实现。
网络
Q: 如何理解原型?如何理解原型链?
A: 每当定义一个对象时,对象都会包含一些预约义的属性。其中每一个函数对象都有一个prototype
属性,这个属性指向函数的原型对象。原型链就是多个对象经过__proto__链接了起来。经过原型链能够拥有定义在其余对象中的属性和方法。
关联Q: 是否是全部函数都有prototype属性?
关联A: Function.prototype.bind()
就没有这个属性。
闭包