摘要:中的基本數(shù)據(jù)類型有種,引用數(shù)據(jù)類型則是指除了上述基本數(shù)據(jù)類型以外的所有值,比如隱式類型轉換加法的隱式轉換轉換為原始值當需要轉換為原始值時,引擎內部會進行抽象操作。
基本運算規(guī)則
+的使用有兩種情況
當+連接兩個變量或值時即為二元運算符,比如a + b,當+在變量或值前面時,則為一元運算符,比如+"12.1"
直接轉換為Number類型,相當于Number()
常用的還有!運算符,用來轉為Boolean類型
加法,可以認為只有兩種情況
1、數(shù)字 + 數(shù)字
2、字符串 + 字符串
其他類型的值相加最終都會隱式轉換為上述兩種類型相加。
JS中的基本數(shù)據(jù)類型(primitives)有6種,隱式類型轉換
String、Number、Boolean、undefined、null、Symbol
引用數(shù)據(jù)類型則是指除了上述基本數(shù)據(jù)類型以外的所有值,比如Array、Function
加法的隱式轉換:
1、轉換為原始值當需要轉換為原始值時,JS引擎內部會進行抽象操作ToPrimitive()。
ToPrimitive(input,PreferredType?) // 如果為原始值則直接返回 // 如果為引用數(shù)據(jù)類型則 // 1、先嘗試調用valueOf()方法,如果返回值為原始值,則返回該值 // 2、否則,嘗試調用toString()方法,如果返回值為原始值,則返回該值 // 3、否則,拋出異常 // 注: // 1、如果第二個參數(shù)PreferedType為String,則2和3順序調換,即先調用toString。 // 2、PreferedType默認為Number,但在遇到Date類型的值時為String
具體轉換規(guī)則可以參考ECMA規(guī)范中9.1的ToPrimitive和[[DefaultValue]]部分
2、轉換為數(shù)字規(guī)則為:
類型 | 結果 |
---|---|
undefined | NaN |
null | 0 |
Boolean | true為1,false為0 |
Number | / |
String | 轉數(shù)字,"" -> 0 |
Object | 先ToPrimitive轉為原始值再轉為數(shù)字 |
直接轉換,不做贅述,對象類型時參考數(shù)字的處理
相關面試題[] + {} // 結果為 "[object Object]" [] + [] // 結果為 "" {} + {} // 結果為 NaN {} + [] // 結果為 0,當語句開始為{時,會被JS解釋器認為是代碼塊,所以實質上是 +[] {} + {} // 結果為NaN,原因同上
注:第五道面試題在node.js環(huán)境下的運行結果卻是"[object Object]",node和chrome同樣使用了V8引擎,想來是對此做了特殊處理
參考深入理解Javascript中Object類型的轉換
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102898.html
摘要:對于與的設計在中所設計的純對象類型的與方法,它們的返回如下方法返回值對象本身。與三個強制轉換函數(shù),所對應的就是在標準中的三個內部運算轉換的對照表。 在JS中的運算符共同的情況中,(+)符號是很常見的一種,它有以下的使用情況: 數(shù)字的加法運算,二元運算 字符串的連接運算,二元運算,最高優(yōu)先 正號,一元運算,可延伸為強制轉換其他類型的運算元為數(shù)字類型 當然,如果考慮多個符號一起使用時,...
摘要:上一篇入門筆記整理一元操作符遞增遞增分為前置遞增和后置遞增前置型兩個加號放在前面這個操作其實就是給加,上面的列子等效于前置遞增其實可以分為兩步操作,其加運算高于賦值號運算,如等效于先運行加運算為再運行賦值運算后置型兩個加號放在后面這個操作其 上一篇:js入門筆記整理 一元操作符 遞增 遞增分為前置遞增和后置遞增前置型——兩個加號(++)放在前面 var num = 1; ++n...
摘要:這樣導致結果不一致,等解析語句為,對空對象強制轉為數(shù)字類型,即為,將非空字符串轉換為數(shù)字類型,結果為。綜上,右邊表達式轉換為。 首先從一系列讓JavaScript初學者抓狂的運算說起。 1 + {} {} + 1 [] + {} {} + [] [] + [] {} + {} 能全部答對上面的運算結果,不必浪費時間繼續(xù)閱讀本文了。如果對某一些的結果還不確定,請慢慢往下看。 上面列的所有...
摘要:與此相對,強類型語言的類型之間不一定有隱式轉換。三為什么是弱類型弱類型相對于強類型來說類型檢查更不嚴格,比如說允許變量類型的隱式轉換,允許強制類型轉換等等。在中,加性運算符有大量的特殊行為。 從++[[]][+[]]+[+[]]==10?深入淺出弱類型JS的隱式轉換 本文純屬原創(chuàng)? 如有雷同? 純屬抄襲? 不甚榮幸! 歡迎轉載! 原文收錄在【我的GitHub博客】,覺得本文寫的不算爛的...
摘要:意外四舍五入會損害程序的可靠性和安全性。下面是一些例子構造函數(shù)與其他基本類型一樣,可以使用構造函數(shù)創(chuàng)建。總結是一種新的數(shù)據(jù)類型,用于當整數(shù)值大于數(shù)據(jù)類型支持的范圍時。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質文章請猛戳GitHub博客,一年百來篇優(yōu)質文章等著你! BigInt數(shù)據(jù)類型的目的是比Number數(shù)據(jù)類型支持的范圍更大的整數(shù)值。在對大整數(shù)執(zhí)行數(shù)學運算時,以任意精...
閱讀 2644·2021-11-11 16:55
閱讀 1283·2021-09-22 15:25
閱讀 1802·2019-08-29 16:26
閱讀 972·2019-08-29 13:21
閱讀 2311·2019-08-23 16:19
閱讀 2801·2019-08-23 15:10
閱讀 767·2019-08-23 14:24
閱讀 1855·2019-08-23 13:48