JS筆試題中的型別轉換

2021-09-24 09:25:18 字數 2238 閱讀 5681

分享一道筆試題:

let x = ,

valueof()

}console.log(x == '20');

console.log(x == 30);

複製**

答案是false true 為什麼?

讓我們回到紅寶書中,對於相等描述符是這樣表述的:

==是相等操作符,如果兩個運算元相等,則返回true,而不相等操作符由嘆號後更等於號(!=)表示,如果兩個運算元不相等,則返回true,這兩個操作符都會先將運算元強制轉換,再進行比較。 一般遵循下面規則:

之後就是字串與數值比較,字串先轉換為數值,然後判斷就可以了。

其實對於這道題,就延伸出了js中乙個令大家都感到頭疼的型別轉換!! 那我們就來看看吧!

原始值到原始值(數字,字串,布林值)的轉換

原始值轉化為布林值,所有的假值("undefined","null",0,-0,nan,"")都會被轉化false,其他都會被轉化為true.

原始值轉換為字串相當於加""

原始值轉化為數字,布林轉文字:true --> 1,false --> 0 字串轉數字,只有字串中都是以數字表示的,就可以直接轉換為字串,如果兩個數字間有空格的話,那麼轉換結果就是nan.

+"123"  //123

+"1 3" // nan

複製**

物件到原始值的轉換

物件轉換為布林值都是true

物件到字串

否則就報錯。

+運算子如何進行型別轉換。

如果作為一元運算子就是轉化為數字,常常用來將字串轉化為數字。

+「2」 //2

複製**

如果作為二元運算子就有兩種轉換方式

讓我們來看看一道經典題目吧!

(! +  +  + !).length

複製**

運算順序應該是這樣的:

首先,!會轉換為"false", +會轉換為0,此時式子變成

!0 +  + false

複製**

!0 轉換為 true,此時式子變成 true + + false

第三步中間的 會轉為空字串,在+ 運算子如何進行型別轉化第二條的第三點,物件會被轉化為原始值,就是空字元,所以經過第三步之後就會變成

"true" + false

複製**

"truefalse"

複製**

"truefalse".length = 9

複製**

可能你看到這裡就有點疑問,為什麼!是false?

邏輯非運算子

簡單的來說,就是首先把資料轉化為布林值,然後取反,結果為true或false。 根據規則: 原始值轉化為布林值,所有的假值("undefined","null",0,-0,nan,"")都會被轉化false,其他都會被轉化為true. 所以! = !true = false

tostring和valueof方法

上面不止一次的提到了tostring和valueof方法,那這到底是怎麼計算的?

總結一波

undefined == null,結果是true。且它倆與所有其他值比較的結果都是false。

string == boolean,需要兩個運算元同時轉為number。

string/boolean == number,需要string/boolean轉為number。

object == primitive,需要object轉為primitive(具體通過valueof和tostring方法)。

寫在最後

//大坑

console.log ( == 0 );//true

console.log ( ! == 0 );//true

//神坑

console.log ( == ! );//true

console.log ( == );//false

//史詩級坑

console.log({} == !{});//false

console.log({} == {});//false

複製**

好好思考一下上面的坑吧!

筆試題中的必勝策略

比如,題目是這樣的 現在有兩堆石子,小今與小條玩遊戲,2個人都足夠聰明,兩個人規定 每次每人只能從其中一堆中取走1個或2個或3個石子,最後將石子全部取完的人勝利.現在兩堆石子的個數為8和9,請問如何安排才能讓小今必勝?答案是 讓小今先取。其實這裡是有規律可循的,可歸結為 取餘制勝 詳解如下 一 取餘...

C語言筆試題中的「坑」

其實這話說的不對,應該說不只是c語言,恐怕是面試題總會有那麼一些坑等著我們踩,今天,就羅列了一些看似簡單,卻很容易中招的面試題 1 以下程式的執行結果為。inlcude define n 2 define m n 1 define num m 1 m 2 main a 5b 6c 8d 9 嘿嘿,當...

catalan數在筆試題中的應用

令h 0 1,h 1 1,catalan數滿足遞推式 1 h n h 0 h n 1 h 1 h n 2 h n 1 h 0 n 2 例如 h 2 h 0 h 1 h 1 h 0 1 1 1 1 2 h 3 h 0 h 2 h 1 h 1 h 2 h 0 1 2 1 1 2 1 5 另類遞推式 2 ...