diff --git a/js/js类型隐式转换.js b/js/js类型隐式转换.js new file mode 100644 index 0000000..bf76a82 --- /dev/null +++ b/js/js类型隐式转换.js @@ -0,0 +1,47 @@ +// 1.数字与字符串比较时会把字符串转换为数值,如果字符串不能转换为数值就转换成Nan,Nan与任何类型比较都为false +// 2. boolean类型和其他类型比较时,会转换为数值,载按1比较 +// 3. null和undefined只有相互比较,或自身比较才为true +console.log(0 == ''); // 空字符,空白字符都会转换成0, true +console.log(0 == '0'); // '0'可以转换为数值0,true +console.log(2 == true); // true会转换成1,false +console.log(2 == false); // false会转换成0,false +console.log('false' == false); // false转换为0, 'false'转换为Nan,false +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或者自身才等于true,false +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