javascript - Array(5) 是否等同于 var a = []; a.长度=5;在 JS 中?

标签 javascript arrays constructor literals

我在 JS 中看到 四个 五个将数组初始化为特定长度的选项,(我知道最后一个是拉伸(stretch)):

var a = []; a.length = 5;

var a = Array(5);

var a = []; a[4] = undefined;

var a = new Array(5);

function makeArrayToLength(length, default){
    var a = [], i = 0;
    for(; i < length; i++){
        a[i] = default;
    }
    return a;
}

我绝对希望(并且确实)尽可能使用文字,但我所处的情况是特定数组的定义方面是它的长度,所以我倾向于 Array(5)。就最终结果而言,第一个示例是否等同于第二个示例?我意识到这在执行上是不等价的。

最佳答案

前两个和第三个例子是等价的,最后它们产生了一个Array。只有一个自己的属性的对象,length , 包含 5作为它的值(value)。

当您调用 Array使用单个数字参数(如 Array(5); )的构造函数,新创建的对象将包含该数字作为其 length属性,索引属性未创建:

var a = Array(5);
a.hasOwnProperty('0'); // false

第二个例子产生同样的结果:

var a = [];
a.length = 5;
a.hasOwnProperty('0'); // false

关于第三个例子,它不是等价的,因为它会在数组对象上创建一个属性,即使它的值是undefined。 :

var a = []; a[4] = undefined;
a.hasOwnProperty('4'); // true

第四个例子:

var a = new Array(5);

与第二个(var a = Array(5);)完全一样,使用Array没有区别有或没有 new 的构造函数运算符,在第二个例子中你是 calling the Array constructor as a function .

最后,关于你的 makeArrayToLength函数,现在我想你知道它根本不等价,因为所有“索引属性”都被初始化为“默认”值。 (顺便说一句,不要使用 default 作为标识符,它是一个关键字...)

Array通常避免构造函数,因为它可以根据使用的参数有不同的行为,例如:

Array("5"); // one element array, (["5"])
Array(5);   // empty array, length = 5
// v.s.
["5"]       // one element array
[5]         // one element array

另外,Array构造函数可以被覆盖,而数组文字将始终有效。

关于javascript - Array(5) 是否等同于 var a = []; a.长度=5;在 JS 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4395429/

相关文章:

JavaScript for 循环 innerHTML 返回未定义

python - 在 numpy 数组中搜索模式

java - 使用多个参数从 MyClass.class 创建实例

javascript - react : Dynamically created state variable

java - 在Java中解析包含JS的HTML页面

javascript - Highcharts 折线图向下钻取无法正常工作

javascript - 展开/折叠全部包含嵌套的 Accordion 和非 Accordion 项目 : BOOTSTRAP

c - 未排序数组中元素的出现次数 O(n)

wcf - WCF 服务可以有构造函数吗?

c++ - 对象构造期间缓冲区太小。觉得跟strcpy_s()有关系