变量的类型分为值类型和引用类型
typeof运算符
- 识别所有值类型
- 识别函数
- 判断是否是引用类型
手写深拷贝
/**
* 深拷贝
* @param {Object} obj 要拷贝的对象
*/
function deepClone(obj = {}) {
if (typeof obj !== 'object' || obj == null) {
// obj 是 null ,或者不是对象和数组,直接返回
return obj
}
// 初始化返回结果
let result
if (obj instanceof Array) {
result = []
} else {
result = {}
}
for (let key in obj) {
// 保证 key 不是原型的属性
if (obj.hasOwnProperty(key)) {
// 递归调用!!!
result[key] = deepClone(obj[key])
}
}
// 返回结果
return result
}
类型转换
- 字符串拼接
- ==
- 除了 == null之外,其他都一律用 === ,例如:
const obj = { x: 100 } if (obj.a == null) {} //相当于:if (obj.a === null || obj.a === undefined) {}
- 除了 == null之外,其他都一律用 === ,例如:
- if语句和逻辑运算(判断的是不是truly变量还是falsely变量)
- truly变量: !!a === true 的变量
-
falsely 变量: !!a === false的变量