(八)JS内置类型基础

JS的七种内置类型
  • JS分为七种内置类型;其中内置类型又分为两大类:基本类型对象(Object);
  • 基本类型有六种:null undefined number string boolean Symbol
  • 其中js的number类型也是浮点类型的,没有整型;
  • NaN也属于number类型,并且不等于自身
  • 对象Object是引用类型,其在使用的时候会遇到深拷贝和浅拷贝的问题
变量类型typeof判断
  • typeof 对于基本类型,除了 null 都可以显示正确的类型;null显示的是object
    • JS最初版本使用的是32位的系统;为了考虑性能使用的是低位存储变量信息;000开头代表的是对象,而null全为0,所以错误判断null为object,这个bug一直留存
Object.prototype.toString.call(xx)		//可以用这个来获取正确的变量类型
类型的转换
转Boolean:

除了undefined null false NaN `` 0 -0之外的所有的值都转成true,包括对象

四则运算
  • 只有当加法运算,其中一方是String类型才会把另一方也转化成String类型
  • 其中一方是数字类型那么另外一方转化成数字类型
  • 加法运算会触发三种类型转换:
    • 将值转化成原始值
    • 转化成数字
    • 转化成字符串
1 + '1' // '11';加法中一方为字符串,将number类型转化成字符串
2 * '2' // 4;乘法中一方为数字将另外一方转化成数字
[1, 2] + [2, 1] // '1,22,1'
// [1, 2].toString() -> '1,2'
// [2, 1].toString() -> '2,1'
// '1,2' + '2,1' = '1,22,1'

另外加法中要注意:

'a' + + 'b' // -> "aNaN"
// 因为 + 'b' -> NaN
==基本操作符

undefined == undefined;	//true
null == null;		//true
undefined == null;		//true

0 == -0;		//true
123 == '123';		//true;返回将字符串化成number的结果
NaN == NaN;		//false

false == false;		//true
true == true;		//true
//若一方为Boolean则返回Number(这个boolean值) == 要比较的值的结果;Number(true)为1,Number(false)为0;例如:
[] == false;		//true
//如果一方为String或者Number另外一方为Object,那么返回比较object转化的结果


有意思的一道题[] == ![]的结果为true解析:
// [] 转成 true,然后取反变成 false
[] == false
// 根据第 8 条得出
[] == ToNumber(false)
[] == 0
// 根据第 10 条得出
ToPrimitive([]) == 0
// [].toString() -> ''
'' == 0
// 根据第 6 条得出
0 == 0 // -> true
原文地址:https://www.cnblogs.com/smileyqp/p/12675335.html