摘要:可以將其他類型轉(zhuǎn)成字符串函數(shù)可以將任意類型的值轉(zhuǎn)為布爾值。提示空數(shù)組空對象轉(zhuǎn)換為布爾型也是。
在JS中數(shù)據(jù)類型轉(zhuǎn)換有兩種
相關(guān)資料參閱官方ecma-5規(guī)范
阮一峰老師類型轉(zhuǎn)換
規(guī)范對相等==定義
強制類型轉(zhuǎn)換
Number() Number函數(shù)將字符串轉(zhuǎn)為數(shù)值,要比parseInt函數(shù)嚴格很多,只要有一個字符是非數(shù)字(空格、+、-除外),那么就會被轉(zhuǎn)為NaN。
String() 可以將其他類型轉(zhuǎn)成字符串
Boolean() 函數(shù)可以將任意類型的值轉(zhuǎn)為布爾值。
隱式類型轉(zhuǎn)換
https://www.jianshu.com/p/b07...
https://www.jianshu.com/p/b16...
不同類型的數(shù)據(jù)互相運算
對非布爾值類型的數(shù)據(jù)求布爾值
對非數(shù)值類型的使用一元運算符(即"+"和"-")
重點說明: 操作符"+"是一個比較難搞、比較另類、比較奇葩的東西,"+"有兩種使用含義
有字符串時,表示字符串拼接
無字符串時,表示算術(shù)加法
簡單的來說就是看"+"的兩端是否有任一個是字符串,有為"字符串拼接",否則為"算術(shù)加法"。
隱式類型轉(zhuǎn)換原則都是數(shù)字,直接運算
都是字符串,使用字符對應(yīng)的ASCII值運算
有一個是boolean值,將boolean值轉(zhuǎn)成數(shù)字,true->1或false->0
有一個是數(shù)字,將另一個轉(zhuǎn)成數(shù)字
只有一個是對象,則先將對象轉(zhuǎn)成原始值,在執(zhí)行操作
轉(zhuǎn)換過程中如果有NaN出現(xiàn),則結(jié)果是NaN或false
重點說明: 在null、undefined進行"=="比較時不進行類型轉(zhuǎn)換(但是ECMA規(guī)范中定義null==undefined // true ),其他運算操作時會轉(zhuǎn)換。
在"=="比較時,只有三種情況為true:
1、null==null
2、null==undefined
3、undefined==undefined
除以上三種情況外其他都不相等,返回false
說到NaN,隨便講一下全局函數(shù)isNaN(),我們都知道這個函數(shù)判斷不準確,為什么呢?什么原因造成的呢?其實isNaN()方法只執(zhí)行前,會對變量進行隱式類型轉(zhuǎn)換比如isNaN({}),返回true
首先進行隱式類型轉(zhuǎn)換,將{}=>Number,最終得到NaN,所以isNaN({})得到true
在JS內(nèi)部定義了4個抽象操作(只能供JS內(nèi)部使用,我們用戶無法操作)
ToPrimitive(obj, [PreferredType])
obj:待轉(zhuǎn)換的對象
PreferredType:待轉(zhuǎn)成的目標(biāo)類型(只接受Number、String兩種類型,默認是空),如果obj是Date或symbol,則PreferredType=String,其余的情況下PreferredType=Number
如果PreferredType=Number,引用類型轉(zhuǎn)化為數(shù)字
1、調(diào)用valueOf(),如果返回原始值,則結(jié)束,如果返回非原始值,則執(zhí)行第2步
2、調(diào)用toString(),如果返回原始值,則結(jié)束,如果返回非原始值,則報錯
如果PreferredType=String,引用類型轉(zhuǎn)換為字符串
1、調(diào)用toString(),如果返回原始值,則結(jié)束,如果返回非原始值,則執(zhí)行第2步
2、調(diào)用valueOf(),如果返回原始值,則結(jié)束,如果返回非原始值,則報錯
引用類型轉(zhuǎn)換為布爾類型,始終返回true
ToNumber(arguments)
ToString(arguments)
ToBoolean(arguments)
在執(zhí)行隱式類型轉(zhuǎn)換時,會自動調(diào)用這四個內(nèi)部方法
原始值之間相互轉(zhuǎn)換:ToNumber()、ToString()、ToBoolean()
引用值到原始值轉(zhuǎn)換: ToPrimitive()
在執(zhí)行顯示類型轉(zhuǎn)換時,如Number()、String()、Boolean()時,內(nèi)部還是調(diào)用ToNumber()、ToString()、ToBoolean(),如果待轉(zhuǎn)換的是引用類型,則先執(zhí)行ToPrimitive(),得到原始值,再執(zhí)行ToNumber()、ToString()、ToBoolean()
這里特別說明:把引用值轉(zhuǎn)原始值的過程中JS內(nèi)部在調(diào)用ToPrimitive()方法時,分為兩種情況
1、明確指定目標(biāo)轉(zhuǎn)換類型:按照指定類型去調(diào)用toString()/valueOf()方法
2、沒有指定目標(biāo)轉(zhuǎn)換類型:按照obj是否是Date類型,去調(diào)用toString()/valueOf()方法
不同類型的對象調(diào)用toString()返回值不同:
{} => "[object Object]"
[] => ""
[1,2,3] => "1,2,3"
function(){} => "function(){}"
Date => "Mon Feb 12 2018 15:44:57 GMT+0800 (中國標(biāo)準時間)"
RegExp => "/d/"正則字面量的字符串
不同類型的對象調(diào)用valueOf()返回值不同
Date類型 => 1518421497815 返回自1970年1月1日至現(xiàn)在的時間戳毫秒數(shù)
其他的類型 => 一律返回對象自身
JS數(shù)據(jù)類型之原始值與引用值的轉(zhuǎn)換關(guān)系圖解重點說明: 通過new Number()/new String()/new Boolean()得到的是對象(無論傳入什么參數(shù)),該對象有一個屬性[[PrimitiveValue]]`,此屬性保存著該對象對應(yīng)的原始值。
對于包裝對象而來,轉(zhuǎn)換成原始值時,有點特殊(不同于{}、[]這種類型的對象),
valueOf(): 獲取[[PrimitiveValue]]屬性的值
toString(): 獲取[[PrimitiveValue]]屬性值的字符串形式
JS中數(shù)據(jù)轉(zhuǎn)換圖表原始類型 | 目標(biāo)類型(Number) | 目標(biāo)類型(String) | 目標(biāo)類型(Boolean) | 目標(biāo)類型(Object) |
---|---|---|---|---|
undefined | NaN | "undefined" | false | throw TypeError |
null | 0 | "null" | false | throw TypeError |
true | 1 | "true" | true | new Boolean(true) |
false | 0 | "false" | false | new Boolean(true) |
0 | 0 | "0" | false | new Number(0) |
-0 | -0 | "-0" | false | new Number(-0) |
NaN | NaN | "NaN " | false | new Number(NaN) |
Infinity | Infinity | "Infinity " | true | new Number(Infinity ) |
Infinity | -Infinity | "-Infinity " | true | new Number(-Infinity ) |
"7" | 7 | "7" | true | new String("7") |
"" | 0 | "" | 當(dāng)且僅當(dāng)是空字符串(即長度為0)時,才返回false,其他返回true,也就是" "為true | new String("") |
"7M" | NaN | "7M" | true | new String("7M") |
"M" | NaN | "M" | true | new String("M") |
[] | 0 | "" | true | [] |
["7"] | 7 | "7" | true | [] |
{} | 先ToPrimitive,再執(zhí)行以上規(guī)則 | 先ToPrimitive,再執(zhí)行以上規(guī)則 | true | {} |
function(){} | NaN | true | true | function(){} |
https://www.jianshu.com/p/0af...
提示1:只有空字符串("")、null、undefined、+0、-0 和 NaN 轉(zhuǎn)為布爾型是 false,其他的都是 true。
提示2:空數(shù)組、空對象轉(zhuǎn)換為布爾型也是 true。
提示3:null 和 undefined 轉(zhuǎn)換為數(shù)字是表現(xiàn)不一,分別為0和NaN。
Number()
parseInt()
parseFloat()
parseInt解刨------------------------------------------------------------------------ 描述:是一個內(nèi)置的函數(shù), 作用:可以把一個字符串轉(zhuǎn)成整形,parseInt的返回值只有兩種情況,a、十進制整數(shù) b、NaN 有兩個參數(shù) a、第一個參數(shù)表示待轉(zhuǎn)換的字符串(必須是字符串,如果不是字符串,則會發(fā)生隱式類型轉(zhuǎn)換 然后對轉(zhuǎn)換后的字符串進行截取 ) b、第二個參數(shù)表示待轉(zhuǎn)換的字符串的進制(默認是10進制) 該值的范圍介于[2,36],如果進制不在此范圍內(nèi)的,一律返回NaN 注意:基數(shù)如果不是數(shù)值,則發(fā)生隱式類型轉(zhuǎn)換,如果基數(shù)是NaN,則默認基數(shù)是10 特別注意,這里的默認進制10,是有條件的 條件1,必須沒有明確指定進制數(shù) 條件2,待轉(zhuǎn)換的字符串,不是以0或0x打頭的 在字符串以"0"為開始時舊的瀏覽器默認使用八進制基數(shù)。ECMAScript 5,默認的是十進制的基數(shù)。 如果沒有明確指定進度,對于"0”打頭的字符串在“ES5之前”認為是8進制 對于"0”打頭的字符串在”ES5之后“認為是10進制 如果有明確指定數(shù)的進制,則以指定的進度為準 var n=parseInt("11",2) //表示字符串"11"是2進制的數(shù) var n=parseInt("11",8) //表示字符串"11"是8進制的數(shù) var n=parseInt("11") //表示字符串"11"是10進制的數(shù) //注意了,radix是0、10均表示10進制的數(shù),省略的時候進制可能是8、10、16 var n=parseInt("11",0) //表示字符串"11"是10進制的數(shù) var n=parseInt("11",NaN) //表示字符串"11"是10進制的數(shù) var n=parseInt("11",10) //表示字符串"11"是10進制的數(shù) 使用方法總結(jié): 1、看參數(shù)1是否是字符串,如果不是則先轉(zhuǎn)成字符串(如果是非字符串類型,會發(fā)生隱式類型轉(zhuǎn)換) 2、先確定進制 3、根據(jù)進制截取最終的字符串,如果最終是空字符串,則返回NaN (截取的規(guī)則是這樣的,從字符串的首位(如果是0的8進制數(shù),則從0之后開始截取,有點特殊;如果是0x的16進制數(shù),則從0x之后開始截取,有點特殊) (如果是空格、+會忽略哦,如果是-則會輸出)開始,依次向后截取,直到“非數(shù)字”或者“非指定進制范圍內(nèi)”的字符截止) 4、轉(zhuǎn)成10進制 var num = parseInt(321, 0) //321 var num = parseInt(321, NaN) //321 var num = parseInt(321, 2) //NaN var num = parseInt("210", 3)//210 var num = parseInt("329", 6)//20 var num = parseInt("012", 0)//12 var num = parseInt("0x12")//18 var num = parseInt(parseInt,16)//15 這里為什么是15呢?因為parseInt是一個函數(shù),其實這里的值是"function(){}" var num = parseInt(alert,16)//15 var num = parseInt(console.log,16)//15 var num = parseInt(0.000005)//0,直接使用“字面量”表示 var num = parseInt(0.0000005)//5,這里返回5是因為,小數(shù)位后面長度長多6位時,采用科學(xué)基數(shù)法表示,即”5e-7“ ===================================================================== 對于數(shù)值型而言,小數(shù)位前長度大于21或小數(shù)位后長度大于6時,均使用科學(xué)計數(shù)法表示 ===================================================================== 執(zhí)行過程分析:(第一個參數(shù)命名為參數(shù)1,第二個參數(shù)命名為參數(shù)2) ----------------------------------------------------- 1、查看參數(shù)1是否是字符串,如果不是,則會發(fā)生隱式類型轉(zhuǎn)換 2、確定基數(shù)(進制) a、有明確指定基數(shù),則以指定的基數(shù)為準 b、沒有明確指定基數(shù),則以參數(shù)1進行判斷來確定基數(shù), 首先,參數(shù)1字符串是以“0”打頭,則es5以前的版本中,基數(shù)為8,es5之后的版本中,基數(shù)為10 其次,參數(shù)1字符串是以“0x"打頭,則基數(shù)是16, 最后,其他情況,基數(shù)是10 3、以確定的基數(shù)來對參數(shù)1字符串進行有效性截取(非數(shù)字或基數(shù)范圍外的均視為非法字符) 4、如果截取的字符串是空字符串,“”則返回NaN 如果是非空有效的字符串,則按照進制規(guī)則轉(zhuǎn)換成10進制的數(shù) 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
[0/0] == NaN
Infinity/Infinity == NaN
0/NaN==NaN
NaN/0==NaN
0/Infinity == 0
Infinity/0 == Infinity
表示代碼塊
表示一個JS對象
經(jīng)典特殊數(shù)據(jù)類型轉(zhuǎn)換小結(jié)文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/107454.html
摘要:隨著函數(shù)使用場景的不同,而發(fā)生變化。是當(dāng)前執(zhí)行上下文中的一部分。在中新增了該方法也是強制更改指向。但是和的區(qū)別是更改后不會立即執(zhí)行,它會返回一個新函數(shù)。 this何意?在英文中this是一個人稱代詞,表示這個的,具體指哪個?不確定,只有在具體的語境中才可確定,在編程語言中this也有同樣的類似特性。在js中this是一個關(guān)鍵字,它不能被當(dāng)做變量、屬性,也不可以進行賦值操作。this 隨...
摘要:而這個類型的最終之所以輸出為,是因為進行科學(xué)計數(shù)法之后的精度丟失了,重新轉(zhuǎn)成時就恢復(fù)不了原來的值。此類問題解決方案對于存儲,超過最大表示范圍的純整數(shù),在中可以使用保存,在查詢出來的時候會將其使用類型保存的。 遇到的問題 最近遇到一個PHP大整數(shù)的問題,問題代碼是這樣的 $shopId = 17978812896666957068; var_dump($shopId); 上面的代碼輸出...
摘要:騰訊云在年底決定開發(fā)容器產(chǎn)品隨后組建容器技術(shù)團隊并進行技術(shù)選型通過對不同編排工具的分析對比最終選擇作為容器編排引擎并且迅速在年初推出容器解決方案為用戶提供托管的一站式服務(wù)。但是騰訊云最終選擇了現(xiàn)在看來這個選擇無比正確。Kubernetes 很火,一大批互聯(lián)網(wǎng)公司早已領(lǐng)先一步,搭建起專有的 PaaS平臺,傳統(tǒng)企業(yè)們看到的 Kubernetes的趨勢,亦不甘落后,在試水的道上一路狂奔。雖然,Ku...
摘要:一般流程你可以通過良好的選擇一種構(gòu)造來設(shè)計你自己的文件領(lǐng)域。 隨著云世界的日新月異,想進入云世界的您在面對大量的選擇時該何去何從?下面是一些關(guān)于知名云服務(wù)的使用和測試總結(jié)。當(dāng)然在這之前,我們必須知道云是建立在托管您的應(yīng)用程序上的服務(wù)。 Auto-Scalling — 當(dāng)需求增加時,你可以自動的獲得更多資源(一般情況下是更多的虛擬機)來響應(yīng)請求。這在一般的應(yīng)用程序中很少用到,但能保證你的服...
摘要:與的興起緊密相連。現(xiàn)在情況下,所有發(fā)送到端的請求都會被直接返回成。這樣對于做的部門來說也是十分有利的。這個函數(shù)將會接受服務(wù)端渲染的代碼并掛載事件處理函數(shù)。用于在渲染的過程中追蹤可能的重定向請求比如需要根據(jù)響應(yīng)重定向。 原文地址:https://medium.freecodecamp.o... showImg(https://segmentfault.com/img/remote/14...
閱讀 1858·2021-09-22 15:45
閱讀 1639·2019-08-30 15:55
閱讀 1828·2019-08-29 11:16
閱讀 3302·2019-08-26 11:44
閱讀 702·2019-08-23 17:58
閱讀 2698·2019-08-23 12:25
閱讀 1624·2019-08-22 17:15
閱讀 3597·2019-08-22 16:09