今天学习nodejs写了一下之前项目的接口,感觉不知道分享什么就准备了一些常见的前端面试题,希望能对 大家有所帮助,面试题也会不定期更新的.
1. JavaScript 的原始类型有哪些
- Boolean (布尔值)
- null (空)
- undefined (未定义的)
- number (数字类型)
- string (字符串)
- symbol (独一无二的值)
symbol 是Es6引入的一种新的原始数据类型,大家估计比较陌生,可以去查一查文档
2. typeof 和 instanceof 的区别
- typeof 可以用来判断原始数据的基本类型,其中除了 null 其他都可以判断出来, 但是在判断对象的时候只有函数可以正确判断出来,其他返回结构都是 Object
- instanceof 是通过原型链的方式来判断数据类型,所以可以正确判断对象数据类型,缺点是无法准确的判断原始数据类型
3. 闭包 (Closure)
- 函数B可以访问到函数A的变量,那么函数B就是闭包.简单来说: 能够读取其他函数内部变量的函数就是闭包
注意: 闭包是一个函数
4. 浅拷贝和深拷贝
浅拷贝
- 简单数据类型的话没有问题,复杂数据类型的话拷贝的是地址
- Object.assign 方法会拷贝所有属性值到新的对象中,可以用Es6的 ...(展开运算符) 如果属性值是对象的话,拷贝的是地址.
深拷贝
- JSON.parse(JSON.stringify(obj))? 通常使用这个方法可以解决大部分问题,但也有局限性
- 会忽略 undefined
- 会忽略 symbol
- 不能序列化函数
- 不能解决循环引用的对象
function deepClone(obj) {
let dCopy = Array.isArray(obj) ? [] : {};
if (obj && typeof obj === 'object') {
for (k in obj) {
if (obj.hasOwnProperty(k)) {
if (obj[k] && typeof obj[k] === 'object') {
// 判断obj子元素是否为对象,如果是,递归赋值
dCopy[k] = deepClone(obj[k]);
} else {
// 如果不是,简单赋值
dCopy[k] = obj[k];
}
}
}
}
return dCopy;
};
5. 定时器 setTimeout setInterval requestAnimationFrame
- setTimeout 延迟定时器,设置一个时间,一定时间之后执行
- setInterval 间隙性定时器,设置一个时间, 每过一定时间执行
- requestAnimationFrame 帧 页面每一帧调用一次,没有固定时间.速度根据浏览器的性能来决定.比前两个好一些,大致每1000ms/60(16.6ms) 执行
6. new 构造函数时做了什么
- 创建一个新的对象
- 将对象里面的this指向这个新的对象
- 将新对象连接到构造函数的原型
- 返回这个对象
|