JavaScript快速数组声明

4

是否有一种JavaScript版的Perl qw()方法,能够快速创建数组?例如:

in Perl @myarray = qw / one two three /;
in Javascript var myarray = ('one', 'two', 'three' );  // any alternative??
3个回答

7
要“快速”编写一个数组,你可以采用以下方式:
var x = 'foo bar baz'.split(' ');

特别是对于大数组,这比以下方式稍微容易些:

var x = ['foo', 'bar', 'baz'];

尽管如此,使用.split()明显比编写整个数组要慢得多,但更易于理解。

4
在我看来,第一种方法不好。没必要每次运行脚本时都花费不必要的执行时间,只为了节省一次按键操作。 - Justin Johnson
1
在我看来,可维护性和可读性比执行时间极微小的增加更为重要。 - rjh
1
@Justin Johnson:没错!这就是为什么我建议把整个数组都打出来。 - Mathias Bynens
1
@rjh 对于像字面数组声明这样过于常见的语法,有什么不可维护或难以阅读的地方吗? - Justin Johnson
1
@Justin:qw()-style函数更易于阅读,并且由于IE不支持字面数组声明中的尾随逗号,因此更容易添加或删除新项而不会创建语法错误。即使优点很小,我认为对这种语法优化进行优化是没有意义的,除非这个结构在紧密循环内部。 - rjh
1
在我看来,认为数组字面量不易于阅读、使用和友好是愚蠢的。此外,使用数组字面量并不是一种优化,而使用 qw 风格的函数则是一种劣化。 - Justin Johnson

5

虽然没有内置的结构,但您可以执行以下任一操作:

var myarray = 'one two three'.split(' '); // splits on single spaces

或者

function qw (str) {return str.match(/\S+/g)}

var myarray = qw(' one two  three '); // extracts words

为什么使用.split(/\s+/)而不是.split(' ')?后者似乎更快。 - Mathias Bynens
@Mathias => Perl的qw//运算符将在变宽空格上拆分。我已经更新了我的答案,包括更快速的单字符分割和一个qw克隆。 - Eric Strom
很酷,我不知道 qw// 可以这样用。感谢你的解释! - Mathias Bynens

-2
var array:Array = [ 1 , 2 , 3 ];
var dictionary:Object = { a:1 , b:2 , c:3 };

1
它无法编译(至少在FF中)。我可以这样做:var array = [1, 2, 3]; 但是不能这样:var array = [one, two, three]。 - Lydon Ch
1
引用你的字符串:var array = [ 'one', 'two', 'three' ] - Nikki Erwin Ramirez
@Nikki 我认为重点是他不想引用每个字符串。 - deceze
在JavaScript中,除非它们是对象字段名,否则必须对字符串进行引用。数组可以使用数字、字符串、数组或对象进行初始化。var array:Array = [ 1, "two", [1,2,3], { value:4 }]; var dictionary:Object = { one:1, two:"two", three:[1,2,3], four:{value:4}}; - drawnonward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接