==允许在相等比较中进行强制类型转换
===不允许
== 运算符的比较方式
比较x==y
-
若type(x)和type(y)相同
a. 若type(x)为Undefined,返回true
b. 若type(x)为Null, 返回true
c. 若type(x)为Number,则:
- 若x为NaN, 返回false
- 若y为NaN,返回false
- 若x和y数值相等,返回true
- 若x=-0,y=+0,返回true
- 若x=+0,y=-0,返回true
- 其他返回false
d. 若type(x) 为String,则当且仅当x和y为完全相等的字符序列时返回true,否则返回false
e. 若type(x)为 Boolean,则x和y同为true或同为false时返回true,其他返回false
f. 若type(x)为Object时,则引用同一个对象时返回true,否则返回false
-
若x为undefined,y为null,返回true,反之亦成立。
-
若type(x)为Number,type(y)为String,则比较 x==Number(y)
-
若type(x)为String,type(y)为Number,则比较Number(x)==y
-
若type(x)为Boolean,则比较Number(x)==y
-
若type(y)为Boolean,则比较x==Number(y)
-
若type(x)为String,type(y)为Object,则比较x==y.toPrimitive()
-
若type(x)为Number,type(y)为Object,则比较x==y.toPrimitive()
-
若type(x)为Object,type(y)为String,则比较x.toPrimitive()==y
-
若type(x)为Object,type(y)为Number,则比较x则比较x.toPrimitive()==y
-
返回false
toPrimitive,就是对象转成基本类型的方式,遇到隐式转换 会先找valueOf(),valueOf没有则找toString();
String('11') == new String('11');
String('11') === new String('11');
这个题的答案是 true 和 false。因为new String()返回的是一个对象,而==的时候会相等是因为,运行的是 String('11') == new String('11').toString()