如果算術運算的值不是數值,那麼js
後台會先使用number()
轉型函式將其轉換為數值:
var num = 1 + nan;//nan,只要有乙個nanny就為nan
var num = 10 + '10';//1010,'+'為字串連線符,有字串就不是加法
var box = '你的歲數是:'+10+10;//你的歲數是:1010,被轉換成字串
var box = '你的歲數是'+(10+10);//你的歲數是:20,沒有被轉換成字串
var box = 10+10+'是你的歲數';//20是你的歲數,沒有被轉換成字串
第乙個運算元
第二個運算元
結果true
true
true
true
false
false
false
true
false
false
false
false
如果兩邊的運算元有乙個運算元不是布林值的情況下,與運算子就不一定返回布林值,此時,遵循以下規則:
1. 第乙個運算元是物件,則返回第二個運算元
2. 第二個運算元是物件,則第乙個運算元返回true,才返回第二個運算元,否則返回false;
3. 有乙個運算元是null,則返回null;
4. 有乙個運算元是undefined,則返回undefined。
var box = 物件 && (5>4);//true,返回第二個運算元
var box = (5>4)&&物件;//[object object]
var box = (3>4)&&物件;//false
var box = (5>4)&&null;//null
var result = true || false;
與邏輯與操作相似,如果有乙個運算元不是布林值,邏輯或也不一定返回布林值;此時,它遵循下列規則:
□ 如果第乙個運算元是物件,則返回第乙個運算元。
□ 如果第乙個運算元求值為false,則返回第二個運算元。
□ 如果兩個運算元都是物件,則返回第乙個運算元。
□ 如果兩個運算元都是null,返回null
□ 如果兩都為`undefined`,返`undefined`。
□ 如果兩都為`nan`,返`nan`
var box = 物件||(5>3);//[object object]
var box = (5>3)||物件;//true
var box = 物件1 || 物件2;//[object object]
var box = null || null;//null
var box = nan || nan;//nan
var box = undefined || undefined;//undefined
邏輯非運算子可以用於任何值。無論這個值是什麼資料型別,這個運算子都會返回乙個布林值。它會先將這個值轉換成布林值,然後取反,規則如下:
1. 運算元是乙個物件,返回false
2. 運算元是乙個空字串,返回true
3. 運算元是乙個非空字串,返回false
4. 運算元是數值0,返回true
5. 運算元是任意非0數值(包括infinity),false
6. 運算元是null,返回true
7. 運算元是nan,返回true
8. 運算元是undefined,返回true
var box = !{};//false
var box = !'trigkit';//false
var box = !0;//true
var box = !null;//true
var box = !nan;//true
var box = !8;//false
對於雙感嘆號!!
的寫法其實是boolean()
的簡寫法。比如下面是來自underscore.js
的一段原始碼:
// is a given value a dom element?
_.iselement = function(obj) ;
返回的值就是布林值
1.兩個運算元都是數值,則進行數值比較
2.兩個運算元都是字串,則比較兩個字串對應的字元編碼值
3.兩個運算元有乙個是數值,則將另乙個轉換為數值,再進行數值比較
4.兩個運算元有乙個是物件,則先呼叫valueof()方法或tostring()方法,再用結果比較
var num = '3'>22;//false
var num = '3'>'22';//true,進行第乙個數字的比較3>2,所以是true
var num = 'a'>'b';//false,a=97,b=98,ascii表
var num = 'a'>'b';//true,b=66
相等操作符會對操作值進行隱式轉換後進行比較:
1.如果乙個操作值為布林值,則在比較之前先將其轉換為數值,false轉成0,true為1;
2.如果乙個操作值為字串,另乙個操作值為數值,則通過number()函式將字串轉換為數值
3.如果乙個操作值是物件,另乙個不是,則呼叫物件的valueof()方法,得到的結果按照前面的規則進行比較
4.null與undefined是相等的
5.如果乙個操作值為nan,則相等比較返回false
6.如果兩個操作值都是物件,則比較它們是不是指向同乙個物件。如果兩個運算元都指向同乙個物件,則相等操作符返回true,否則,返回false
7.在全等和不全等的判斷上,只有值和型別都相等,才返回true,否則返回false;
看下面的例項:
var num =2==2;//true
var num = '2'==2;//true,'2'會轉成數值2
var num = false ==0;//true,false轉成數值就是0
var num = 'a'=='a';//false,轉換後的編碼不一樣
var num = 2==nan;//false,只要有nan,都是false
var num = {}=={};//false,比較的是他們的位址,每個新建立物件的引用位址都不同
var age = {};
var height = age;
var box = age == height;//true,引用位址一樣,所以相等
詳解JS運算子
如果算術運算的值不是數值,那麼js後台會先使用number 轉型函式將其轉換為數值 var num 1 nan nan,只要有乙個nanny就為nan var num 10 10 1010,為字串連線符,有字串就不是加法 var box 你的歲數是 10 10 你的歲數是 1010,被轉換成字串 v...
JS賦值運算子詳解
賦值運算子左側的運算元必須是變數 物件屬性或陣列元素,也稱為左值。例如,下面的寫法是錯誤的,因為左側的值是乙個固定的值,不允許操作。1 100 返回錯誤賦值運算有以下兩種形式 附加操作的賦值運算子 賦值運算子 說明示例 等效於 加法運算或連線操作並賦值 a b a a b 減法運算並賦值 a b a...
JS逗號運算子(,)詳解
js教程逗號運算子是二元運算子,它能夠先執行運算子左側的運算元,然後再執行右側的運算元,最後返回右側運算元的值。本篇文章由泉州seowww.234yp.com 整理發布,js教程 www.234yp.com article 188242.html 謝謝合作!逗號運算子可以實現連續運算,如多個變數連續...