JS高階(一)資料型別與隱式轉換

2021-10-07 23:25:33 字數 4016 閱讀 7673

(1)基本資料型別

string、 number、null、undefined、 boolean、bigint、symbol

注意⚠️:

number型別中nan不是有效數字但是屬於number型別,

typeof

nan//=> 'number'

nan===

nan// => false

object.is(

nan,

nan)

// => true

bigint出現的意思是保證超出最大最小安全值仍然可以準確計算

console.

log(number.

max_safe_integer);

//=>9007199254740991

console.

log(number.

min_safe_integer);

//=>-9007199254740991

9007199254740991n =>bigint型別的

(2)引用資料型別

(1)轉化為number型別的情況

使用isnan進行檢測的時候,會隱式轉換為數字在檢測,轉換過程中,遇到物件會先tostring然後在number轉換

驗證是不是無效數字,無效返回true

例子:

isnan(123) 、 isnan(』』) 、isnan(『2222』) 、 isnan(false)、isnan(true) 、isnan(null) 、 isnan()

結果為 false

結果為true

結果為false

isnan(undefined)、、 isnan(nan) 、

使用parseint、parsefloat轉換

先轉成字串,然後從左到右檢測有效數字,如果沒有檢測到有效數字結果就為 nan

例子

parseint(『112abc』) 結果為 112

parseint(『abc』)、parseint(『abc22222』) 結果為 nan

parsefloat(『2.22』+『aa』) 結果為 2.22

parsefloat(『2e』+『3』) 結果為 2000 科學計數法例外

在==比較的時候,有些值需要轉換為數字再進行比較

一道parseint面試題

let arr =

[10.18,0

,14,35

,23] arr = arr.

map(parseint)

console.

log(arr)

// 解體思路

// 可以轉化為arr.map((el,idx)=>parseint(el,idx))

//返回乙個陣列

// 元素分別求

// parseint(10.18,0) => 10

// parseint(0,1) => nan parseint的進製範圍是2~36, 1 不在該範圍返回nan

// parseint(14,2) => 從左向右檢測進製2,數字範圍0~1,所以4沒有,相當於1的2進製轉化為10進製,1*2^0 = 1, 結果為1

// parseint(35,3) => 因為3進製數字範圍0~2, 3和5都不在這個範圍,返回nan

// parseint(23,4) => 2*4^1+3*4^0 = 11

// 結果為[10,nan,1,nan,11]

(2)轉化為string型別的情況

(3)轉化為boolean

(4)「==」的隱式轉化

parseint(""

);// 輸出nan

parseint

(null);

// 輸出nan

parseint

("12px"

)// 輸出12

parsefloat

("1.6px")+

parseint

("1.2px")+

typeof

parseint

(null

)// 輸出'2.6nan' 1.6 + 1 + typeof nan

number(""

)// 輸出0

number

(null

)// 輸出0

number

("12px"

)// 輸出nan

number(!

!number

(parseint

("0.8"))

)// 輸出0 0.8 => 0 => 0 => false => 0

isnan(""

)// 輸出false "" => 0 =>false

isnan

(null

)// 輸出false null => 0 => false

isnan

("12px"

)// 輸出true

isnan

(number(!

!number

(parseint

("0.8"))

))// 輸出false isnan(0)

typeof

!parseint

(null)+

!isnan

(null

)let a =

typeof

typeof

typeof[12

,23];

// 'string'

// 輸出'booleantrue'

// typeof !(nan) + !(isnan(number(null)))

// typeof true + !(isnan(0)) => 'boolean'+ true => 'booleantrue'

let result =12+

false

+undefined+

+'test'

+null

+true+;

console.

log(result)

;// 12 + false => 12 + 0 => 12

// 12 + undefined => 12 + nan => nan

// nan + => nan + number() => nan + number(.tostring()) => nan + number('') => nan

// nan+'test' => 'nantest'

// 'nantest'+null => 'nantestnull'

// 'nantestnull'+true => 'nantestnulltrue'

// 'nantestnulltrue'+ {} => 'nantestnulltrue'+ {}.tostring() => 'nantestnulltrue[object object]'

let res =

parsefloat

('left:200px'

)//=> nan

if(res===

200)

else

if(res ===

nan)

elseif(

typeof res ===

'number'

)else

習題

js資料型別與隱式型別轉換

執行環境是js中最為重要的乙個概念。執行環境定義了變數或函式有權訪問的其他資料,決定了它們各自的行為。每個執行環境都有乙個與之關聯的變數物件 variable object 環境中定義的所有變數和函式都儲存在這個物件中。雖然我們寫的 無法訪問這個物件,但解析器在處理資料時會在後台使用它。全域性執行環...

資料型別的隱式轉換

下班很無聊 2017 05 26 20 23 一 函式類 isnan 該函式會對引數進行隱式的number 轉換,如果轉換不成功,則會返回true var a 1a alert isnan a true alert 輸出的內容隱式的轉換為string型別 二 運算子類 a.算數運算子 如果運算元不是...

js隱式型別轉換

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