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