js中更短的 Array 类型转换
作者:
代码永远都是那么好玩,而 Trick 不断。那天张克军在 twitter 上说还有比 [].slice.call() 更短的 Array 转换么
当时我在分享会,想试试,但身边没有电脑。今天打开 Firebug 的那一瞬间,突然记起这事。马上试了一下之前想的一个方案。可以!代码如下:
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(),都是创建一个空数组实例。
至于用那种方法好,我也遇到的情况并不多,不能说明什么状态。类型的转换我们需要常用到的,还需要去做更深层的研究。而像第一种做法,至少可是很多现在流行的框架使用的方法。一般情况下都用在于把 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(),都是创建一个空数组实例。
至于用那种方法好,我也遇到的情况并不多,不能说明什么状态。类型的转换我们需要常用到的,还需要去做更深层的研究。而像第一种做法,至少可是很多现在流行的框架使用的方法。一般情况下都用在于把 function 的 arguments 对象转换为数组来让我们可以对其做更多的事。如果你想使用的话,保险的用法还是用第一种。