ES5特性

  寫該博客的緣由主要是爲了讓本身再鞏固所學知識與記錄,方便之後查閱。更勉勵將來的本身每週堅持更新至少寫兩篇博客(去轉載也好啊,嘿嘿嘿)!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/

相關文章
相關標籤/搜索