系列文章目录
目录
前言
JS数据类型、手写深拷贝、类型转换
一、JS值类型和引用类型
值类型:string、number、boolean、undefined、Symbol
// 值类型
let a = 100;
let b = a;
a = 200;
console.log(b); // 100
引用类型:Object、Array、null(特殊引用类型,指针指向为空地址)、function(特殊引用类型,但不用于存储数据,所以没有“拷贝、复制函数”)
// 引用类型
let a = { age: 20 }
let b = a
b.age = 21
console.log(a.age) // 21
typeof 能判断值类型和函数类型
二、手写深拷贝
// 递归深拷贝
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)){
// 递归调用!!
resule[key] = deepClone(obj[key])
}
}
// 返回结果
return result
}
- 注意判断值类型和引用类型
- 注意判断是数组还是对象
- 递归
三、类型转换
- 字符串拼接
- ==
- if 语句和逻辑运算
- truly 变量:!!a === true 的变量
- falsely 变量: !!a === false 的变量
// 以下是 falsely 变量。除此之外都是 truely 变量
!!0 === false
!!NaN === false
!!'' === false
!!null === false
!!undefined === false
!!false === false
// 逻辑判断
console.log(10 && 0) // 0
console.log('' || 'abc') // 'abc'
console.log(!window.abc) // true
总结
以上JS数据类型基础知识