the part that is good is not original, and the part that is original is not good.--Samual johnsonjavascript
JS之父曾引用英國詩人的這句話來評價其創造的JavaScript語言。信息量挺大,詳見JS誕生時的歷史。html
衆所周知,JS有七種數據類型: number string null undefined object boolean symbol,其中symbol目前不很經常使用。「數據類型有什麼好講的,直接用不就是了?」,若是你對一我的足夠感興趣,我想你會去想了解他的前半生的。java
因爲Brendan創造JS的時候很大程度上借鑑了Java的數據類型,因此這裏咱們來比較一下二者的數據類型。能夠明顯看出,關於數值的各個類型被brendan統一成number,只要是數值相關的,那在js中就是number類型,無論形式,無論大小(其實管,後文會提到)。char在js中對應了string。爲記念偉大的喬治·布爾先生,brendan沒有對boolean進行任何改動(瞎猜的)。引用類型就有趣了,萬物歸於object。數組
爲何JS能夠一個number解決全部的數值類型,或者說一個變量就能夠承載任意類型的數據。答案在你開始學習JavaScript的那幾段話中,「JavaScript是一種動態類型、弱類型...的語言」。動態類型意味着在聲明一個變量以後,能夠存儲不一樣類型的變量。也就是說在JS中聲明一個變量a,他的初始值是13,var a= 13
, 在這語句以後,你仍然能夠再寫一個這樣的語句a = '13.333'
來改變a的值且不會報錯,甚至能夠寫 a = 'name is sam'
。函數
不扒歷史鑽字眼了,探索和收斂的度須要控制好。下面逐一介紹每一個數據類型。學習
JavaScript內部,全部數字都是以64位浮點數形式存儲,整數也是。編碼
JavaScript可以表示的數值範圍是2^-1023到2^1024,超出的範圍的數沒法表示。指針
溢出可以表示的範圍會返回Infinity(正數)或者0(負數)code
數值能夠有多種表示方法,字面形式和科學計數法。cdn
字面形式:35 0xFF(十六進制) 123e。
除如下狀況外都採用字面形式表示,小數點前數字多於21位或後的零多於5個。
有四種進制來表示字面量:十進制 十六進制 八進制 二進制。
屬於number類型的特殊數值:-0 +0 NaN 正負Infinity。
NaN參與的絕大部分運算都會獲得諸如NaN false 這樣的答案。
數值相關的全局方法 parseInt() parseFloat() isNaN() isFinite()
字符串默認只能寫在一行內,分紅多行將會報錯,若是必須,要在每一行的結尾使用反斜杆,但反斜杆後不能有諸如空格的其餘字符。
鏈接運算符 + 能夠鏈接多個單行字符串,將長字符串拆成多行書寫。
length屬性返回字符串長度。
因爲歷史緣由,JavaScript使用Unicode字符集。
btoa()將任意值1轉爲Base64,atob()將base64編碼轉爲原來的值。
都表示沒有,在真值判斷中都是false,null == undefined
兩者的來由頗有歷史緣由,最開始null用於標識對象爲空,這也是如今tyepof null //object
的緣由,以後又添加了一個undefined類型。[2]
兩者的區別,null是一個表示‘空’的對象,轉爲數值時爲0,undefined 是一個表示此處無定義的原始值,轉爲數值時爲NaN。
除了如下值: undefined null false 0 NaN "" 或者' '其餘值都視爲true。
空數組和空對象都是true。
注意,開頭是小寫的o。
對象是一組鍵值對的集合(key-value),是一種無序的符合數據集合。
對象裏的value能夠是各類類型的數據,對象裏能夠嵌套對象。
key都是字符串,可加可不加引號。
存放於對象中的函數稱爲方法。
對象屬性的讀取和賦值 objec.property || object['property']。
可經過(Object.keys(obj)).length
得到對象key的長度。
使用delete命令刪除對象屬性值 delete obj.p
。
使用in運算符檢查對象中是否有某個屬性 'p' in obj
。
使用for in 循環遍歷對象屬性,會跳過不可遍歷屬性,且遍歷繼承的屬性。
[1] 該方法不能直接做用於Unicode字符串,感謝評論區申君健同窗提醒。
[2] MDN對於typeof null// object
的解釋是:
在 JavaScript 最初的實現中,JavaScript 中的值是由一個表示類型的標籤和實際數據值表示的。對象的類型標籤是 0。因爲null
表明的是空指針(大多數平臺下值爲 0x00),所以,null的類型標籤也成爲了 0,typeof null
就錯誤的返回了"object"
。
具體可參考文章。