值类型和引用类型
值类型
常见的值类型:undefined、string、number、boolean、Symbol
引用类型
- 栈向下生长,堆向上生长。
常见的引用类型:对象、数组、null(特殊引用类型,指针指向空地址)、函数(特殊引用类型,但不用于存储数据,所有没有“拷贝、复制函数”)
手写JS深拷贝
typeof运算符
识别所有的值类型:undefined、string、number、boolean、Symbol
- 识别函数:function
-
深拷贝代码
/**
*
* @param {Object} obj 要拷贝的对象
* @returns
*/
function deepClone (obj = {}) {
if (typeof obj !== 'object' || obj == null) {
// 如果不是对象或者数组,直接返回值
return obj
}
// 初始化返回结果
let result
if (obj instanceof Array) {
result = []
} else {
result = {}
}
// 遍历obj key是键名
for (let key in obj) {
// 保证key不是原型的属性
if (obj.hasOwnProperty(key)) {
// 递归调用 遇到对象或者数组会再深入一层
result[key] = deepClone(obj[key])
}
}
// 返回结果
return result
}
类型转换
字符串拼接
-
==运算符
-
if语句和逻辑运算
truly变量:!!a===true的变量
- falsely变量:!!a===false的变量
if语句和逻辑判断中判断的不是true和false,判断的是truly变量和falsely变量
相关面试题
typeof能判断哪些类型?
- 识别所有的值类型:undefined、string、number、boolean、Symbol
- 识别函数:function
- 判断是否是引用类型(不可再细分):object
- 何时使用 === 何时使用 ==
- 除了 ==null 以外,其他都一律使用 ===
- 值类型和引用类型的区别
- 手写深拷贝
- 注意判断值类型和引用类型
- 注意判断是数组还是对象
- 递归调用