廢話不多說,就繼續上回沒有介紹完的特色吧。
Scope
Scope機制有調整,現在在function裡面沒有用var宣告就使用變數時,變數不會變成Global,而是會產生錯誤。所以如果有倚賴這個過去ECMA-262 Edition 3的詭異規格的程式,恐怕需要做一些修改,否則會出問題。
Function.prototype.bind
可以讓你指定函數的context時,同時傳遞參數給它,沒傳完的參數,還可以等一下繼續傳給他執行(類似Currying)。(如果你使用google chrome,他已經偷偷在Function.prototype下面加了bind, partial, inherits, mixin四個函數,其中bind與新規格的功能差不多,可以拿來測試看看,原始碼可以在下面網址找到:http://src.chromium.org/viewvc/chrome/trunk/src/webkit/glue/devtools/js/base.js)
var a = function(obj, obj2) {
alert(this.name+"\n"+obj.name+"\n"+obj2.name);
};
var b = {
name: 'myname through bind'
};
var c = {
name: 'myname through bind altered'
};
var d = {
name: 'all been altered'
};
var e = a.bind(b,c);
e(d);
bind()的作用,簡單地說就是在使用函數前,先bind要傳送到函數的參數。
Date
Date物件可以用Constructor解析ISO格式的日期,也可以用toISOString()方法來回傳所代表的ISO格式日期字串。
String.prototype.trim()
不用多說,大家都知道意思吧?就是去掉字串前後的空白。
Array
Array物件提供了一個isArray()函數來測試傳入的參數是否是一個Array。(有很多看起來像是Array,操作起來也很像Array,但實際上並不是Array的物件,內部是一個List,會導致使用時發生錯誤。例如函數的arguments物件就是一個例子,把他當作Array傳給Function.prototype.apply()的第二個參數就會發生錯誤)
另外有更多的新方法:
Array.prototype.indexOf():傳回第一個符合條件元素的index
Array.prototype.lastIndexOf():傳回最後一個符合條件元素的index
Array.prototype.every ( callbackfn [ , thisArg ] ):用callbackfn函數檢查是否每個元素都符合條件,傳入元素的值當作參數
Array.prototype.some ( callbackfn [ , thisArg ] ):用callbackfn函數檢查是否有元素符合條件,傳入元素的值當作參數
Array.prototype.forEach ( callbackfn [ , thisArg ] ):可以代替for loop,會把元素、index、array物件本身傳入作為callbackfn函數的參數使用
Array.prototype.map ( callbackfn [ , thisArg ] ):使用callbackfn對每個元素進行操作,傳入元素的值當作參數
Array.prototype.filter ( callbackfn [ , thisArg ] ):使用callbackfn函數過濾元素,,傳入元素的值當作參數
Array.prototype.reduce ( callbackfn [ , initialValue ] ):使用callbackfn做歸納計算,如果函數會return一個數值,則使用這個數值當作第一個參數,否則使用前一個元素做第一個參數,目前元素做第二個參數,目前元素的index做第三個參數,陣列物件本身作為第四個參數。如果指定initial值,第一次執行callbackfn時第一個參數就是這個值,否則就是第一個元素
Array.prototype.reduceRight ( callbackfn [ , initialValue ] ):同前,但是從最後一個元素往前處理
(把其他Array物件當作thisArg傳給上面用到thisArg參數的函數,就會取代Array原本使用的this而給使用傳給它的物件當作this)
部份的說明可以參考Array extras以及Working with Arrays底下列舉出的在Javascript1.6及Javascript1.8增加的操作以及範例說明。
總之
想知道更詳細的東西,還是直接看規格吧:http://www.ecmascript.org/docs/tc39-2009-043.pdf。隨然還沒正式發布,不過我想也不會大改。