寫該博客的緣由主要是爲了讓本身再鞏固所學知識與記錄,方便之後查閱。更勉勵將來的本身每週堅持更新至少寫兩篇博客(去轉載也好啊,嘿嘿嘿)!git
最近不少框架或者說git上的一些項目介紹都會介紹說使用了ES五、ES6的語法,甚至今年開始有的還介紹說用了ES7了,那咱們就來看下這些ES五、六、7系列都須要掌握哪些知識點。今天咱們就先來掌握下ES5與咱們寫的常規的js的特性。github
ES5經過對現有JavaScript方法添加語句和原生ECMAScript對象作合併實現標準化。ES5還引入了一個語法的嚴格變種,被稱爲」嚴格模式(strict mode)」。面試
關於完整列表:請參考官方ECMAScript語言規範;json
關於兼容性問題:目前五大瀏覽器都對ES5兼容,具體能夠查看Juriy Zaytsev很讚的 ECMAScript 5 兼容性表。數組
ES5總結來講,新的特性就是以下5點:瀏覽器
1、嚴格模式——use strict安全
嚴格模式(「use strict」)是一種限制性更強語言變種的方式,簡單點講就是嚴格檢查語法、拼寫等規則,好比你少告終束符分號(;)就會報錯或者直接使用未聲明的變量(在非嚴格模式中,js使用爲使用未聲明變量,系統會將其建立成一個全局變量)也會報錯。使用的方法很簡單,在JS文件或是函數的頂部添加"use strict"
便可啓用嚴格模式。由於"use strict"
就是個字符串,所以其會被舊版瀏覽器安全地忽視。咱們來舉個栗子:app
"use strict";
function strict(){ "use strict"; //... }
二、提供全局JSON對象——JSON.stringify/JSON.parse;框架
你們常用的序列化(JSON.stringify
)和反序列化(JSON.parse)對象爲JSON格式。其實也是ES5提供一個全局的JSON
對象。(對於老的瀏覽器能夠考慮使用json2.js插件來實現相同的功能)。ecmascript
JSON.parse(text [, reviver])
JSON.parse反序列化的方法接受文本(JSON格式)轉化爲JSON對象,其中第二個參數是一個回調函數,主要是用來過濾返回值。
若是咱們要確保解析的值是個整數,咱們可使用reviver方法。來舉個栗子:
var result = JSON.parse('{"a": 1, "b": "2"}', function(key, value){ if (typeof value == 'string'){ return parseInt(value); } else { return value; } }) >> result.b 2
JSON.stringify(value [, replacer [, space]])
若是咱們須要改變值字符串化的方式,或是對咱們選擇的提供過濾(說白了也是過濾返回值),咱們能夠將其傳給replacer函數。栗子,咱們想過濾出即將被字符串化的對象中值大於18的值的屬性:
var nums = { "first": 17, "second": 20, "third": 13 } var luckyNums = JSON.stringify(nums, function(key, value){ if (value > 18) { return undefined; } else { return value; } }); >> luckyNums '{"first": 17, "third": 13}'
上面的代碼中你會發現知足條件時給的是「undefined」的值,那爲什麼結果裏面沒有undefined呢??實際上是這樣子的,若是replacer方法返回undefined, 則鍵值對就不會包含在最終的JSON中。最後的那個space參數我的感受比較雞肋,只是用來做返回結果的可讀性幫助(縮進方式)。space參數能夠是個數字,代表了做縮進的JSON字符串或字符串每一個水平上縮進的空格數。若是參數是個超過10的數值,或是超過10個字符的字符串,將致使取數值10或是截取前10個字符。
var luckyNums = JSON.stringify(nums, function(key, value) { if (value> 20) { return undefined; } else { return value; } }, 2); >> luckyNums '{ "first":7, "third":14 }'
三、附加對象——添加到Object上的構造器
Object.getPrototypeOf Object.getOwnPropertyDescriptor Object.getOwnPropertyNames //幾乎相同Object.keys但返回對象的全部屬性名稱(不僅是可枚舉的) Object.create //建立一個新對象,其原型等於proto的值 Object.defineProperty Object.defineProperties Object.seal //密封對象可防止其餘代碼刪除或更改任何對象屬性的描述符,以及添加新屬性 Object.isSealed //密封對象可防止其餘代碼刪除或更改任何對象屬性的描述符,以及添加新屬性 Object.freeze Object.preventExtensions //關閉可擴展性可能會阻止新屬性添加到對象,鎖定一個對象,防止屬性增長。返回對象 Object.isFrozen //凍結物體幾乎與密封物體相同,可是添加了不可修改的屬性 Object.isExtensible //關閉可擴展性可能會阻止新屬性添加到對象,肯定對象當前可擴展性的一種方法,返回bool Object.keys //返回表示對象的全部可枚舉屬性名稱的字符串數組 Object.hasOwnProperty //判斷是否擁有某個屬性
這些新增的好處之一是對象的屬性有了更多控制,例如哪些是容許被修改的,哪些是能夠枚舉的,哪些是能夠刪除的等。要用的時候直接拿起來用就好了。
四、額外的數組——添加到Arrayprototype對象上
Array.prototype.indexOf //測試一個元素是否存在於一個集合中 Array.prototype.lastIndexOf //相似indexOf,除了它從數組的末尾開始搜索元素 Array.prototype.every //集合中的全部項目是否知足指定的條件 Array.prototype.some //集合中的某些或全部項目是否知足指定的條件 Array.prototype.forEach(function(item,index,Array)) Array.prototype.map //原始數組的轉換或映射 Array.prototype.filter //過濾 Array.prototype.reduce //將一個數組減小爲一個值 reduce(function (previous, current, index, array),回調函數接受四個參數:上一個值,當前值,索引,以及數組自己 Array.prototype.reduceRight //將一個數組減小爲一個值,工做方式與如下相同reduce,除了它從最後處理數組以外 Array.isArray //直接將方法寫在了構造器上,判斷數組
同上,要用的時候直接拿來用就行
五、Function.prototype.bind(thisArg [, arg1 [, arg2, …]])
Function.prototype.bind
返回一個新的函數對象,該函數對象的this綁定到了thisArg
參數上。其實就是改變this對象的綁定,這個bind與apply功能比較近,也是不少公司喜歡拿來筆試或面試的題目。下次咱們專門寫一篇比較介紹下吧!
參考學習張大佬的博客:http://www.zhangxinxu.com/wordpress/2012/01/introducing-ecmascript-5-1/