JavaScript隐式数据转换
在JavaScript当中,一共存在七种数据类型:
基本类型:String、Number、Boolean、null、undefined、Symbol(入门先不学)
引用类型:Object
1. +运算符:
- String类型与其他类型之间用+运算符,运算符后的内容全部转换成String类型
//数字相加
var a=1,b=2;
alert(a+b);//3
//字符串相加
var a="abc",b="def";
alert(a+b);//abcdef
//布尔值相加
var a=true,b=false;
console.log(a+a,a+b,b+b);//2,1,0
//null相加
var a=null;
console.log(a+a);//0
//undefined相加
var a;
console.log(a+a);//NaN
//数字字符串相加
var a=1,b="nihao";
console.log(a+b,b+a);//1nihao,nihao1
var a=1,b="true",c="false";
console.log(a+b);//1true,1false
//数字布尔值相加 (注意和上边的区别)
var a=1,b=true,c=false;
console.log(a+b.a+c,b+c);//2,1,1
//数字与null相加
var a=1,b=null;
console.log(a+b,b+a);//1,1
//数字与undefined相加(undefinde可以省略)
var a=1,b;
console.log(a+b);//NaN
//字符串与布尔值
var a="1",b=true,c=false;
console.log(a+b,c+a);//1true,false1
//字符串与null
var a="1",b=null;
console.log(a+b);//1null
//字符串与undefined
var a="1",b;
console.log(a+b);//1undefined
//布尔值与null
var a=true,b=false,c=null;
console.log(a+c,b+c);//1,0
//布尔值与undefined
var a=true,b=false,c;
console.log(a+c,b+c);//NaN,NaN
//null与undefined
var a=null,b;
console.log(a+b);//NaN
2. -,*,/,%运算符
- 其它运算符:使用时全部转换为 Number 类型
//减(-)
var a=1,b="2",c=true,d=null,e;
console.log(a-b,a-c,a-d,a-e);//-1,0,1,NaN
//乘(*)
console.log(a*b,a*c,a*d,a*e);//2,1,0,NaN
//除(/)
console.log(a/b,a/c,a/d,a/e);//0.5,1,Infinity,NaN
//取模
console.log(a%b,a%c,a%d,a%e);//1,0,NaN,NaN
3. 引用类型转换
- 与String类型运算时,优先调用toString,如果String中带有非数字,则为NaN
- 与Number、Boolean、null运算时优先调用valueOf
总结:
- +运算符:String类型与其他类型之间用+运算符,运算符后的内容全部转换成String类型,拼接效果
- 其它运算符:使用时全部转换为 Number 类型
- 除+运算符外,任何类型与undefined都为NaN
- 转换为 Boolean类型为 false的有:null,0,"",undefined,NaN,false
- 所有有字符参与的加法运算,优先字符运算,不管是一个字符还是两个都是字符,那么按照字符加法方式运算,即先将非字符的内容隐式转换为字符型,然后再做首尾相连。如果运算中有字符的参与,优先按照字符的加法运算来操作。如果没有字符运算,参照数学运算,也就是先把所有的布尔值都隐式转换为数值,然后做数值加法运算。