《你不知道的JS(中卷 )》 四 強制型別轉換

2022-05-17 09:34:00 字數 956 閱讀 4790

​ js中強制型別轉換非常常見,常常非常危險。這一章來具體介紹強制型別轉換。

​ 將值從一種型別轉換為另一種型別通常有兩種形式:

型別轉換(type casting),顯式;

強制型別轉換(coercion),隱式;

​ 其實這兩種分類的修辭並不特別準確。因為型別轉換

var b = 1;

var a = string(b); // "1"

實際上更像是「強制的」型別轉換,因此我們更應該用顯式、隱式來區別這兩種方式。

​ 抽象操作和轉換規則定義了標量基本型別值之間的轉換基本規則。

json.stringify(..)也可以將json物件序列化為字串也用到了tostring。

​ 假值會被強制轉換為false,其他的值都會被判斷為true。假值有:

​ 顯式強制型別轉換可以將型別轉換表達更加清楚,許多靜態語言中的型別轉換都是由此種方法實施。

​ 隱式強制型別轉換帶來了隱患,同時也帶來極大地遍歷,可以說是動態語言的缺點也是優點。

// 靜態型別的型別轉換

sometype x = sometype(anothertype(y))

// 動態語言的型別轉換

sometype x = sometype(y)

​ 這裡存在乙個非常常見的誤區:==(寬鬆相等)」檢查值是否相等,===檢查值和型別是否相等。

​ 而正確的解釋是:==允許在相等比較中進行強制型別轉換,而===不允許。

​ 前面對兩個相等的不同解釋同時表明效能的不同:

​ 不同於誤區,==的效能更差,因為並不是它比===少做乙個檢查型別,而是多做了乙個強制型別轉換。

​ ==操作符帶來的強制型別轉換,導致了抽象相等可能導致的危險。

​ <、>等關係操作符也會帶來強制型別轉換的風險。

《你不知道的JS(中卷 )》 五 語法

語法 grammar 與詞法 syntax 不同。後者強調語言的運算子 關鍵字等。而語法定義了此法規則是如何構成可執行的程式 的。語句 statement 與表示式 expression 舉例說明 var a 3 6 a 3 6是乙個賦值表示式,加上var,就表明是乙個宣告同時賦值的語句,即語句由乙...

《你不知道的JS(中卷 )》 二 值

本章介紹js中的幾個內建值型別。類陣列是一些類似陣列的 可以通過數字索引 值,例如set jquery查詢操作會返回dom元素列表。字串也是一種類陣列 數字索引 有length屬性以及indexof 和concat 方法。字串推薦的索引方式是charat 函式。js中只有一種數值型別 number ...

你不知道的js(中)之基本型別

基於你不知道的js中,裡面的內容都是基於es6的引擎環境,所以增加了一種內建型別 一共是 1 null 2 undefined 3 boolean 4 number 5 string 6 object 7 symbol 當你使用typeof 來檢視型別的時候,返回的是型別的字串,其中,對於null的...