类型
基本类型
基本类型的值都是存放在栈内存中的,变量之间的赋值都是通过拷贝进行的,此后两个变量再参与任何操作的时候都不会相互影响
Number
String
Boolean
Undefined
:声明但未定义的变量Null
:空指针对象Symbol
:独一无二的值,使用Symbol()创建bigInt
:用于当整数值大于Number数据类型支持的范围时
引用类型
引用类型的值都是存放在堆内存中的,变量之间的赋值都是通过复制引用进行的,由此延申出浅复制和深复制概念
类型转换
转换为
boolean
:判断时,除此部分值外,全部转换为true
null
undefined
""
NaN
-0
+0
对象转换为基本类型:顺序触发对象的方法获取返回值作为基本类型
Symbol.toPrimitive
valueOf
toString
四则运算转换规则
- 加法:有字符串类型,其他类型自动转换为字符串类型
- 其他运算法:转换为数值进行计算
==
比较- 通常比较结果跟我们的认知一样,只有几个特殊的结果
NaN == NaN => false
undefined == null => true
- 字符串和数值比较会先把字符串转换为数值类型
- 布尔值和数值比较会先把布尔值转换为数值类型
- 有对象类型的值则将其转换为基础类型
判断类型的方式
typeOf
:只能判断基本类型,不能判断引用类型Object.prototype.toString.call()
instenceOf
Array.isArray()