摘要:隱式強(qiáng)制類型轉(zhuǎn)換指的是那些隱藏的強(qiáng)制類型轉(zhuǎn)換,副作用也不是很明顯,事實(shí)上,只要自己覺(jué)得不夠明顯的強(qiáng)制類型轉(zhuǎn)換都可以算作隱式強(qiáng)制類型轉(zhuǎn)換,接下來(lái),此文將會(huì)介紹幾種常見(jiàn)的隱式類型轉(zhuǎn)換。
隱式強(qiáng)制類型轉(zhuǎn)換指的是那些隱藏的強(qiáng)制類型轉(zhuǎn)換,副作用也不是很明顯,事實(shí)上,只要自己覺(jué)得不夠明顯的強(qiáng)制類型轉(zhuǎn)換都可以算作隱式強(qiáng)制類型轉(zhuǎn)換,接下來(lái),此文將會(huì)介紹幾種常見(jiàn)的隱式類型轉(zhuǎn)換。
加法操作符轉(zhuǎn)換規(guī)則:
如果兩個(gè)操作數(shù),一個(gè)操作數(shù)是數(shù)字,另一個(gè)數(shù)是布爾值,那么則將布爾值轉(zhuǎn)換為數(shù)字,然后進(jìn)行加法操作
如果兩個(gè)操作都是字符串,則將第二個(gè)操作數(shù)與第一個(gè)操作數(shù)拼接起來(lái)
如果只有一個(gè)操作數(shù)是字符串,則將另一個(gè)操作數(shù)轉(zhuǎn)換為字符串,然后再將兩個(gè)字符串拼接起來(lái)
如果另一個(gè)操作數(shù)是數(shù)字、或布爾值,則調(diào)用它們的toString()方法取得對(duì)應(yīng)的字符串值
如果另一個(gè)操作數(shù)對(duì)象,對(duì)象valueOf()方法返回基本值,則調(diào)用valueOf()方法取得返回值,然后再做字符串拼接,否則直接調(diào)用toString()方法取得對(duì)應(yīng)的字符串值
舉例:
console.log(1 + true) // 2 console.log("1" + "1") // "11" console.log(1 + "1") // "11" console.log("1" + "true") // "1true" var a = { valueOf: function() { return 2 }, toString: function() { return 1 } } var b = {b: 1} console.log(a + "1") // "21" console.log(b + "1") // "[object Object]1"減法操作符
轉(zhuǎn)換規(guī)則:
如果有一個(gè)操作數(shù)字符串、布爾值、null或者undefined,則先在后臺(tái)調(diào)用Number()函數(shù)將其轉(zhuǎn)換為數(shù)值,如果轉(zhuǎn)換的結(jié)果是NaN,則減法的結(jié)果就是NaN
如果有一個(gè)操作數(shù)是對(duì)象,則調(diào)用的valueOf()方法取得表示該對(duì)象的數(shù)值,如果得到的結(jié)果是NaN,則減法的結(jié)果就是NaN。如果對(duì)象valueOf()方法返回不是基本值,則調(diào)用toString()方法并將得到的字符串轉(zhuǎn)為數(shù)字
舉例:
console.log(5 - "1") // 4 console.log(5 - true) // 4 console.log(5 - null) // 5 console.log(5- undefined) // NaN const c = { valueOf: function() { return "1" } } console.log(5 - c) // 4隱式強(qiáng)制類型轉(zhuǎn)為布爾值
場(chǎng)景:
if()語(yǔ)句中的條件判斷表達(dá)式
for()語(yǔ)句中的條件判斷表達(dá)式
while()和do..while()循環(huán)條件中的判斷表達(dá)式
?:三元運(yùn)算中的判斷表達(dá)式
邏輯元算符||和&&左邊的操作數(shù)
以上的場(chǎng)景中非布爾值會(huì)被隱式的強(qiáng)制轉(zhuǎn)為布爾值,轉(zhuǎn)換規(guī)則遵循上篇文章的ToBoolean轉(zhuǎn)換規(guī)則
舉例:
const d = 11 const e = null let f const g = f ? d : e console.log(g) // null console.log(d && e) // null console.log(d || e) // 11相等
相等操作符分為寬松相等==和嚴(yán)格相等===,這兩個(gè)都用來(lái)判斷值是否相等,區(qū)別在于在判斷兩邊操作數(shù)是否相等時(shí),寬松相等允許進(jìn)行強(qiáng)制類型轉(zhuǎn)換,而嚴(yán)格相等不允許進(jìn)行強(qiáng)制類型轉(zhuǎn)換,因此下面只會(huì)介紹寬松相等在比較時(shí)的強(qiáng)制類型轉(zhuǎn)換
轉(zhuǎn)換規(guī)則:
如果有一個(gè)操作數(shù)是布爾值,則在比較相等性之前先將其轉(zhuǎn)換為數(shù)值,false轉(zhuǎn)為0true轉(zhuǎn)為1
如果一個(gè)操作數(shù)是字符串,另一個(gè)操作數(shù)是數(shù)字,在比較之前先將字符串轉(zhuǎn)換為數(shù)字
如果一個(gè)操作數(shù)是對(duì)象,另一個(gè)操作數(shù)不是,則調(diào)用對(duì)象的valueOf()方法,若不是基本類型值,則調(diào)用toString()方法,用得到的基本類型值按照前面的規(guī)則進(jìn)行比較
null和undefined是相等的
要比較相等性之前,不能將null和undefined轉(zhuǎn)換成其他任何值
如果有一個(gè)操作數(shù)是NaN,則相等操作符返回false,而不相等返回true。即使兩個(gè)操作數(shù)都是NaN,相等操作符也返回false
如果兩個(gè)操作數(shù)都是對(duì)象,則比較它們是不是同一個(gè)對(duì)象。如果兩個(gè)操作數(shù)都指向同一個(gè)對(duì)象,則相等操作符返回true,否則,返回false
舉例:
console.log(null == undefined) // true console.log("NaN" == NaN) // false console.log(5 == NaN) // false console.log(NaN == NaN) // false console.log(NaN != NaN) // true console.log(false == 0) // true console.log(true == 1) // true console.log(true == 2) // false console.log(undefined == 0) // false console.log(null == 0) // false console.log("5" == 5) // true比較操作符
比較操作符包括小于(<)、大于(>)、小于等于(<=)、和大于等于(>=)
轉(zhuǎn)換規(guī)則:
如果兩個(gè)操作數(shù)都是字符串,則比較兩個(gè)字符串的字符編碼值
如果一個(gè)操作數(shù)是數(shù)值,則將另一個(gè)操作數(shù)轉(zhuǎn)換為數(shù)值,然后進(jìn)行數(shù)值比較
如果一個(gè)操作數(shù)是對(duì)象,則調(diào)用這個(gè)對(duì)象的valueOf()方法,若返回值是基本類型,則用得到的結(jié)果進(jìn)行比較,否則調(diào)用toString()方法,用得到的值進(jìn)行比較
如果一個(gè)操作數(shù)是布爾值,則先將其轉(zhuǎn)換為數(shù)字,然后進(jìn)行比較
舉例:
console.log("11" < 3) // false console.log(true < 2) // true const h = { valueOf: function () { return "22" } } console.log(h > 1) // true總結(jié)
這篇文章對(duì)JS中的常見(jiàn)隱式強(qiáng)制類型轉(zhuǎn)換做了一個(gè)小結(jié),希望能對(duì)大家理解有所幫助。如果有錯(cuò)誤或不嚴(yán)謹(jǐn)?shù)牡胤剑瑲g迎批評(píng)指正,如果喜歡,歡迎點(diǎn)贊
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/105375.html
ToString ToString負(fù)責(zé)處理非字符串到字符串的強(qiáng)制類型轉(zhuǎn)換,常用的字符串化方法String()、toString()。基本類型值的字符串化規(guī)則: null轉(zhuǎn)換為null undefined轉(zhuǎn)換為undefined true轉(zhuǎn)化為true 數(shù)字的字符串化遵循通用規(guī)則,極大值或者極小值采用科學(xué)計(jì)數(shù)法表示 普通對(duì)象在字符串化時(shí),實(shí)際執(zhí)行Object.prototype.toString...
摘要:顯示的調(diào)用轉(zhuǎn)換過(guò)程稱為顯式強(qiáng)制類型轉(zhuǎn)換,隱式的情況稱為隱式強(qiáng)制類型轉(zhuǎn)換。隱式強(qiáng)制類型轉(zhuǎn)換讓代碼變得晦澀難懂而又便捷而奇妙。事實(shí)上,允許在比較中進(jìn)行強(qiáng)制類型轉(zhuǎn)換,而不允許。如果有并且返回基本類型值,就使用該值進(jìn)行強(qiáng)制類型轉(zhuǎn)換。 JavaScript是一種非常靈活的現(xiàn)代編程語(yǔ)言,靈活到使用者極其容易被忽視的它那廣闊的世界以及它帶給我們的無(wú)限遐想空間。本文將對(duì)JavaScript最最基礎(chǔ)也最...
摘要:一返回值調(diào)用外部方法獲取的值需要對(duì)類型做判斷,因?yàn)槲覀儗?duì)方法返回的值是有期望值類型,但是卻不能保證這個(gè)接口返回的值一直是同一個(gè)類型。 19年目標(biāo):消滅英語(yǔ)!我新開(kāi)了一個(gè)公眾號(hào)記錄一個(gè)程序員學(xué)英語(yǔ)的歷程 有提升英語(yǔ)訴求的小伙伴可以關(guān)注公眾號(hào):csenglish 程序員學(xué)英語(yǔ),每天花10分鐘交作業(yè),跟我一起學(xué)英語(yǔ)吧 javascript作為一門動(dòng)態(tài)類型語(yǔ)言,具有很高的動(dòng)態(tài)靈活性,當(dāng)定義函數(shù)...
摘要:等同于等同于其他類型和布爾類型之間的比較如果是布爾類型,則返回的結(jié)果。 showImg(https://segmentfault.com/img/bVburFq?w=796&h=398); 前言 JavaScript作為一門弱類型語(yǔ)言,我們?cè)诿刻斓木帉?xiě)代碼過(guò)程中,無(wú)時(shí)無(wú)刻不在應(yīng)用著值類型轉(zhuǎn)換,但是很多時(shí)候我們只是在單純的寫(xiě),并不曾停下腳步去探尋過(guò)值類型轉(zhuǎn)換的內(nèi)部轉(zhuǎn)換規(guī)則,最近通過(guò)閱讀你...
摘要:等同于等同于其他類型和布爾類型之間的比較如果是布爾類型,則返回的結(jié)果。 showImg(https://segmentfault.com/img/bVburFq?w=796&h=398); 前言 JavaScript作為一門弱類型語(yǔ)言,我們?cè)诿刻斓木帉?xiě)代碼過(guò)程中,無(wú)時(shí)無(wú)刻不在應(yīng)用著值類型轉(zhuǎn)換,但是很多時(shí)候我們只是在單純的寫(xiě),并不曾停下腳步去探尋過(guò)值類型轉(zhuǎn)換的內(nèi)部轉(zhuǎn)換規(guī)則,最近通過(guò)閱讀你...
閱讀 834·2019-08-30 14:05
閱讀 1724·2019-08-30 11:08
閱讀 3226·2019-08-29 15:41
閱讀 3602·2019-08-23 18:31
閱讀 1523·2019-08-23 18:29
閱讀 557·2019-08-23 14:51
閱讀 2115·2019-08-23 13:53
閱讀 2135·2019-08-23 13:02