JS变量类型
变量类型:值类型和引用类型
7种基本数据类型(值类型):
Undefined、Null、Boolean、Number、String、Symbol(es6新增,表示独一无二的值) 和BigInt(es10新增)
1种引用数据类型:Object(Object本质上是由一组无序的键值对组成的)。里面包含 function、Array、Date等。
JS的存储值的方式
- 原始数据类型:直接存储在栈(stack)
- 引用数据类型:同时存储在栈(stack)和堆(heap)中 引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。
JS变量类型判断
- typeof:可以判断原始数据(除了null)类型和函数,其他均为object
console.log(typeof null); // object
- instanceof:可以判断引用类型
- constructor(原型继承):constructor 属性返回对创建此对象的数组函数的引用。
JS变量类型转换
- 显式的转换数据类型
- 转换为布尔值(调用Boolean()方法)
- 转换为数字(调用Number()、parseInt()和parseFloat()方法)
- 转换为字符串(调用.toString()或者String()方法)
2.隐式的数据转换
a.递增和递减操作符
前置型和后置型(a++ ,a-- ,++a , --a)。
b. 一元操作符
expression ? true : false;
c.关系比较操作符
eg:5>3; //true(结果为布尔值)
深拷贝
const obj ={
a:100,
user:"zhangsan",
array:[1,2,3],
}
function deepClone(obj = {}) {
if (typeof obj != object || typeof obj == null) {
//obj是null,或者不是对象和数组,就直接返回
return obj
}
//初始化result
let result
if (obj instanceof Array) {
//保证key不是原型的属性
if (obj.hasOwnProerty(key)) {
result[key]=deepClone(obj[key])
}
}
}
deepClone(obj)
何时用==,何时用===
除了==null之外,其他一律用===