日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

html中隐式转换成数字,关于 JS 类型隐式转换的完整总结

發(fā)布時(shí)間:2025/3/15 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 html中隐式转换成数字,关于 JS 类型隐式转换的完整总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:原罪

來(lái)源:SegmentFault 思否社區(qū)

不管是在技術(shù)聊天群還是論壇里,總能碰到 x + y 等于多少的問(wèn)題,比如 ,如果你不了解其中的原理,那么就插不上話,只能眼睜睜地等大佬解答了。

Type

說(shuō)到底還是JS類型轉(zhuǎn)換的問(wèn)題,首先我們先溫習(xí)一下JS的7種內(nèi)置類型:

Number

String

Boolean

Null

Undefined

Object

Symbol

是不是感覺(jué)還有Function,畢竟能用typeof獲取到?不,函數(shù)、數(shù)組都是Object的子類型。

類型分為和兩種,除了對(duì)象,其它都是基本類型。

To Primitive

發(fā)音:[ pr m t v]

結(jié)構(gòu):toPrimitive(input, preferedType = number)

在對(duì)象的隱式轉(zhuǎn)換中,對(duì)象需要先轉(zhuǎn)成基本類型,并按照如下順序執(zhí)行。

對(duì)象會(huì)先調(diào)用。

如果沒(méi)有valueOf這個(gè)方法或者valueOf返回的類型不是基本類型,那么對(duì)象會(huì)繼續(xù)調(diào)用方法。

如果沒(méi)有toString這個(gè)方法或者toString返回的類型不是基本類型,那么直接拋出異常。

接著,我們看下各個(gè)對(duì)象的轉(zhuǎn)換實(shí)現(xiàn)

ate的默認(rèn)preferedType=string,即在加法運(yùn)算中先執(zhí)行toString()。在 - | * | / | +x | -x 等運(yùn)算中,先執(zhí)行valueOf()數(shù)組的toString()可以等效為

其中,數(shù)組toString()時(shí),遇到null, undefined都被忽略,遇到symbol直接報(bào)錯(cuò),遇到?jīng)]有toString()的對(duì)象也報(bào)錯(cuò)。

To Number

一些特殊值轉(zhuǎn)為數(shù)字的例子,等下要用到

加減法 +-

加減法運(yùn)算中遵循了一些隱式轉(zhuǎn)換規(guī)則:

遇到對(duì)象先執(zhí)行ToPrimitive轉(zhuǎn)換為基本類型,然后按照基本類型的規(guī)則處理

加法過(guò)程中,遇到字符串,則會(huì)被處理為

上面的對(duì)象最后也都轉(zhuǎn)成了字符串,遵循本條規(guī)則。接著來(lái)幾個(gè)純字符串的例子

減法操作時(shí),一律需要把類型轉(zhuǎn)換為Number,進(jìn)行數(shù)學(xué)運(yùn)算

加法操作時(shí),遇到非字符串的基本類型,都會(huì)轉(zhuǎn)Number

+ x 和 一元運(yùn)算 +x 是等效的(以及- x),都會(huì)強(qiáng)制轉(zhuǎn)換成Number

回到一開始拋出的問(wèn)題,這樣太簡(jiǎn)單了吧?

對(duì)象字面量{}在最前面則不代表對(duì)象

不是對(duì)象是什么?是你的八塊腹肌?別急,看看經(jīng)典的例子

這啥玩意?說(shuō)好的"[object Object]"呢?

好吧,這是其實(shí)代表的是代碼塊,最后就變成了,根據(jù)前面的原則,數(shù)組先被轉(zhuǎn)換成字符串,接著因?yàn)?#43;x的運(yùn)算,字符串被轉(zhuǎn)成數(shù)字。

那 { a: 2 } 總該是對(duì)象了吧?其實(shí)這時(shí)候不是代表對(duì)象屬性,而是被當(dāng)成了標(biāo)簽(label),標(biāo)簽這東西IE6就已經(jīng)有了。所以如果我們寫成 這樣是會(huì)報(bào)錯(cuò)的,逗號(hào)要改成分號(hào)才能通過(guò)編譯。

symbol不能加減

如果在表達(dá)式中有symbol類型,那么就會(huì)直接報(bào)錯(cuò)。比如報(bào)錯(cuò)如下:

寬松相等 ==

相等于全等都需要對(duì)類型進(jìn)行判斷,當(dāng)類型不一致時(shí),寬松相等會(huì)觸發(fā)隱式轉(zhuǎn)換。下面介紹規(guī)則:

對(duì)象與對(duì)象類型一致,不做轉(zhuǎn)換

對(duì)象與基本類型,對(duì)象先執(zhí)行ToPrimitive轉(zhuǎn)換為基本類型

數(shù)字與字符串類型對(duì)比時(shí),字符串總是轉(zhuǎn)換成數(shù)字

布爾值先轉(zhuǎn)換成數(shù)字,再按數(shù)字規(guī)則操作

null、undefined、symbol

null、undefined與任何非自身的值對(duì)比結(jié)果都是false,但是 是一個(gè)特例。

對(duì)比

對(duì)比不像相等,可以嚴(yán)格相等(===)防止類型轉(zhuǎn)換,對(duì)比一定會(huì)存在隱式類型轉(zhuǎn)換。

對(duì)象總是先執(zhí)行ToPrimitive為基本類型

任何一邊出現(xiàn)非字符串的值,則一律轉(zhuǎn)換成數(shù)字做對(duì)比

總結(jié)

以上是生活随笔為你收集整理的html中隐式转换成数字,关于 JS 类型隐式转换的完整总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。