js中的隱含型別轉換

2021-09-24 08:04:18 字數 2589 閱讀 7351

記錄下平時的知識點、心得等,如果理解有誤還請提出以便及時修正...

1、toprimitive(obj, type):

js內部存在toprimitive(obj, type)隱含轉換方法,實質意義上是呼叫obj物件的valueof方法及tostring方法將該物件轉換為原始型別,

其中,date型別資料預設type為 string(tostring),其他物件型別為 number(valueof),如果兩種方法均未能得出乙個原始型別資料,則丟擲error;

複製**

2、if中的型別轉換:

1) boolean型別:無需轉換

2) string型別:""為false,其他為true

3) number型別:0為false,其他為true

4) object型別:null為false,其他為true

5) function型別:為true

6) undefined、nan:為false

複製**

3、string()、number()、boolean()方法:

1) string方法:物件期望型別為string,先呼叫tostring方法,若結果不是基本型別再呼叫valueof方法進行判斷;

2) number方法:物件期望型別為number,先呼叫valueof方法,若結果不是基本型別再呼叫tostring方法進行判斷;

3) boolean方法:""、0、null、undefined、nan預設為false,其他為true;

複製**

4、+-*÷時的型別轉換:

1) js內建物件及function等object中,不同object呼叫valueof及tostring方法得到的結果各有不同,如下:

valueof:

undefined ---> nan

null ---> +0

boolean ---> 1/0

string ---> parseint、parsefloat解析

object ---> 呼叫自身valueof、tostring方法

tostring:

undefined ---> "undefined"

null ---> "null"

boolean ---> "true"/"false"

number ---> "(number自身)"

object ---> 呼叫自身tostring、valueof方法

2) 計算時,遵循以下規則:

1. 若存在某一物件為string型別,則將其他物件均轉為string(通過呼叫valueof ---> tostring);

2. 物件均為object型別,則使用toprimitive方法將其轉換為原始型別;

3. 均轉為number型別;

3) 部分知識點:

1. array.valueof、object.valueof ---> 預設情況下返回自身;

2. +、-跟任何物件表示將該物件轉為number型別,object型別仍然是通過toprimitive方法進行;

3. parseint(str, radix)方法:

(1) 接收乙個string(待解析)引數,乙個number(進製2-36,預設10);

(2) 當str型別不為string型別時,則使用toprimitive方法將其轉換為原始型別(tostring ---> valueof);

(3) 若str以"0x"開頭,則忽略radix引數,預設使用16進製制;

(4) 若radix超出範圍,則忽略radix引數,使用預設進製;

複製**

5、==時的型別轉換:

1) 存在number型別,則將其他型別均轉為number型別再進行比較;

2) 存在boolean型別,則將boolean型別轉為number型別再進行比較;

3) null == undefined;

4) 存在基本型別 (string) 及object型別,則將object物件應用toprimitive方法後再進行比較;

5) 特殊情況:"" == [null]、"" == [undefined],這裡null及undefined作為empty值進行處理;

複製**

6、>《時的型別轉換:

1) 存在string型別,則將其他型別均轉為string型別再進行比較;

2) 均轉為number型別再進行比較;

3) >=、<=時,第4及第3種情況均會進行判斷,所以出現了 >=/<= ,{} >=/<= {}

複製**

7、坑點:

1)  + {} = "[object object]"

{} + = 0

其中,.tostring() = "",{}.tostring() = "[object object]",而第二行 {} 瀏覽器會將其預設作為**塊進行執行而非乙個變數;

2) == !

其中,!操作符優先順序高於==,因此先執行!操作,! === false,進而比較 == false;複製**

Js 隱含著的型別轉換

var x newboolean false console.log x if x 物件型別 var x1 newarray var x2 newstring var x3 newnumber 存在乙個物件型別轉bool型別轉換 if x1 x2 x3 由上所知道 所有物件轉換成bool型別都為tr...

JS中的型別轉換

1 隱式型別轉換 如果相等操作的兩個變數不是同一型別,那麼相等運算子會嘗試進行一些型別轉換 比較運算子。運算元可以是任何型別,但是只有數字和字串才能真正執行比較操作。減操作符將兩個運算元都轉換為數字。加操作符,如果乙個運算元是字串,那麼另外乙個運算元也會轉換為字串。一元加會將其運算元轉換為數字。轉換...

js中的型別轉換

運算子 兩個運算元的型別不相同時 物件到數字的轉換 空陣列轉換為數字0 boolean true number 0 number nan number false 0因此 console.log true fasle console.log true true false console.log f...