最近又開始從新閱讀《javascript高級程序設計》了,記憶中這是第三次了,可是前面都是蜻蜓點水式的過了,此次仍是須要好好整理和實踐一番了。javascript
雖然是一些基礎概念,可是仍是有好多容易注意的地方,不知道它的玄機還有這麼多,特在此記錄一下,防止本身忘記,同時也能增長本身的理解java
(1)javascript中共有5種簡單的數據類型:Undefined,Null,Boolean,Number,String,一種複雜的數據類型Object函數
(2)typeof操做符spa
在javascript中,typeof和instanceof是兩個很值得講的點,要記住typeof不是函數而僅僅是簡單的操做符,其中有兩點須要注意:設計
1:typeof(null)返回的是Object,由於null被認爲是一個空的對象引用 對象
2:typeof(function)會返回functionip
(3)對於null和undefined值,它們有不少共同點:內存
1:在對它們進行相等操做符的時候:alert(null == undefined)時返回的是true,字符串
2:Null和Undefined數據類型都只有一個值,分別就是null和undefinedit
3:undefined和null在對它們進行Boolean()強制類型轉換的時候,返回的都是false
4:null和undefined都沒有toString()函數。
(4)在進行Boolean()強制類型轉換的時候,false,"",0,NaN,null,undefined都會轉換爲false,其餘的都會轉換爲true
(5)Number類型
1:因爲保存浮點數值須要的內存空間是整數數值的兩倍,因此js會自動將浮點數轉化爲整數類型(若是能夠的話)
2:js在進行浮點運算的時候會出現精度太低的bug,致使0.1+0.2以後獲得的不是0.3,因此在進行浮點運算的時候要格外當心
3:一旦某一次運算出現了+Infinity或者-Infinity,那麼該值將沒法繼續擦參與下一次的計算,由於Infinity是不能參與運算的
4:對於NaN來講,任何設計NaN的操做都會返回NaN,NaN和任何值都不相等,包括自身,因此在執行下面的操做的時候,返回的將是false:
Alert(NaN==NaN);
5:Number()能夠將任何數據類型轉爲數值類型,而parseInt和parseFloat只能將字符串轉化爲數值類型
對於Number來講,
Number(null);返回0 Number(「」)返回0
Number(undefined)返回 NaN
對於parseInt來講,
parseInt(「」); 返回NaN
parseInt能夠轉化8進制和16進制的值,可是在ECMAScript5中,parseInt沒有轉化8進制的能力了
對於parseFloat來講,它只能解析十進制的數值,因此他沒有用第二參數指定基數的用法
(6)邏輯與和邏輯或操做
與:1:當第一個操做數是對象,則返回第二個操做數
2:當兩個操做數都是對象的時候,則返回第二個操做數
3:若是有一個NaN操做數,則返回null,
4:若是有一個操做數是undefined,則返回的是undefined
則執行下面的操做的時候,返回的是2
Alert(1.&&2);
或:1:當第一個操做數是對象的時候,返回的是第一個操做數
2:當兩個操做數都是對象的時候,返回的是第一個操做數
3:若是有一個NaN操做數,則返回null,
4:若是有一個操做數是undefined,則返回的是undefined
則執行下面的操做的時候,返回的是1
Alert(1||2);
(7)加減乘除運算符
乘:1:Infinity和0相乘的時候,結果爲NaN
2:Infinity和非0數值相乘,返回的是Infinity
除: 1:若是是零被零除,結果是NaN
2:Infinity被Infinity除,結果是NaN
加: 1:Infinity和-Infinity相加,結果爲NaN
2:+0和-0相加,結果爲+0
減 1:-Infinity和Infinity相減,結果爲NaN
(8)在一個函數中,位於return語句以後的任何代碼都永遠不會執行
(9)Js中沒有函數的重載,即便兩個函數定義爲相同,後面的那一個永遠會覆蓋前面的那一個