JS中有7种数据类型
- undefined:未定义
- null:表示一个空对象指针。注:要比较相等性之前,不能将null和undefined转换成其他任何值,即0==null,0==undefind,这一类返回false,解决方法Number(null),但规定了null==undefind返回true。
- Boolean:true false
- Number:数值范围Infinity和负无穷,浮点数计算误差,NaN(函数isNaN(),接收一个参数任意类型),数值转换(Number(),parseInt(),parstFloat())。
- String:转义字符,字符串特性(一旦创建不可改变),字符串方法。
- object:引用类型。函数也是对象,不过比较特殊。
- symbol
null和undefined区别
这两种都被表示无的值,最初的设计只有null,可以被设计转化为0,,但JavaScript分为原始类型和引用类型,在实际类型匹配时,null常常被转化为0,导致匹配不准,所以又设计了undefined,不能被转化为0 ,而是NaN。最初用法表示null为一个无的对象,undefined表示一个无的原始值。但这样在实际应用中被发现是不行的.现在的用法:null表示原型链顶端,作为函数参数表示参数不是对象。undefined表示为缺少值,像变量被声明但是未被赋值、调用函数未提供应提供的参数、对象属性没有赋值、函数没有返回值。
基本类型与引用类型区别
基本类型与引类型最主要的区别为:基本类型是按值访问的。在复制保存对象时,实际上是操作对象的引用而不是实际对象,即引用类型是按引用访问的,但在操作对象的属性,操作的是实际对象。
a.在复制变量值时,基本类型会复制一个新值在变量对象上,而引用类型复制变量值时,变量所保存的是一个指针,这个对象指向堆内存的对象,所以在改变对象的值时会影响所有指向这个对象的变量
b.基本类型有其包装对象(Boolean,Number,String)
关于类型转换:
显式类型转换就是调用Number(),Boolean(),String()等包装函数进行类型转换,还有parseInt,parseFloat等
隐式类型转换(常见于‘==’ ‘!=’进行的比较):比如x==y
- 如果x不是正常值(报错或NaN),中断执行。
- 如果y不是正常值,中断执行
- 如果type(x)与type(y)相同,严格执行x===y
- 如果x是undefined,y是null,返回true
- 如果x是null,y是undefined,返回true
- 如果type(x)为数值,type(y)为字符串,返回x==ToNumber(y)的结果
- 如果type(y)为字符串,type(x)为数值,返回ToNumber(x)==y的结果
- 如果type(x)为布尔类型,返回ToNumber(x)==y的结果
- 如果type(y)为布尔类型,返回ToNumber(y)==x的结果
- 如果type(x)是字符串或数值或
Symbol
值,type(y)是对象,返回x == ToPrimitive(y)
的结果。 - 如果type(x)是对象,type(y)是字符串或数值或
Symbol
值,返回ToPrimitive(x) == y
的结果。 - 返回false。
注意:两个相同的对象是不可能相等的例如{}=={}//false,因为对象存储在堆中,栈中存的是地址,所以不相同。
关系运算符如>,<两边都是字符串是会根据chartCodeAt()返回Unicode编码值比较,,例如'2'>'10'//true。逻辑运算符(!)会强制转为boolean类型在作比较
-
关系运算符 和 相等运算符 并不是一个类别的.
-
关系运算符,在设计上,总是需要运算元尝试转为一个number . 而相等运算符在设计上,则没有这方面的考虑.
-
最重要的一点, 不要把 拿 a > b , a == b 的结果 想当然的去和 a >= b 建立联系. 正确的符合最初设计思想的关系是 a > b 与 a >= b是一组 . a == b 和其他相等运算符才是一组. 比如 a === b , a != b, a !== b .
https://www.sheyingtg.com/detail/299297.html