"=="運算子遵循幾個規則:
如果有乙個運算元是布林值,則在比較前將其轉換為數值 false => 0,true => 1
true == 1 // true
false == 0 // true
複製**
如果有乙個運算元為字串,另乙個運算元為數值,則在比較前將字串轉換為數值(更正下應該是用number轉換)
"1" == 1 => nunber("1") == 1 => 1 == 1
"1" == true => "1" == 1 => number("1") == 1
"1a" == 1 => number("1a") == 1 => nan == 1 // false parseint("1a") => 1
複製**
如果有乙個運算元是物件,另乙個不是,則呼叫物件的valueof()方法,在按前2條規則比較 如果valueof()不返回乙個原始值則呼叫tostring() 注: date型別直接呼叫tostring()
function
test
(){}
test.prototype.valueof = function
()var t = new test();
t == 1 => t.valueof() == 1 => 1 == 1
複製**
所以得注意物件的valueof方法了。。。預設的是繼承的object的valueof方法
還有一些特殊的規則
null == undifined //true
null和undifined比較前不轉換
如果有乙個運算元是nan則恆返回false,即使nan == nan也返回false
如果2個運算元都是物件,則比較是不是同乙個物件,如果指向通乙個物件則返回true。
true == true // true
new boolean(true) == true // true 呼叫boolean.valueof 方法
new boolean(true) == new boolean(true) // false 比較是不是同乙個物件
複製**
"==="就是不轉換比較數值。。 JS運算子 算術運算子 比較運算子 賦值運算子
兩邊的變數都是number型別 則是單純的加法運算 當字串出現時 結果是字串型別 字串之後的內容 不論什麼型別 都會被作為字串進行拼接 例子 var num1 10 var num2 20 num num1 num2 var result num1 num2 num1 false console.l...
NOT運算子與 運算子
6.4.2 not運算子與 運算子 對於簡單的條件查詢,not運算子與 運算子的功能幾乎沒有什麼區別,那麼not運算子的優勢體現在 呢?答案是它可以與其他運算子組合使用,這一點是 運算子所不能實現的。在6.4.1節已經介紹了not運算子與in運算子組合使用的例子,下面給出乙個not運算子與betwe...
js 與或運算子 妙用
js 與或運算子 妙用,可用於精簡 降低程式的可讀性。首先出個題 如圖 假設對成長速度顯示規定如下 成長速度為5顯示1個箭頭 成長速度為10顯示2個箭頭 成長速度為12顯示3個箭頭 成長速度為15顯示4個箭頭 其他都顯示都顯示0各箭頭。用 怎麼實現?差一點的if,else var add level...