開頭先給大家乙個題目思考,答案在結尾揭曉。
if (a ==2 && a == 3)[null] == "";
首先為什麼使用」==「運算子,假設我們需要在想要新建乙個object.is的函式,我們首先會怎麼做,是不是判斷一下這個方法是不是存在。
如果用嚴格相等運算子「===」,我們要怎麼寫?
if (typeof object.is !== 'function')if (x !==x )
return x ===y;
}}
如果我們用 「==」,怎麼寫呢?
if (!object.is)
是不是簡潔了許多 ,當我們需要顯示的型別轉化的時候就使用 「==」運算子。下面就是轉化規則,分為四部分可以相互巢狀使用,
首先先說一下特殊情況: +0等於-0; nan不等於自身。
1.如果數字和字串進行 (==) 比較時候,將字串轉化為數字進行比較。
123 == '123'; //true
123 == number('123');
2.一邊是布林型,一邊是其他型別,將布林轉化為數字進行 (==) 比較。'
'42' == true; //false
'42' == boolean(true);
首先將true轉化為數字,之後根據規則(1)
42 == 1;
所以在寫判斷條件的時候,不要輕易使用 (==) true。
var a = 42;if (a == true
)
3.undefined == null
這條規則比較簡單,undefined在 == 運算子下只和null返回true,其他一律為false。
null == false;null == true
;null == '';
null == 0;
undefined == true
;undefined == false
;undefined == '';
undefined == 0;
4.物件與基本型別比較。
首先非物件全部會被轉化為基本型別,之後根據上述規則比較 ;物件轉化為基本型別,首先呼叫valueof,如果轉化結果為物件,繼續呼叫tostring,如果返回的不是基本型別,會報錯。
[42] == 42; //true
'abc' == new string('abc'); //
true
這裡需要注意一點object(null || undefined)會返回乙個空物件,在使用 (==) 時需謹慎。
'abc' == new string(null); //false
根據物件轉化,我們自定義返回的值,比如:
var a =;a.valueof = function
() ;
a.tostring = function
() ;
a == 42; //
true
常見誤區:1.
= !; //true
這裡會返回true的原因很簡單,因為(!) 是強制轉化,將true轉化為false,這裡的 是物件,返回的true,之後使用 ! 返回false.根據上面規則,布林值進行 == 比較時會轉化為數字比較。
也就是
"" == 0
2. 0 == '\n' //true這裡會返回true,因為空格和一些其他製表符會被忽略掉。
再來看一些常見的。
'0' == false; //true
false == 0; //
true
false == ''; //
true
false == ; //
true
'' == ; //
true
0 == ; //
true'' == 0; //true
最後: 如果 (==)一邊出現了true或者false不要使用 (==) 操作符;如果 (==) 一邊帶有 "" ,"", "0",也盡量不要使用操作符。
回到一開始答案,我們可以在物件上定義valueof屬性,然後讓他遞增,
實現a ==2 && a == 3;
var i = 2;var a = new
number();
a.valueof = function
() ;
if (a == 2 && a == 3)
再來看[null] == "",可能你在想[null]返回的不就是字串「null」麼,不過很遺憾,null和undefined,在陣列中轉化為字串為「」,這是j**ascript所規定的。
[null] == ""; "" == "";
你真的了解sizeof 麼?
sizeof並不是c語言和c 語言中的乙個函式,而是乙個關鍵字,乙個操作符。它的作用是返回乙個物件或者型別名的長度,也就是說這個物件或者型別所佔的記憶體位元組數。它的返回值型別為size t usinged int 長度的單位是位元組。1 對基本資料型別運用sizeof操作,得到其占用記憶體的位元組...
你真的了解sizeof 麼?
sizeof並不是c語言和c 語言中的乙個函式,而是乙個關鍵字,乙個操作符。它的作用是返回乙個物件或者型別名的長度,也就是說這個物件或者型別所佔的記憶體位元組數。它的返回值型別為size t usinged int 長度的單位是位元組。1 對基本資料型別運用sizeof操作,得到其占用記憶體的位元組...
你真的了解三元運算子嗎?
三元運算子大家平常肯定不少用,但是,你真的了解三元運算子嗎?表示式 expr1 expr2 expr3 在 expr1 求值為true時的值為 expr2,在 expr1 求值為false時的值為 expr3。比較簡單,和字面意思一樣,expr1 為真時返回 expr2,反之返回 expr3。自 p...