js中一些隐式转换总结
js中一些隐式转换的总结
js中的不同的数据类型之间的比较转换规则如下
参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness
一、在JavaScript中,相等性判断有三种,分别是:
- 严格相等比较 ===
- 抽象相等比较 ==
- 以及 Object.is
在比较两件事情时,双等号将执行类型转换; 三等号将进行相同的比较,而不进行类型转换。
二、非严格相等符比较规则
首先比较两个值是否相等,然后在比较前将两个被比较的值转换为相同类型。在转换后(等式的一边或两边都可能被转换),最终的比较方式等同于全等操作符 === 的比较方式。 相等操作符满足交换律。
转换规则表:
(1)Truthy(真值)、Falsy(假值)
(2)Falsy值(假值)包括:false、undefined、null、正负0、NaN、”"
(3)ToPrimitive(A)通过尝试调用 A 的A.toString() 和 A.valueOf() 方法,将参数 A 转换为原始值(Primitive)
(1)比较值属性相同
Undefined Undefined true
Null Null true
Number Number A===B
Boolean Boolean A===B
Object Object A===B
(2)Undefined
Undefined Null true
Number false
String false
Boolean false
Object IsFalsy(B)
(3)Null
Null Undefined true
Number false
String false
Boolean false
Object IsFalsy(B)
(4)Number
Number Undefined false
Null false
String A === ToNumber(B)
Boolean A === ToNumber(B)
Object IsFalsy(B)
(5)String
String Undefined false
Null false
Number ToNumber(A) === B
Boolean ToNumber(A) === ToNumber(B)
Object ToPrimitive(B) == A
(6)Boolean
Boolean Undefined false
Null false
Number ToNumber(A) === B
String ToNumber(A) === ToNumber(B)
Object ToNumber(A) == ToPrimitive(B)
(7)Object
Object Undefined false
Null false
Number ToPrimitive(A) == B
String ToPrimitive(A) == B
Boolean ToPrimitive(A) == ToNumber(B)