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