你不知道的JavaScript

從名字上看可能會以爲JS應該和Java是有很緊密的聯繫的吧,實際上它們是兩種徹底不一樣的語言,JS是ECMAScript的瀏覽器規範,是一種弱類型的語言,不一樣於Java這種強類型語言。JS簡單易用,但是它的語言機制又是十分複雜的,咱們一般對它是隻知其一;不知其二,深刻理解其運行機制和原理,才能駕輕就熟,避免各類使人抓狂問題,例如回調地獄等。es6

第一章 類型數組

JS有七大類型,string,number,boolean,object,null,undefine,symbol(es6新增),除了object,其餘都是基本類型,能夠用typeof運算符查看其對應類型。除了typeof null === 「object」//true,之外,其餘六種類型都有同名的字符串值一一對應,咱們經常使用的數組和函數,他們的typeof分別是」object」和」function」,他們都有length屬性,數組的length屬性是元素的個數,而函數的length屬性則是參數的個數。最容易混淆的是undefined和undecleare的狀況,前者是已經定義了的但沒賦值的變量,然後者則是從沒定義過的變量,雖然在typeof中都返回undefined,可是這個區別仍是值得注意。瀏覽器

第二章 值安全

JS的數組不須要預設數組大小,能夠直接向數組添加任何類型的值,若是造成了稀疏數組,那麼未賦值的部分將會是undefined。與數組有關的方法有push,pop,shift,unshift,sort,reverse,every,some,filter,forEach,map,concat,slice,splice等。某些不是數組的對象,若是其有length屬性,就是類數組,例如DOM元素列表,arguments,一般用[].slice.call()這個將其轉化爲數組,而es6爲咱們提供了一種新途徑——Array.from()。字符串也是類數組,有length屬性,也有indexof和concat等方法,和數組很類似,在JS中字符串是不可變的,而數組是可變的,不過咱們能夠借用數組的非變動方法來處理字符串。函數

JS中只有一種數值類型——number,使用64位二進制的雙精度格式,數字最前面的0和小數點中最後的0是能夠省略的,特別大或者特別小的數字用指數形式表示,經常使用的方法有tofixed(X)——將數字保留X位小數,不足用0補齊,toPresicion(X)——保留X位有效數字。二進制浮點數最大的問題就是0.1和0.2並非十分精確,所以有0.1+0.2==0.3//false,最多見的判斷小數相等的作法是設置一個偏差範圍值(機器精度),對JS來講是2^-52,最大安全整數是2^53-1,咱們能夠用a|0來將變量a中的數值轉換爲32位有符號整數。數字類型中有幾個特殊的值咱們須要注意,NaN——不是一個數字,能夠理解爲無效值,它和自己不相等,即NaN===NaN//false,無窮數——+Infinity和-Infinity,計算結果溢出時出現。對象

簡單的基本類型經過值複製來賦值或者傳遞,而複合值(對象等)則會經過引用複製來複制或傳遞,值複製至關因而處理原值的一個副本,而引用複製至關因而將原值的地址傳給了新的引用。ip

相關文章
相關標籤/搜索