摘要:本章主要關(guān)注中間兩個(gè)的結(jié)果。一類型轉(zhuǎn)換如果方法存在并且返回原始類型,返回的結(jié)果。其他情況,拋出錯(cuò)誤。二類型當(dāng)需要使用時(shí),如等,解釋器會(huì)嘗試將對(duì)象轉(zhuǎn)換成對(duì)象。三轉(zhuǎn)換在進(jìn)行布爾比較的時(shí)候,比如等等,會(huì)進(jìn)行布爾轉(zhuǎn)換。
開始這個(gè)話題之前,我們先看一下下面的幾個(gè)例子:
parseInt(0.0000004) // 4 ![]==[] //true ["x","y"] == "x,y" //true alert({name:"mofei"}) //"[object Object]"
關(guān)于parseInt()的方法可以查看我之前的文章。本章主要關(guān)注中間兩個(gè)的結(jié)果。
一.String類型轉(zhuǎn)換1.如果toString方法存在并且返回“原始類型”,返回toString的結(jié)果。
2.如果toString方法不存在或者返回的不是“原始類型”,調(diào)用valueOf方法,如果valueOf方法存在,并且返回“原始類型”數(shù)據(jù),返回valueOf的結(jié)果。
3.其他情況,拋出錯(cuò)誤。
當(dāng)需要使用Number時(shí),( 如Math.sin() )等,解釋器會(huì)嘗試將對(duì)象轉(zhuǎn)換成Number對(duì)象。
通常有如下的情況會(huì)觸發(fā)Number轉(zhuǎn)換:
1.方法參數(shù)需要Number的時(shí)候,如Math.sin(obj)等
2.對(duì)比的時(shí)候,如 obj == "abc"
3.運(yùn)算的時(shí)候,如 obj + 123
轉(zhuǎn)換規(guī)則如下:
1.如果valueOf存在,且返回“原始類型”數(shù)據(jù),返回valueOf的結(jié)果。
2.如果toString存在,且返回“原始類型”數(shù)據(jù),返回toString的結(jié)果。
3.其他情況報(bào)錯(cuò)。
在進(jìn)行布爾比較的時(shí)候,比如 if(obj) , while(obj)等等,會(huì)進(jìn)行布爾轉(zhuǎn)換。
布爾轉(zhuǎn)換遵循如下規(guī)則:
值 布爾值
true/false true/false
undefined,null false
Number0,NaN 對(duì)應(yīng) false, 其他的對(duì)應(yīng) true
String"" 對(duì)應(yīng)false, 其他對(duì)應(yīng)true("0"對(duì)應(yīng)的是true)
Object true
舉個(gè)比較典型的例子:
[] == ![] //true // 首先第一步右邊的是邏輯判斷![],所以先轉(zhuǎn)成boolean // [] == !true // [] == false // 左邊不是原始類型,嘗試把左邊轉(zhuǎn)成原始類型,變成 // "" == false // 轉(zhuǎn)成Number // 0 == 0
總的來說,使用方法就是為了轉(zhuǎn)換類型:對(duì)象類型->基本類型 然后進(jìn)行基本類型的操作。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80803.html
摘要:實(shí)際上,我們通常認(rèn)為是自有類型的唯一成員。比較運(yùn)算符的操作數(shù)可能是任意類型。結(jié)果只有,例得到操作值等價(jià)的布爾值真值為,假值為等同于,經(jīng)常稱為強(qiáng)制轉(zhuǎn)換。結(jié)果返回布爾值的用法是中唯一一個(gè)不等于任何值的包括它自己。 說起 js 類型轉(zhuǎn)換,都是頭疼吧,暈暈的,但是不行啊,這東西很重要滴! 基礎(chǔ)知識(shí) JavaScript的數(shù)據(jù)類型分為六種,分別為null, undefined, boolean,...
摘要:轉(zhuǎn)換為字符串規(guī)則如下圖代碼大致就是普通其他基本類型轉(zhuǎn)為字符串的話,就直接轉(zhuǎn)為其值的字符串表達(dá)形式,如果是基本類型的封裝對(duì)象,會(huì)先拆封,然后再轉(zhuǎn)為字符串,如果是普通對(duì)象,則會(huì)調(diào)用其內(nèi)部的值,如果是極大數(shù)和級(jí)小數(shù),將會(huì)進(jìn)行一些轉(zhuǎn)化,具體規(guī) 轉(zhuǎn)換為字符串規(guī)則如下圖代碼: console.log(String(undefined)); // undefined console.log(Str...
摘要:通過使用其構(gòu)造函數(shù),可以將一個(gè)值的類型轉(zhuǎn)換為另一種類型。如果使用兩次,可用于將該值轉(zhuǎn)換為相應(yīng)的布爾值。 編譯自:[1] + [2] – [3] === 9!? Looking into assembly code of coercion.全文從兩個(gè)題目來介紹類型轉(zhuǎn)換、寬松相等以及原始值的概念: [1] + [2] – [3] === 9 如果讓 a == true && a == fa...
摘要:將他們放在堆中是為了不影響棧的效率。所以簡(jiǎn)單數(shù)據(jù)類型的值直接存放在棧中。可以對(duì)比上面那張圖默認(rèn)是調(diào)用方法的依,于是等于空字符串??兆址袊?guó)標(biāo)準(zhǔn)時(shí)間方法返回對(duì)象的原始值,可能是字符串?dāng)?shù)值或值等,看具體的對(duì)象。,需要兩個(gè)操作數(shù)同時(shí)轉(zhuǎn)為。 你是否在面試中遇到過各種奇葩和比較細(xì)節(jié)的問題? []==[] //false []==![] //true {}==!{} //false {}==![...
摘要:所以無論還是都會(huì)進(jìn)行類型轉(zhuǎn)換,唯一的區(qū)別,就是會(huì)置否而不會(huì)。這時(shí)候,肯定會(huì)有人問,假如說我有其他的數(shù)據(jù)類型呢,又不是數(shù)字又不是字符串,比如說數(shù)組啊,對(duì)象啊,布爾值啥的,那么如果是引用數(shù)據(jù)類型,則先轉(zhuǎn)為基本數(shù)據(jù)類型,再進(jìn)行比較。 上一章主要講了轉(zhuǎn)換到數(shù)字,字符串和布爾類型的一些知識(shí)點(diǎn),那么這一講接著上面的繼續(xù)講。 思考下面這個(gè)問題: console.log(+123); // 123 ...
閱讀 1453·2021-09-28 09:44
閱讀 2520·2021-09-28 09:36
閱讀 1190·2021-09-08 09:35
閱讀 1993·2019-08-29 13:50
閱讀 822·2019-08-29 13:29
閱讀 1142·2019-08-29 13:15
閱讀 1735·2019-08-29 13:00
閱讀 3003·2019-08-26 16:16