//操做符字符串的隱性轉換 //乘法 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()轉換以後再相加。
三、剩下的原則和其餘的差很少,就很少說了。