JS中的數據類型
javascript
本篇博客的主題是JS數據類型,我結合了阮一峯JS教程總結出了一些問題,方便本身往後的複習與總結。JavaScript語言中共有七種數據類型,分別是:java
0.1+0.2=?
這不只僅是學習JS要注意的坑,實際上學習任何編程語言都同樣,咱們須要銘記只要涉及到浮點數運算,那麼結果就是一個不靠譜的值。
web
NaN是JS的一個特殊值,全稱爲Not a Number。在咱們進行一些錯誤的運算時例如:1-'a'
就會返回NaN這樣一個結果。typeof
運算符則會返回一個值的數據類型。那麼Not a Number的數據類型是什麼呢?
面試
JavaScript中數字會以64位浮點數形式進行存儲,其中第1位是符號位,0表明正數,1表明負數。這其實會形成一個問題,那就是任何一個數字都會有一個正值和一個負值,固然也包括了0。JS內部中實際上存在着2個0,一個是+0
一個是-0
,好在它們是等價的即:
編程
0*Infinity
,大部分人想到的答案是0,但實際上結果應該是NaN。首先
0*Infinity
是沒法直接進行計算的,由於這兩個數在數學中表明的概念一個是無窮小,一個是無窮大,二者相乘獲得的結果必定是NaN。若是你仍是不理解,能夠這樣想:
0*Infinity -> (1-1)*Infinity
(1-1)*Infinity -> Infinity-Infinity
複製代碼
一個無窮大的數減去一個無窮大的數天然是得不到結果的。0/Infinity
思考方法大致相同:數組
0/Infinity -> 0/Infinity*1
0/Infinity*1 -> 0*(1/Infinity)
0*(1/Infinity) ->0*0
複製代碼
0乘以0的結果天然是0。bash
這道題的考點有二:第一,e或E是數值的一種表示方法:科學記數法。12e2表明的含義是12*10^2即1200。第二:parseInt()方法。parseInt是用於將字符串轉化爲整數的一個方法。當parseInt()內部傳入的並不是是一個字符串時,則JS會將內部的非字符串轉化爲一個字符串再將字符串轉換爲整數。對於parseInt('12e2')
而言,JS先將一個個字符進行轉換,當遇到不能轉爲數字的字符e就沒法進行轉換了,因此結果返回爲12。而parseInt(12e2)
則不一樣,JS首先會將科學記數法表示的12e2解析爲1200,而後將1200轉化爲字符串'1200',結果天然是1200.
編程語言
parseInt(0.0000001)
複製代碼
1e-8
而後再將其轉化爲字符串
'1e-8'
,使用parseInt()方法獲得的結果爲1。
parseFloat()方法爲將一個字符串轉換爲浮點數。其實,不管是parseFloat('')
仍是parseFloat(null)
,亦或是parseInt('')
,parseInt(null)
返回的結果都是NaN。別問,問就是研究過。ide
這道題有必定概率會出如今面試當中。其實,undefined和null幾乎是沒有什麼區別的,甚至使用JS中的相等運算符比對兩者返回的結果都是true.
學習
typeof(null)
返回的結果爲object的緣由,固然這是一個BUG,由於null也是一種數據類型呀...
看過第六題後,這道題就很容易了。Number(undefined)
返回值爲NaN,Number(null)
返回值爲0。因此isNaN(undefined)
返回結果爲true,isNaN(null)
返回結果爲false。
isFinite()方法返回一個布爾值,表示某個值是否爲正常的數值。它是一個和isNaN()對立的方法,後者表示的是是否爲一個非數值。因此isFinite(undefined)
返回的結果爲false,isFinite(null)
返回的結果爲true。可是須要注意的是isFinite(Infinity)
與isFinite(-Infinity)
返回的值爲false, isNaN(Infinity)
與isNaN(-Infinity)
返回的結果也是false。爲何?別問爲何,問就是研究過。
這道題其實根前面的var s = 'hello';
毛關係都沒有。字符串其實能夠被看做爲字符數組,就是這道題想要表達的含義
上一題說過,字符串其實能夠被看作字符數組,可是字符串終究是字符串,咱們沒法改變字符串中的單個字符。
這道題涉及到了JS編碼的問題,JavaScript使用了Unicode字符集,但並不是是UTF-8編碼,而是UCS-2。 爲何呢?由於那時候,UTF-8尚未被髮明出來。因此ES5出現了一個BUG,那就是沒法表示'\uFFFF'以後的字符,即一旦字符長度超過兩個字節,ES5以前包括ES5都會認爲長度超過了一個字符的長度。雖然'\u1D306'僅僅表明一個字符'𝌆',可是仍是'𝌆'.length的結果仍是返回爲兩個字符的長度即2。
Base64 是一種編碼方法,能夠將任意值轉成 0~九、A~Z、a-z、+和/這64個字符組成的可打印字符。使用它的主要目的,不是爲了加密,而是爲了避免出現特殊字符,簡化程序的處理。原生JS提供兩個Base64相關的方法即:
結果是:1。由於變量a,b都指向了同一個對象。
答案是會報錯:Unexpected identifier。由於person的key只有'name',要想獲取key對應的value可使用person['name']
或person.name
其中 person.name
就至關於person['name']
。如示例:
var person = {name:'DobbyKim'}
for(var key in person){
console.log(person.key);
}
複製代碼
上面的代碼運行後也會報相同的錯誤,由於person.key
就至關於person['key']
,而person對象在聲明中是沒有這樣的一個key的。
返回的結果爲: