== 和 != 比較若型別不同,先嘗試轉換型別,再作值比較,最後返回值比較結果 。
而 === 和 !== 只有在相同型別下,才會比較其值。
一."="叫做賦值運算子,用來賦值
二. "==="叫做嚴格運算子。
嚴格運算子的運算規則如下,
(1)不同型別值
如果兩個值的型別不同,直接返回false。
(2)同一類的原始型別值
同一型別的原始型別的值(數值、字串、布林值)比較時,值相同就返回true,值不同就返回false。
(3)同一類的復合型別值
兩個復合型別(物件、陣列、函式)的資料比較時,不是比較它們的值是否相等,而是比較它們是否指向同乙個物件。
(4)undefined和null
undefined 和 null 與自身嚴格相等。
三."=="叫做相等運算子null === null //true
undefined === undefined //true
相等運算子在比較相同型別的資料時,與嚴格相等運算子完全一樣。
在比較不同型別的資料時,相等運算子會先將資料進行型別轉換,然後再用嚴格相等運算子比較。型別轉換規則如下:
(1)原始型別的值
原始型別的值(數值、字串、布林值)的資料會轉換成數值型別再進行比較。字串和布林值都會轉換成數值,所以題主的問題中會有第二個string輸出。
(2)物件與原始型別值比較
物件(這裡指廣義的物件,包括數值和函式)與原始型別的值比較時,物件轉化成原始型別的值,再進行比較。
(3)undefined和null
undefined和null與其他型別的值比較時,結果都為false,它們互相比較時結果為true。
(4)相等運算子的缺點
相等運算子隱藏的型別轉換,會帶來一些違反直覺的結果。
這就是為什麼建議盡量不要使用相等運算子。'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == undefined // false
false == null // false
null == undefined // true
' \t\r\n ' == 0 // true
至於使用相等運算子會不會對後續**造成意外影響,答案是有可能會。
var a = undefined;
if(!a)
var a = undefined;
if(a == null)
也就是說當a為undefined時,輸出的值會有變化,而在程式設計中物件變成undefined實在是太常見了var a = undefined;
if(a === null)
MyBatis中 號與美元符號的區別
可以進行預編譯 型別匹配等操作,會轉化為jdbc的型別。select from tablename where id 假設id的值為12,其中如果資料庫欄位id為字元型,那麼 表示的就是 12 如果id為整型,那麼id就是12,並且mybatis會將上面sql語句轉化為jdbc的select fro...
對映檔案中 號與 符號的區別
1.佔位符 preparesatement 預編譯 拼接字串 satment 拼接 可以將 放在這裡進行拼接。2.和 都是用來設定sql對映檔案中statement引數的佔位符,通過parametertype設定statemenet的引數型別,這裡可以有string字串 基本型別 pojo map型...
MyBatis中 號與美元符號的區別
可以進行預編譯 型別匹配等操作,會轉化為jdbc的型別。select from tablename where id 假設id的值為12,其中如果資料庫欄位id為字元型,那麼 表示的就是 12 如果id為整型,那麼id就是12,並且mybatis會將上面sql語句轉化為jdbc的select fro...