js-review/js/js类型隐式转换.js

48 lines
2.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 1.数字与字符串比较时会把字符串转换为数值如果字符串不能转换为数值就转换成NanNan与任何类型比较都为false
// 2. boolean类型和其他类型比较时会转换为数值载按1比较
// 3. null和undefined只有相互比较或自身比较才为true
console.log(0 == ''); // 空字符空白字符都会转换成0 true
console.log(0 == '0'); // '0'可以转换为数值0true
console.log(2 == true); // true会转换成1false
console.log(2 == false); // false会转换成0false
console.log('false' == false); // false转换为0 'false'转换为Nanfalse
console.log(0 == false); // false转换为0 true
console.log(false == undefined);// 没有与null或自身比较false
console.log(false == null); // 没有与undefine或者自身比较false
console.log(null == undefined); // undefind和null比较为true
// 1.其他类型和字符串相加时都会被认为是字符串拼接 null会转换为'null', undefined会转换为'undefined'
console.log(null + '1' == null + 1); // 'null1'与 1, false
console.log(null + 1 == 1); // null转换为0,true
console.log(null == 0); // 记住前面讲的null只有和undefin或者自身才等于truefalse
console.log(null == undefined); // true
console.log(null + 1 == undefined + 1); // undefined + 1为Nan,Nan和任何变量都不相等包括自身false
console.log(null + null == undefined + undefined);// 与上面同理false
var obj1 = {
a: 1,
b: 2,
valueOf: function(){
return this.a + this.b
},
toString: function(){
return 1
}
}
var obj2 = {
toString: function () {
console.log("没有调用");
return 0
}
}
console.log(obj1 + !!obj2);
// 对象与其他类型做加法运算时会会优先调用valueOf将自己转换为原始类型,如果没有valueof
// 则调用toString,上面的Obj1中有valueof所以为3 + !!obj2!!会将一个变量转换为
// 布尔类型只要时truthy就转换为true不接收任何方法的返回值,所以!!obj2位true 3 + true = 4