js中隱式型別轉換

2021-09-22 16:40:13 字數 1469 閱讀 4213

決定寫這個東西呢,主要是在開發過程中遇到了乙個問題對於空物件( {} )的判斷 

問題是這樣的

if ({})  else 

// true

if () else

// true

console.log({} ? true : false)

// true

這就奇怪了,為什麼都是對{}判斷卻得出了不一樣的結果呢,於是找了一些資料,把隱式型別轉換整理記錄一下,

一、  true和false在js中是如何轉換的呢?  看下圖

數值型別

轉換成布林值

undefined

false

null

false

boolean

true是true,false是false

number

+0、-0、nan為false,其他為true

string

如果字串為空(長度是0)就是false,其他都是true

object

true

二、  ==操作符背後的型別轉換(主要說明不同型別間的比較)

型別(x)

型別(y)

結果null

undefined

true

undefined

null

true

number

string

x == tonumber(y)

string

number

tonumber(x) == y

boolean

任何型別

tonumber(x) == y

任何型別

boolean

x == tonumber(y)

string|number

object

x == toprimitive(y)

object

string|number

toprimitive(x) == y

tonumber 和 toprimitive 都是內部方法,並根據一下**對其進行估值

1、tonumber

值型別結果

undefined

nannull

+0boolean

如果是true,返回1;如果為false,返回+0

number

數字對應的值

string

將字串解析成數字,如果字串中包含非數字,返回nan,如果由數字字元組成,轉換成數字

object

number(toprivitive(value))

2、toprivitive

值型別結果

object

如果物件的valueof方法的結果是原始值,返回原始值。

如果物件的tostring方法返回原始值,就返回這個值;

其他情況都返回乙個錯誤

js隱式型別轉換

筆試題 var x 1 if function console.log x 1undefined解析 if function f function f 作為表示式,function f消失,所以在if裡面,f為未宣告 任何乙個變數,未經宣告使用都會報錯。但是,typeof其時,不會報錯,而是unde...

JS隱式型別轉換

isnan 判斷引數是否為nan,返回boolean值,隱式呼叫顯示型別轉換中的number 再將呼叫的結果和nan比對,返回true false isnan 123s true 解析 number 123s nan nan nan isnan null false 解析 number null 0...

js隱式型別轉換

乙個沒有提供 symbol.toprimitive 屬性的物件,參與運算時的輸出結果 var obj1 console.log obj1 nan console.log object object console.log obj1 object object 接下面宣告乙個物件,手動賦予了 symb...