来自新手的JavaScript Array的难度

时间:2011-04-28 14:43:34

标签: javascript

我是JavaScript新手。从我在javascript中知道的一些教程中,有两种方法来声明数组。 一个是这样的:

var test = new Array("apple","pine");

test = new Array("apple","pine");

两个是这样的,

var test=["apple","pine"];

但是当我用这种方式宣布它时:

test=Array("apple","pine");

还可以。为什么呢?

4 个答案:

答案 0 :(得分:3)

在Javascript中,您可以(并且应该)使用var关键字声明变量,但这不是必需的。所以任何变量都可以这样声明:

var a = 'abc';

a = 'abc';

但是当您创建新变量时,第一个(使用var总是。否则,您可能会覆盖具有相同名称的现有变量。数组也是一个变量,因此也可以使用或不使用var关键字来声明它。然后有两种方法来声明一个数组,并且两者完全相同:

var a = ['a', 'b', 'c'];

与:

相同
var a = new Array('a', 'b', 'c');

,在这种情况下,new关键字不是必需的 - 根据javascript规范。但它通常用于表示您正在创建对象的新实例。

答案 1 :(得分:2)

因为new Array(...)Array(...)做同样的事情(=创建一个新数组)。这就是它在规范中的定义。

见这里:http://es5.github.com/#x15.4.1

  

当Array作为函数调用时   它不是作为构造函数   创建并初始化一个新数组   宾语。因此函数调用   数组(...)等同于对象   创建表达式new Array(...)with   相同的论点。

因此,这3行是等价的:

arr = ['apple', 'pine'];
arr = new Array('apple', 'pine');
arr = Array('apple', 'pine');

答案 2 :(得分:2)

首先,您应该坚持使用简单的“[...]”表示法来创建和初始化数组。因此:

var test = ["apple", "pine"];

您还应该谨慎使用var 所有您的本地变量。 (实际上,我会指出,不要将var用于所有声明,这是不好的做法。)

现在,使用不带new前缀的Array构造函数可以正常工作,因为这就是Array构造函数的定义方式。换句话说,如果没有用new调用它,它会返回一个数组。但是,你真的不应该担心它,因为在大多数情况下根本没有理由使用Array构造函数。

答案 3 :(得分:2)

var用于声明变量的范围。

x = 'hello';

function y() {
    x = 'goodbye';
}

function z() {
    var x = 'how are you';
}

y()
alert(x); // outputs 'goodbye';
z();
alert(x); // outpus 'hello';

基本上var将变量声明为本地范围。如果你在脚本的顶层使用它没有实际效果,但在函数内它会使变量“本地”。