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