JS隱式轉換 與 運算子

2021-10-23 01:13:46 字數 1571 閱讀 2304

js是弱型別語言,運算時若兩邊資料型別不一樣會自動轉換型別,寫**時不小心就就掉坑里了。

看下面面試題:

console.

log(

==);//false

console.

log(![

]==);

//true

console.

log(![

]==![

]);//true

console.

log(![

]==false);

//true

console.

log(

==true);

//false

console.

log(

=="");

//true

console.

log(0==

!);//true

我表示有很多問號???

首先看一下js資料型別:

資料基本型別:number,string,boolean,null,undefined,symbol(es6)。

再有乙個物件值object。

1.console.log(==);

陣列是物件型別,它是有引用位址的,而每個引用位址都是不同的,所以這裡是false。

2.console.log(!==);

在網上科普了很久,我們可以這麼理解,當boolean型別與其他型別比較時,兩邊都轉換為數字進行比較,在這裡,!運算子優先順序是比==優先順序高的,所以先運算!,有非運算子就意味著需要將轉換為boolean,而是物件型別,因此就會轉換為true,再取反,!結果就是false,即0,空陣列轉為數值為0,所以結果為true。

3.console.log(!==!);

上乙個是true,這乙個也是true?是不是感覺特別有趣,,!轉為布林為false,false轉為數值為0,兩邊一樣,所以結果為true。

4.console.log(!==false);

同理,!為false,另一邊也是false,為true。

5.console.log(==true);

物件和布林值進行比較時,最終都轉為數字,物件先轉換為字串,然後再轉換為數字,布林值直接轉換為數字,空陣列轉為字元是空字串,而""==false ==0 三者是相等的,true轉為數值為1,所以結果為false。

6.console.log(=="");

同上,轉為string為"",兩邊相同,結果為true。

7.console.log(0==!);

資料進行boolean轉換時,只有""、0、false、undefined、null、nan六種結果為false,其餘全為true,所以陣列轉布林為true,取反為false、與0相等,結果為true。

並不是所有的隱式轉換都轉換為數字,只要同一型別即可,是按照這麼個順序來的:物件 --> 先轉string --> 再轉number;boolean --> 直接轉為number。

javascript運算子及隱式型別轉換

定義 運算子也叫操作符,通過運算子可以對乙個或多個值進行運算,並獲得運算結果。typeof是運算子之一,可以獲得乙個值的資料型別。加 減 乘 除 取模,即 任何值與字串相加,都會轉換成字串並拼接。除此之外,任何資料型別與number資料型別運算都會先轉換成number型別再運算。例如,100 1 9...

JavaScript運算子中的隱式轉換規律

如果包含的是有效數字字串或者是有效浮點數字串,則會將字串轉換 number 為數值,再進行加減操作,返回值的型別是 number型別。如果不包含有效數字字串,則會將字串的值轉換為nan,返回值的型別是 number型別。如果是boolean型別,則先會把true或者false轉換為1或者0,再進行加...

運算子過載中的隱式轉換問題

譚浩強c 書中運算子過載隱式轉換關於以下兩句話的問題 friend complex operator complex complex friend complex operator const complex const complex 1.隱式轉換不會被用於非const的引用引數 2.二義性問題 ...