//操做符字符串的隐性转换 //乘法 console.dir("-------如下乘法---------"); console.dir(5*"5"); console.dir(5*"a"); console.dir(5*NaN); console.dir(5*null); console.dir(5*undefined); console.dir(5*5); console.dir("-------以上乘法---------"); //除法 console.dir("-------如下除法---------"); console.dir(5/"5"); console.dir(5/"a"); console.dir(5/NaN); console.dir(5/null); console.dir(null/5); console.dir(5/undefined); console.dir(5/5); console.dir(5/0); console.dir(0/5); console.dir(0/0); console.dir("-------以上除法---------"); //取余、求模 console.dir("-------如下取余、求模--------"); console.dir(16%"5"); console.dir(5%"a"); console.dir(5%NaN); console.dir(5%null); console.dir(null%5); console.dir(5%undefined); console.dir(5%5); console.dir(5%0); console.dir(0%5); console.dir(0%0); console.dir("-------以上取余、求模---------"); //加法 console.dir("-------如下加法--------"); console.dir(16+"5"); console.dir(5+"a"); console.dir(5+NaN); console.dir(5+null); console.dir(5+undefined); console.dir(5+5); console.dir("两个数的和是"+5+5); console.dir("两个数的和是"+(5+5)); console.dir("-------以上加法--------"); //减法 console.dir("-------如下减法--------"); console.dir(16-"5"); console.dir(5-"a"); console.dir(5-NaN); console.dir(5-null); console.dir(5-undefined); console.dir(5-5); console.dir(5-true); console.dir(5-"true"); console.dir(5-""); console.dir("两个数的差是"+5-5); console.dir("两个数的差是"+(5-5)); console.dir("-------以上减法--------"); //关系操做符 console.dir("-------如下关系操做符--------"); console.dir(16>"5"); console.dir("16">"5"); console.dir(5<"a"); console.dir(5>=NaN); console.dir(5<NaN); console.dir(NaN>=NaN); console.dir(5>=null); console.dir(5>=undefined); console.dir(5>=5); console.dir(5>=true); console.dir(5>="true"); console.dir(5>=""); console.dir("Brick">"alphabet"); console.dir("brick">"alphabet"); console.dir("-------以上关系操做符--------");
上面的题目你若是所有答对,http://www.haorooms.com/post/js_yinxingleixing 这篇文章中的题目也所有理解了,那么你对操做符类型转换基本上是理解了。假如您有错误,那么咱们来详细的解释一下吧!函数
咱们来看下前面的题目:post
console.dir(5*"5"); //25 console.dir(5*"a");//NaN console.dir(5*NaN);//NaN console.dir(5*null);0 console.dir(5*undefined);//NaN console.dir(5*5);//25
下面说一下乘法隐性转换原则:编码
一、若是2个数值都是数字,那么直接进行乘法运算,(相信你们都会的,和小学数学同样,同时要注意数字的符号),若是乘积数值超过了ECMAscript的数值表示范围,则返回Infinity(正无穷)或者-Infinity(负无穷)spa
二、若是一个数是NaN,那么结果就是NaNcode
三、若是Infinity与0相乘,结果是NaN对象
四、假如一个操做符是数字,另一个不是数值,那么先用Number()函数,将其进行转化,将转化出来的值与数字进行相乘。假如转换出来的结果出现NaN,那么结果就是NaN。ip
咱们看下上面的题目吧!字符串
console.dir(5/"5");//1 将字符转化为数字进行相除 console.dir(5/"a");//NaN 将“a”用Number()函数进行转化,出来的值是NaN,结果就是NaN console.dir(5/NaN);//NaN console.dir(5/null);//Infinity null用Number()函数进行转化,结果是0,那么5/0是正无穷 console.dir(null/5);//0 同上0/5是0 console.dir(5/undefined);//NaN undefined 用Number()进行转化,结果是NaN console.dir(5/5);//1 console.dir(5/0);//Infinity console.dir(0/5);//0 console.dir(0/0);//NaN //0除以0结果是NaN
下面说一下除法隐性转换原则:get
和乘法相似,惟一多的一条就是0/0结果是NaN数学
求余在项目中用的最多的是求奇数偶数的时候。咱们常常用一个数值与2进行求余,结果是0那么这个数是偶数,结果是1那么这个数是奇数。
看看上面的题目:
console.dir(16%"5"); //1 将字符串5经过Number()转化为5而后进行求余 console.dir(5%"a");//NaN console.dir(5%NaN);//NaN console.dir(5%null);//NaN 将null 经过Number()转化,结果是0,而后计算5%0 ,结果是NaN console.dir(null%5);//0 同上0%5 取余,结果是0 console.dir(5%undefined);//NaN console.dir(5%5);//0 console.dir(5%0);//NaN console.dir(0%5);//0 console.dir(0%0);//NaN console.dir(Infinity%Infinity);//NaN console.dir(5%Infinity);//5 console.dir(Infinity%5); //NaN
下面说一下取余隐性转换原则:
和乘法同样,我说一下比较特别的地方吧!咱们都知道被除数和除数的概念吧,小学的时候就学过的。
一、被除数是无穷大,除数是有限大的值,那么结果是NaN
二、被除数是有限大的值,除数是0,那么结果是NaN
三、Infinity%Infinity结果是NaN
四、被除数是有限大的值,除数是无穷大的值,结果是被除数。
五、被除数是0,结果是0
看看上面的例子吧!
console.dir(16-"5");//11 console.dir(5-"a");//NaN console.dir(5-NaN);//NaN console.dir(5-null);//5 console.dir(5-undefined);//NaN console.dir(5-5);//0 console.dir(5-true);//4 console.dir(5-"true");//NaN console.dir(5-"");//5 console.dir(5-Infinity);//-Infinity console.dir(Infinity-Infinity);//NaN console.dir("两个数的差是"+5-5);//NaN console.dir("两个数的差是"+(5-5));//两个数的差是0
下面说一下减法隐性转换原则:
和上面同样,相同的就不说了,我说一下减法特有的。
一、Infinity-Infinity结果是NaN
二、-Infinity-Infinity结果是-Infinity
三、一个数字减Infinity结果是-Infinity
四、Infinity-(-Infinity)结果是Infinity
五、若是操做数是对象,则调用对象valueOf方法,若是结果是NaN那么结果就是NaN。若是没有valueOf方法,那么调用toString()方法,并将获得的字符串转换为数值。
咱们一块儿来看看上面的例子,关系运算符统一返回true或者false
console.dir(16>"5"); //true console.dir("16">"5");//false console.dir(5<"a");//false console.dir(5>=NaN);//false console.dir(5<NaN);//false console.dir(NaN>=NaN);//false console.dir(5>=null);//true console.dir(5>=undefined);//false console.dir(5>=5);//true console.dir(5>=true);//true console.dir(5>="true");//false console.dir(5>="");//true console.dir("Brick">"alphabet");//false B的字符串编码值是66 ,而a的字符串编码是97.所以false console.dir("brick">"alphabet");//true 小写字母b比a大,因此是true
下面说一下关系运算符隐性转换原则:
仍是和上面同样,相同的就不说了。
若是比较的两个数都是字符串,那么会比较字符串对应的字符串编码值。
双等号具体请看:http://www.haorooms.com/post/js_yinxingleixing
加法运算隐性转换,我之因此最后说,是由于加法运算隐性转换和以前的不同,以前的全部的运算符号,只要一个是数字,另外一个也默认使用Number()进行数字转换。加法运算不同。加法运算只要其中一个是字符串,那么另一个也会转换为字符串,而后进行字符串的拼接!
看看一开始的例子吧!
console.dir(16+"5"); //156 console.dir(5+"a");//5a console.dir(5+NaN);//NaN console.dir(5+null);//5 console.dir('5'+null);//5null console.dir(5+undefined);//NaN console.dir(null+undefined);//NaN console.dir(5+5);//10 console.dir("两个数的和是"+5+5);//两个数的和是55 console.dir("两个数的和是"+(5+5));//两个数的和是10
下面说一下加法运算符隐性转换原则:
一、有一个是字符串,那么另一个也会转换为字符串进行拼接。假如一个是字符串,另一个是null或者undefined,那么相加,null或者undefined就会调用String()方法,得到字符串“null”或者“undefined”,而后进行拼接。
二、假如一个数字加null或者undefined,那么仍是把null或者undefined进行Number()转换以后再相加。
三、剩下的原则和其余的差很少,就很少说了。