我们都知道js的基本类型有undefined,null,boolean,number,string;
当我们在进行基本数据类型的运算和比较时数据类型会根据运算符号和左右两边值的不同作如下转换:
- + 运算符
当我们利用 + 运算符去对字符串和数字进行计算时加法运算符会自动把数字转换成字符串进行运算
1. string+string
"a"+"b"="ab"
"1"+"2"="12"
2. number+number
1+2=3
3. string+number
"a"+1="a1"
"1"+2="12" - - , * , / ,因为这三种运算符的运算方式一样固写在了一起(进行如下验证)
1. string(- , * , /)string
"a"-"b"=NaN; "a"*"b"=NaN; "a"/"b"=NaN;
****当字符串为数字时上述运算符会把它先转换成数字再进行计算
"1"-"2"=-1; "1"*"2"=-1; "1"/"2"=0.5;
2. number(+,- , * , /)number
在number之间计算时所有运算符都会遵循正常的数学算法进行计算
3. string(- , * , /)number
"a"-1=NaN; "a"*1=NaN; "a"/1=NaN;
"1"-2=-1; "1"*2=-1; "1"/2=0.5;
有时会认为把数据类型换下位置会出现不同结果吗会不会在进行计算时候运算符会根据前面的运算类型去改变后面的类型那?
1-"a"=NaN;
****因为在进行上述3种运算符运算时是不会像+运算符一样会对类型进行相应转换后再进行计算。
- >,< 运算符
1. string(>,<)string
"a">"b" false ; "a"<"b" true ;
"a">"1" true;
*** 都是字符串在进行比较时候字符串会根据自己的ascii码进行比较但同时要注意字符串在进行比较的时候是区分大小写的
"a">"A" false; "A">"a" true;
2. number(>,<)number
根据数学运算法则进行比较
3. string(>,<)number
1>"a" false; 1<"a" false;
1>"2" false; 1<"2" true;
****当数字和字符串进行比较的时候都会强制转换成字符串进行比较。
****当Number('a')的时候会被转换成NaN,翻一下资料你就会知道NaN 与任何数进行比较返回的结果都为false; - ==和===
1. string(==,===)string
"a"=="a" true ; "a"==="a" true ;
"1"=="1" true ; "1"==="1" true ;
2. number(==,===)number
1==1 true ; 1===1 true;
3. string(==,===)number
a=="a" true; a==="a" false;
1=="1" true; 1==="1" false;
****在字符串和字符串,数字和数字类型比较不论==和===返回都为true,为什么字符串和数字类型进行比较会出现false?
在进行==比较的时候如果一个是数字另一个是字符串,先将字符串转换成数字,然后在进行比较。
===在js被称作严格相等,在进行两值比较的时候不会进行类型转换当两值类型不同则他们不相等
****在这里要注意:
null==undefind true; null===undefind false;
NaN==NaN false; NaN===NaN false;
NaN在与任何值进行比较的时候都为false;