1.加号
当加号运算符时,String和其他类型时,其他类型都会转为 String;除此之外其他情况,都转化为Number类型 , 注: undefined 转化为Number是 为’NaN‘, 任何Number与NaN相加都为NaN。如果String类型的带有数字字符的比如: ‘1a’ ,‘a1’ ,number也会转化为 NaN。
var a="hello"; b="world";
console.log(a+b) //"hellow world"
var a=false; var b=true;
console.log(a+b,a+a,b+b) //1 0 2
var a=null;
console.log(a+a); //0
var a=undefined;
console.log(a+a); //NaN
2.减号
.数字减字符串,字符串转成数字。如果字符串不是纯数字就会转成NaN。字符串减数字也一样。两个字符串相减也先转成数字。
10 - '20' //-10
10 - 'one' //NaN
10 - '100a' //NaN
3.乘,除,大于,小于跟减的转换也是一样。
10*'20' //200
'10'*'20' //200
20/'10' //2
'20'/'10' //2
'20'/'one' //NaN
4.==
1)undefined等于null
2).字符串和数字比较时,字符串转数字
'1' == 1 // true
3).数字和布尔比较时,布尔转数字
true == 1 // true
4).字符串和布尔比较时,两者转数字
'1' == true; // true
5).对象和布尔值比较
对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字
[] == true; //false []转换为字符串'',然后转换为数字0,true转换为数字1,所以为false
- 对象和字符串比较
对象和字符串进行比较时,对象转换为字符串,然后两者进行比较。
[1,2,3] == '1,2,3' // true [1,2,3]转化为'1,2,3',然后和'1,2,3', so结果为true;
7)对象和数字比较
对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行比较。
[1] == 1; // true `对象先转换为字符串再转换为数字,二者再比较 [1] => '1' => 1 所以结果为true
8)注意!!对象和对象比较不能转换,比较的是引用地址
var a=[1,2];
var b=[1,2];
console.log(a==b);//false
总而言之,转换关系即为:
一个有趣的题:
[] == false;
![] == false;
这两个的结果都是true,第一个是,对象 => 字符串 => 数值0 false转换为数字0,这个是true应该没问题,
第二个前边多了个!,则直接转换为布尔值再取反,转换为布尔值时,空字符串(’’),NaN,0,null,undefined这几个外返回的都是true, 所以! []这个[] => true 取反为false,所以[] == false为true。
还有一些比较特殊的:
undefined == null //true undefined和null 比较返回true,二者和其他值比较返回false
Number(null) //0
object在转换为基本类型(原始类型)时,会经历:先调用 toPrimitive,若找不到此方法,则根据传入的hint调用toString 或 valueOf,hint为undefined时默认调valueOf。详情参考