js 隱式型別轉換

2021-10-14 02:06:38 字數 2668 閱讀 4254

概念:無需程式設計師手動轉化,由編譯器自動轉換的方式稱為隱式轉換

規則:

1.轉化成string : + (字串鏈結發)

2.轉換為number型別:

(1) ++/--    (自增自減運算子) 

(2)+ - * / % (算數運算子)

(3)> < >= <= == != === !==  (關係運算子)

3.轉化為boolean型別: !(邏輯非運算子)

例子總結:

1. 字串連線符與算術運算子的區分

1+『true』  ---->  string(1) + 'true'  ----> '1true'

1+true   -----> 1+number(true)  -----> 1+1 ----> 2

1+undefined ----> 1+number(undefined ) ----> 1+nan -----> nan

1+null ---> 1+number(null) ----> 1+0 ----->1

2. 關係運算子:

a: 一邊是字串,會將其資料資料型別轉化為number之後再做比較

『2』 > 10 ----> number('2') > 10 ----> 2> 10 ----->false

b:兩邊都是字串,會根據字串對應的unicode編碼轉化為數字,利用charcodeat轉化對應的編碼

『2』 > '10' -----> '2'.charcodeat() >  '10'.charcodeat()   -----> 50 > 49  -----> true

c: 多個字元按照從左向右的規則比較

『abc' > 'b'  -----> 'a'.charcodeat() >  'b'.charcodeat()  -----> 97 > 98  -----> false

'abc' > 'aad'  ---->  'a'.charcodeat() > 'a'.charcodeat(),相等,繼續比較 ---->  'b'.charcodeat() > 'a'.charcodeat() ----> 98 > 97 ---->true

d: 無規則模式:

(1) undefine和null:既相等又自等

undefined == undefined  ----> true 

undefined == null  ----> true 

null == null  ----> true 

(2) nan與任何資料比較都是nan,包括自身

nan == nan ----> false

3.複雜資料型別的轉換。valueof() ---> string() ----> number()

[1,2] == '1,2' ----> [1,2].valueof() = [1,2] -----> [1,2].tostring() ='1,2' ----->' 1,2' == '1,2'  -----> true

面試題:

var a = 

}if (a ==1 && a == 2 && a==3)

4. 邏輯非隱式轉換與關係運算子隱式轉換搞混淆

注意點:

(1) 空陣列的tostring()方法會得到空字串,空物件的tostring()方法會得到字串[object object]

(2)  關係運算子將其他資料型別通過number()轉化為數字,邏輯非運算子將其他資料型別通過boolean()轉化為布林型別

(3)  0,-0,nan,undefined,null,' ',false,document.all()  -----> 這8個轉化為布林型別為false,其他都為true

(4) 值型別賦值時,拷貝的是資料;引用型別拷貝時,拷貝的是位址

(5) 宣告變數開闢的記憶體空間通常是棧記憶體,而值型別資料儲存在棧中,引用型別資料儲存在堆中,變數中儲存的是堆位址

== 0  ----> .valueof().tostring() = '0' --->  number('0') = 0 -----> true

! == 0 ----> 邏輯非的優先順序高於關係運算子---> boolean() = true ---> ! = false ----> false == 0 ----> true

! == ----> 邏輯非的優先順序高於關係運算子---> !boolean() == .valueof().tostring() -----> false == ' '   ------> number(false ) == number( ' ' ) ---> 0 ==0 ----->true

== ----->false ----> 引用型別資料存在堆中,棧中儲存的是位址,所以比較的結果是false

{} == {} ------> false ---->引用型別資料存在堆中,棧中儲存的是位址,所以比較的結果是false

!{} == {} ----->   !boolean() =={}.valueof().tostring() -----> false == '[object object]'  -----> number(false ) == number( '[object object]') ---> 0 == nan  -----> false

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...