引用类型与原始类型
原始类型(也叫基本数据类型)包括:
Number,String,Boolean,Null,Undefined、BigInt、Symbol;
引用类型(也叫复杂数据类型)包括:
所有的类
补充:
Symbol是ES6新出的一种数据类型,这种数据类型的特点就是没有重复的数据,可以作为object的key。
数据的创建方法Symbol(),因为它的构造函数不够完整,所以不能使用new Symbol()创建数据。由于Symbol()创建数据具有唯一性,所以 Symbol() !== Symbol(), 同时使用Symbol数据作为key不能使用for获取到这个key,需要使用Object.getOwnPropertySymbols(obj)获得这个obj对象中key类型是Symbol的key值。
BigInt也是ES6新出的一种数据类型,这种数据类型的特点就是数据涵盖的范围大,能够解决超出普通数据类型范围报错的问题。
使用方法:
-整数末尾直接+n:647326483767797n
-调用BigInt()构造函数:BigInt("647326483767797")
二者的区别
1.原始类型互相赋值后会在内存中分别存储,改变其中一个不会影响别的;引用类型相互赋值后,产生不同的引用,但引用都指向内存中同一原数据,一个改变另外的也会改变
2.原始类型的比较,比较的是对象的值是否相同;引用类型比较的是引用是否指向同一个对象;
3.函数传参时,原始类型传入的参数改变不会影响原本的变量;而在函数中对引用类型的操作,也会影响原本的变量
类型转换
bool类型的转换
1.数值型只有0和NaN会转成false;
2.null和undefined会转成false;
3.字符型,只有空字符串为false;
4.所有对象都是true,哪怕是{};
关于NaN
NaN意思是Not a Number
NaN属于数值型
NaN == NaN 输出false
逻辑与 逻辑或
a&&b 如果a转换后为true,则该表达式返回b(不做类型转换),如果a转换后为false,则返回a(不做类型转换)
a || b 如果a转换后为false,则该表达式返回b(不做类型转换),如果a转换后为true,则返回a(不做类型转换)