https://www.cnblogs.com/nanchen/p/7905528.html
比较运算
- 严格比较(===),只有类型相等,值也一致时才会为true,否则为false,
- 宽松相等(==),先将运算数转化为相同类型,再做比较,具体过程见 Abstract Equality Comparison Algorithm。
这个算法大致说了这么几个情况,x == y
- xy都为Null或undefined,return true;
- x或y为NaN, return false;
- 如果x和y为String,Number,Boolean并且类型不一致,都转为Number再进行比较
- 如果存在Object,转换为原始值,比较
Number('')
0
Number(null)
0
Number(undefined)
NaN
Number({})
NaN
Number([])
0
Number('1')
1
Number('10')
10
Number('0')
0
[].valueOf()
// []
[].toString()
// ""
({}).valueOf()
// {}
({}).toString()
// "[object Object]"
[1,2] == '1,2'
// true
[1,2,3].map(parseInt)
// [1, NaN, NaN]
typeof 1 == true ? 1 : 0; //0 相当于'number' == true ? 1 : 0;
// 注意优先级:等于、不等于、严格等于运算符的优先级 > 条件运算符(条件运算符的优先级很低的)
[] == false; //true
1.存在object, 转化为原始值
ToPrimitive([]); // ''
2.一个string, 另外为boolean,都转为number
Number('');//0
Number(false);//0
3.return 0 == 0;/true
// 昨天遇到的一道奇葩面试题:间隔时间是一个立即执行的函数
for (var i = 0; i < 3; i++) {
setTimeout(() => {
console.log(i);
}, function () {
var b = i * 1000;
console.log(b);
return b;
}(i));
}
0
10000
20000
3 3 3
/****************************************************************/
Boolean()
把其它数据类型的值转换为布尔类型
只有0 NaN 空字符串 null undefined这五个数据值转换为布尔类型时是false,其余的都为true。
Boolean(0)
false
Boolean('')
false
Boolean(null)
false
Boolean(undefined)
false
Boolean(NaN)
false
Boolean(false)
false
Boolean([])
// true
Boolean({})
// true
Boolean('hello')
// true
Boolean(12)
// true
Boolean(-1)
// true