js中更短的 Array 類型轉換
更新時間:2011年10月30日 23:25:21 作者:
代碼永遠都是那么好玩,而 Trick 不斷。那天張克軍在 twitter 上說還有比 [].slice.call() 更短的 Array 轉換么
當時我在分享會,想試試,但身邊沒有電腦。今天打開 Firebug 的那一瞬間,突然記起這事。馬上試了一下之前想的一個方案??梢裕〈a如下:
function a(){
var arr = Array(arguments);
alert(arr instanceof Array);
}
a('b');
在看 Baidu Tangram 的時候,最常看到的是 String('a string'),不像其實地方的用法,是使用與一個空字符串字面量相加來強制類型轉換。當時,就想到了如果 Array() 可以實現,那不是更爽?當然。而這是為什么呢?可以看一下這個打印出來的日志:
console.log(Array,[],Array(),new Array())
// => [undefined] [] [] []
console.log(Array('sofish'), ['sofish'], new Array('sofish'))
// => ["sofish"] ["sofish"] ["sofish"]有趣吧。其實像 new Array() 可以省去 new,變成 Array(),都是創(chuàng)建一個空數組實例。
至于用那種方法好,我也遇到的情況并不多,不能說明什么狀態(tài)。類型的轉換我們需要常用到的,還需要去做更深層的研究。而像第一種做法,至少可是很多現在流行的框架使用的方法。一般情況下都用在于把 function 的 arguments 對象轉換為數組來讓我們可以對其做更多的事。如果你想使用的話,保險的用法還是用第一種。
復制代碼 代碼如下:
function a(){
var arr = Array(arguments);
alert(arr instanceof Array);
}
a('b');
在看 Baidu Tangram 的時候,最常看到的是 String('a string'),不像其實地方的用法,是使用與一個空字符串字面量相加來強制類型轉換。當時,就想到了如果 Array() 可以實現,那不是更爽?當然。而這是為什么呢?可以看一下這個打印出來的日志:
復制代碼 代碼如下:
console.log(Array,[],Array(),new Array())
// => [undefined] [] [] []
console.log(Array('sofish'), ['sofish'], new Array('sofish'))
// => ["sofish"] ["sofish"] ["sofish"]有趣吧。其實像 new Array() 可以省去 new,變成 Array(),都是創(chuàng)建一個空數組實例。
至于用那種方法好,我也遇到的情況并不多,不能說明什么狀態(tài)。類型的轉換我們需要常用到的,還需要去做更深層的研究。而像第一種做法,至少可是很多現在流行的框架使用的方法。一般情況下都用在于把 function 的 arguments 對象轉換為數組來讓我們可以對其做更多的事。如果你想使用的話,保險的用法還是用第一種。