摘要:本篇文章將回顧學(xué)習(xí)種基本類型和及數(shù)據(jù)類型之間的轉(zhuǎn)化。如果不能,再調(diào)用對象的方法,再測試返回值是否可以被轉(zhuǎn)化為數(shù)值。首先可以用于任何數(shù)據(jù)類型,另外兩個則是專門用于把字符串轉(zhuǎn)換成數(shù)值。
概述
ECMAScript中有5中基本數(shù)據(jù)類型:Undefined,Null,Boolean,Number,String,還有一種復(fù)雜數(shù)據(jù)類型對象(Object),Object本質(zhì)上是由一組無序的名值對組成的,JavaScript同樣還定義了另外兩種特殊對象:
數(shù)組--->表示帶編號的值的有序組合
函數(shù)--->函數(shù)是具有與它相關(guān)聯(lián)的可執(zhí)行代碼的對象,通過調(diào)用函數(shù)來運(yùn)行可執(zhí)行代碼,并返回運(yùn)算結(jié)果
綜上為ES5的全部數(shù)據(jù)類型,ES6新出了一種數(shù)據(jù)類型為Symbol,表示獨(dú)一無二的值。
函數(shù),數(shù)組,對象在后續(xù)文章中會有詳解(寫完后將加上鏈接,提前埋坑)。本篇文章將回顧學(xué)習(xí)5種基本類型和Symbol及數(shù)據(jù)類型之間的轉(zhuǎn)化。
Undefined類型只有一個值,即undefined,在使用var聲明變量但沒有對這個變量初始化時,這個變量的值就是undefined。
注意:我們沒有必要顯式的將一個變量初始化為undefined。因為沒有賦值初始化的變量就是undefined這樣更有利于我們比較賦值還是未賦值的變量。
Null跟Undefined類似,Null類型也只有一個值null。null表示是一個空對象指針。所以當(dāng)type of null的時候返回"object"
與undefined不同的是,當(dāng)我們明確這個變量是將用來保存對象的時候,我們最好將這個變量初始化為null,這樣有利于我們只要檢查當(dāng)前這個對象的值是不是null就可以知道當(dāng)前的變量是否已經(jīng)保存了一個對象的引用。同時也能更好的區(qū)別undefined和null
Boolean 類型Boolean類型只有兩個值:true和false 這個類型在開發(fā)中可以說是用的最多的類型了,大多數(shù)判斷都是用這個類型來完成的。
注意: 所有的其他的類型都可以轉(zhuǎn)化為Boolean類型。關(guān)于轉(zhuǎn)化的情況下面會講到。
Number類型簡而言之就是數(shù)字,分為整數(shù)和浮點(diǎn)數(shù)。最基本的整數(shù)數(shù)字值是十進(jìn)制整數(shù)的也就是我們平時用的數(shù)字,除了十進(jìn)制,還有八進(jìn)制和十六進(jìn)制。
八進(jìn)制0開頭的后面的每位數(shù)都是(0~7)如:
var num = 0666; // 八進(jìn)制的438
但是如果不符合規(guī)則了,那前面的0就會被忽略,后面數(shù)值按照十進(jìn)制解析,如:
var num1 = 0668; // 不符合規(guī)則 解析為668
(嚴(yán)格模式八進(jìn)制是無效的)
十六進(jìn)制的前兩位是0后面跟任何十六進(jìn)制的數(shù)字(0~9及A~F)
在進(jìn)行計算的時候八進(jìn)制和十六進(jìn)制的數(shù)值都會被轉(zhuǎn)化為十進(jìn)制數(shù)值。
浮點(diǎn)數(shù),就是通俗理解的小數(shù)。由于舍入誤差原因所以不要將浮點(diǎn)數(shù)作為判斷依據(jù)。
數(shù)字可以用科學(xué)計數(shù)法e表示,如:
var int = 3e3; // 表示3000,相當(dāng)于3乘以10的3次冪 var float = 3e-3 // 表示0.003 ,相當(dāng)于3乘以10的-3次冪
數(shù)字在javascript中是有范圍的:5e-324~1.7976931348623157e308;一般情況是用不到的知道就行,超過范圍的數(shù)值會自動被轉(zhuǎn)換為Infinity(區(qū)分正負(fù))。如果出現(xiàn)了也可以用isFinite()函數(shù)進(jìn)行識別判斷,在范圍內(nèi)轉(zhuǎn)換為true。
關(guān)于數(shù)值最后還有一個特殊的值: NaN 代表非數(shù)值英文直譯縮寫(Not a Number);用于本來是要返回數(shù)值的操作沒有返回數(shù)值就會返回NaN,NaN有兩個特點(diǎn)需要注意一下:
任何涉及NaN的操作都返回NaN
NaN與任何值都不相等,包括NaN本身。
因為以上兩個比較難受的特點(diǎn)會導(dǎo)致我們沒法判斷一個值是不是NaN,所以JavaScript給我們定義了一個函數(shù):isNaN()這個函數(shù)接受一個參數(shù),如果能轉(zhuǎn)化位數(shù)值返回false,不能則true,以下有幾個書上非常經(jīng)典的例子,請切記(面試可能會用到,哈哈哈哈哈):
isNaN(NaN) // true isNaN(10) // false (10是一個數(shù)值) isNaN("10") // false ("10"可以被轉(zhuǎn)化為數(shù)值10) isNaN("blue") // true (不能被轉(zhuǎn)化為數(shù)值) isNaN(true) // false (可以被轉(zhuǎn)化為1)
手動注意一下這里 isNaN()的參數(shù)也可以是對象,當(dāng)傳入一個對象的時候會先調(diào)用被傳入對象的valueOf()方法,然后確定該方法返回的數(shù)值是否可以被轉(zhuǎn)化為數(shù)值。如果不能,再調(diào)用對象的toString()方法,再測試返回值是否可以被轉(zhuǎn)化為數(shù)值。之所以特別注意這里因為一般JavaScript中的內(nèi)置函數(shù)和操作符都是按照這個流程執(zhí)行的。下面基于isNaN舉個栗子:
var a = {}; isNaN(a); // true //執(zhí)行過程 a.valueOf() // {},不能轉(zhuǎn)化。 //然后執(zhí)行 a.toString() // 返回"[object Object]" 也不能被轉(zhuǎn)化,所以isNaN返回true
說到number類型肯定要提一下3個函數(shù):Number(),parseInt(),parseFloat().功能相似但也不是完全相同,一個一個來說。
首先Number()可以用于任何數(shù)據(jù)類型,另外兩個則是專門用于把字符串轉(zhuǎn)換成數(shù)值。
Number()函數(shù)的轉(zhuǎn)換規(guī)則:
如果是Boolean值,true和false將分別被轉(zhuǎn)換為1和0
如果是數(shù)字值則是簡單的傳入和返回
如果是null,返回0
如果是undefined,返回NaN
如果是字符串,遵循以下規(guī)則:
如果字符串中只包含數(shù)字(包括前面帶正負(fù)號),則轉(zhuǎn)換為十進(jìn)制數(shù)字(0開頭會忽略0),浮點(diǎn)數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)
如果字符串中包含有效的十六進(jìn)制數(shù),則轉(zhuǎn)換為相同大小的十進(jìn)制數(shù)
如果是空字符串,則返回0
如果字符串中包含除了上述之外的字符,則返回NaN
如果是對象,則調(diào)用valueOf()方法,按照上面的規(guī)則調(diào)用轉(zhuǎn)換返回值,如果返回NaN,則繼續(xù)調(diào)用toString()方法,再次按照上面的規(guī)則轉(zhuǎn)換
舉幾個例子:
var num1 = Number("Hello world") // NaN var num2 = Number("") // 0 var num3 = Number("0000000000020") // 20 var num4 = Number(true) // 1
再次手動注意一下 +操作符與Number()函數(shù)相同 ,如下例:
var str = "1212" +str // 1212
parseInt()只轉(zhuǎn)換字符串,規(guī)則大體可以整理為一下幾種:
它會忽略字符串前面的空格,如果第一個非空格字符串不是數(shù)字或者正負(fù)號就會返回NaN
空字符串返回NaN(Number()返回0)
按順序解析每一個字符直至遇到非數(shù)字字符或結(jié)尾
浮點(diǎn)數(shù)會轉(zhuǎn)換為整數(shù)
可以添加第二個參數(shù)作為轉(zhuǎn)換基數(shù)(即多少進(jìn)制),如果不填第二個參數(shù)ES5之后無法解析8進(jìn)制數(shù)會直接忽略前導(dǎo)0
若第二個參數(shù)為16可忽略前導(dǎo)0x
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/106081.html
摘要:變量的分類全局變量可以在任何地方使用的變量局部變量在函數(shù)內(nèi)聲明的變量只在函數(shù)內(nèi)有定義,作用域是局部性的什么時候使用當(dāng)一個數(shù)據(jù)需要被反復(fù)使用時,就要先保存在變量中。 第一篇回顧學(xué)習(xí),變量 什么是變量 變量就是在內(nèi)存中刨一個坑存一個數(shù)據(jù),再給這個坑起個名。為什么要給一個加引號呢,因為JavaScript是松散類型的,即一個變量可以用來保存任何類型的數(shù)據(jù)。變量的分類:全局變量:可以在任何地方...
摘要:前言之前說要重頭開始復(fù)習(xí),之前一直都在忙著找工作面試,現(xiàn)在工作也終于是找到了,雖然不那么盡人意,但總算有個歸屬,一段時間的適應(yīng)也有了自己穩(wěn)定的時間規(guī)劃,為了給懶惰捉急的自己一個前行的動力,這一篇的回顧學(xué)習(xí)目錄篇也就這樣提上了日程。 前言 之前說要重頭開始復(fù)習(xí)js,之前一直都在忙著找工作面試,現(xiàn)在工作也終于是找到了,雖然不那么盡人意,但總算有個歸屬,一段時間的適應(yīng)也有了自己穩(wěn)定的時間規(guī)劃...
摘要:前端開發(fā)在年依然持續(xù)火熱,本文將對熱點(diǎn)事件做一個總結(jié)。版的和協(xié)議在前端領(lǐng)域,一直獨(dú)占鰲頭。年又發(fā)布了一個重大的版本更新。主要是配合使用了服務(wù)工作線程。而且還提供了供前端開發(fā)者接入。快速發(fā)布了和在悄悄地跳過之后,在月號正式發(fā)布。 譯者按: 老技術(shù)日趨成熟,新技術(shù)層出不窮。 原文: A recap of front-end development in 2017 譯者: Fundebu...
摘要:楊冀龍是安全焦點(diǎn)民間白帽黑客組織核心成員,被浪潮之巔評為中國新一代黑客領(lǐng)軍人物之一他在本文中依次分享了對于黑客的定義如何從黑客成為一名安全創(chuàng)業(yè)者技術(shù)創(chuàng)業(yè)踩過的坑給技術(shù)創(chuàng)業(yè)者建議等內(nèi)容。 showImg(https://segmentfault.com/img/remote/1460000012377230?w=1240&h=796); 前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為...
摘要:表示尚未存在的對象是一個有特殊意義的值。可以為變量賦值為,此時變量的值為已知狀態(tài)不是,即。用來初始化變量,清除變量內(nèi)容,釋放內(nèi)存結(jié)果為但含義不同。且它倆與所有其他值比較的結(jié)果都是。,需要兩個操作數(shù)同時轉(zhuǎn)為。 轉(zhuǎn)載請聲明出處 博客原文 隨手翻閱以前的學(xué)習(xí)筆記,順便整理一下放在這里,方便自己復(fù)習(xí),也希望你有也有幫助吧 第一課時 入門基礎(chǔ) 知識點(diǎn): 操作系統(tǒng)就是個應(yīng)用程序 只要是應(yīng)用...