ES5總結

ECMAScript5是2009年標準化的規範,IE9+和現代瀏覽器均支持,已經能夠大規模應用的新特性html

(一)'use strict'

限制一些用法,至關於棄用了一些以前的語法:http://www.cnblogs.com/snandy/p/3428171.html數組

(二) Array擴展

let arr = [1,2,3]
{
	//forEach
	arr.forEach(function(val,i,arr){
		//console.log(val,i,arr) 
	})
}
{
	//map:返回一個數組,包含該函數的返回值
	let map_arr = arr.map(function(val,i,arr){
		return val*2
	})
	//console.log(map_arr) //[2,4,6]
}
{
	//filter:返回數組的一個子集。傳遞的函數是用來邏輯判斷的:true/false。
	//若是返回值爲true或能轉化爲true的值,那麼傳遞給判斷函數的元素就是這個子集的成員
	let filter_arr = arr.filter(function(val,i,arr){
		return val > 1
	})
	//console.log(filter_arr) //[2,3]
}
{
	//every/some: 它們對數組元素應用指定的函數進行判斷,返回true或false
	//every: 當且僅當都返回true,它才返回true。
	//some: 當且僅當針都返回false,它才返回false
	let every_arr = arr.every(function(val,i,arr){
		return val > 1
	})
	let some_arr = arr.some(function(val,i,arr){
		return val > 1
	})
	//console.log(every_arr,some_arr) //false true
}
{
	//indexOf/lastIndexOf: 搜索整個數組中具備給定值的元素,返回找到的第一個元素的索引或者若果沒有找到則返回-1
	//注意:並不會作類型轉換
	let indexOf_arr = arr.indexOf(2)	
	//console.log(indexOf_arr) //1
}
{
	//reduce/reduceRight: 接收一個函數做爲累加器,數組中的每一個值(從左到右)開始縮減,最終爲一個值
	let reduce_arr = arr.reduceRight(function(previous, current, index, array){
		console.log('previous:'+previous)
		console.log('current:'+current)
		console.log('index:'+index)
		console.log('----------------')
	  	return previous + current;
	});
	//console.log(reduce_arr) //1
}
{
	//isArray:判斷是不是數組
	Array.isArray(arr)
}

  

(三) Object擴展

//Object 擴展:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
var obj = {};
{
	//Object.defineProperty(obj, prop, descriptor):在一個對象上定義一個新屬性,或者修改一個已經存在的屬性, 並返回這個對象
	//descriptor:描述符:屬性描述符有兩種主要形式:數據描述符和存取描述符
	//1.數據描述符
	Object.defineProperty(obj,"a",{
		//這個屬性起到兩個做用:
		//目標屬性是否能夠使用delete刪除
		//目標屬性是否能夠再次設置特性
	    configurable:false,
	    //此屬性是否能夠被枚舉(使用for...in或Object.keys())
	    enumerable:false,
	    value:undefined,
	    //值是否能夠重寫
	    writable:false
	});
	//2.存取描述符
	Object.defineProperty(obj,"b",{		
	    configurable:false,
	    enumerable:false,
	    //注意:
	    //當使用了getter或setter方法,不容許使用writable和value這兩個屬性
	    //get或set不是必須成對出現,任寫其一就能夠。若是不設置方法,則get和set的默認值爲undefined
	    get:function (){return 1}
	});

	//demo
	let _obj = {}
	var initValue = 'hello'
	Object.defineProperty(_obj,"newKey",{
	    get:function (){
	        //當獲取值的時候觸發的函數
	        return initValue   
	    },
	    set:function (value){
	        //當設置值的時候觸發的函數,設置的新值經過參數value拿到
	        initValue = value
	    }
	});
	//獲取值
	//console.log( _obj.newKey )  //hello
	//設置值
	_obj.newKey = 'change value'
	//console.log( _obj.newKey ) //change value
}
{
	//Object.defineProperties() 方法在一個對象上添加或修改一個或者多個自有屬性,並返回該對象
	let _obj = {}
	Object.defineProperties(_obj, {
	  "property1": {
	    value: true,
	    writable: true
	  },
	  "property2": {
	    value: "Hello",
	    writable: false
	  }
	  // 等等.
	});
	//console.log(_obj.property2) //"Hello"
}	
{
	//Object.create:建立一個擁有指定原型和若干個指定屬性的對象
	let proto = {aa:11}
	let o = Object.create(proto, {
	  // foo會成爲所建立對象的數據屬性
	  foo: { writable:true, configurable:true, value: "hello" },
	  // bar會成爲所建立對象的訪問器屬性
	  bar: {
	    configurable: false,
	    get: function() { return 10 },
	    set: function(value) { console.log("Setting `o.bar` to", value) }
	}})
}
{
	//獲取給丁對象的prototype對象。等價於之前的o.__proto__
	Object.getPrototypeOf(obj)
	//返回對象的全部可枚舉(enumerable)屬性的名稱:不含繼承
	Object.keys(obj)
	//獲取自有屬性名列表:不含繼承
	Object.getOwnPropertyNames(obj)

}
{
	//阻止對象添加屬性,但能夠修改和刪除
	Object.preventExtensions(object)
	//不能添加和刪除屬性
	Object.seal(object)
	//阻止屬性和屬性值得修改,防止新屬性的添加
	Object.freeze(object)
	//對應:
	Object.isExtensible()	
	Object.isSealed()
	Object.isFrozen()
}

  

(四) Date擴展

{
	Date.now() // 1483334011674
}

(五) JSON對象

//JSON對象
{
	//JSON.parse() 解析一個JSON字符串,構造由字符串描述的JavaScript值或對象
	//JSON.stringify() 將JavaScript值轉換爲JSON字符串
}

  

(六)String擴展

{
	//String.prototpye.trim:去掉字符串兩頭的空白符和換行符。
	' ddd  '.trim()
}
{
	//字符訂閱
	"abc"[2] === "b"
}

  

(七)Function擴展

{
	//爲了指定當前函數的上下文對象和運行參數,該函數建立一個新的函數,保留給定的this對象和運行參數。
	//Function.prototype.bind(thisTarget, arg1,...argn)
	(function(){console.log(this,arguments)}).bind({},1,2)()
	//下面實現一個pollfill
	if(!Function.prototype._bind){
		Function.prototype._bind = function(){
			var _this = this
			var context = [].shift.call(arguments)
			var arg = [].slice.call(arguments)
			return function(){
				_this.apply(context,arg.concat([].slice.call(arguments)))
			}
		}
	}
}
相關文章
相關標籤/搜索