从一个新手的JavaScript数组的困难

A difficulty with JavaScript Array from a newbie

本文关键字:JavaScript 数组 新手 一个      更新时间:2023-09-26

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

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

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

两个是这样的,

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

但是当我用这种方式声明它时:

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

还可以。为什么?

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

var a = 'abc';

a = 'abc';

但是第一个(var)应该在创建新变量时始终使用。否则,您可能会用相同的名称覆盖已经存在的变量。数组也是一个变量,因此也可以使用或不使用var关键字来声明它。然后有两种声明数组的方法,它们都做同样的事情:

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

的作用与

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

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

首先,您应该坚持使用简单的"[…]来创建和初始化你的数组。因此:

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

您还应该小心地对所有本地变量使用var。(实际上,我要大胆地说,不把var用于所有声明只是一个不好的做法。)

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

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声明一个变量为局部作用域。如果你在脚本的顶层使用它,它没有实际的效果,但在函数中,它会使变量"local"。

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

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

当Array作为函数调用时而不是作为构造函数创建并初始化一个新的Array对象。因此函数调用Array(…)等价于对象创建表达式new Array(…相同的参数

因此,这三行是等价的:
arr = ['apple', 'pine'];
arr = new Array('apple', 'pine');
arr = Array('apple', 'pine');