運算子你真的了解麼?

2022-09-13 16:45:12 字數 3128 閱讀 5775

開頭先給大家乙個題目思考,答案在結尾揭曉。
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...