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