javascript - Array 构造函数的合法使用

标签 javascript arrays constructor

我喜欢这个问题 - Legitimate uses of the Function constructor - 所以我想提出一个关于 Array 构造函数的类似问题。

当然,数组字面量表示法才是创建数组的正确方法。这意味着不应使用 new Array 表示法。和“结案”。

但是,new Array 形式有一个特殊性。如果传入自然数,则会创建一个空数组,并将其 length 属性设置为该数字。

所以

arr = new Array( 7 );

相当于

arr = [];
arr.length = 7;

这可以被认为是一个特性。我想知道这个“功能”是否有实际用途。我最近偶然发现了这样一种(简单的)用法:

new Array( n + 1 ).join( '*' ) // returns string containing n stars

// e.g.
new Array( 3 ).join( '*' ) // returns '**'
new Array( 6 ).join( '*' ) // returns '*****'

这很酷,但希望有一些更高级的用途。 (这将使 new Array 符号成为 JavaScript 程序中的合法工具。)


更新:我注意到 jQuery 库在一个实例中使用了 new Array( len ) 表示法 - 它在 when 中函数(搜索 "when:"):

when: function( firstParam ) {
    var args = sliceDeferred.call( arguments, 0 ),
        i = 0,
        length = args.length,
        pValues = new Array( length ),
        count = length,
        pCount = length,
        // etc.

他们用它来初始化 pValues 局部变量,该变量在代码后面的局部函数中使用:

function progressFunc( i ) {
    return function( value ) {
        pValues[ i ] = arguments.length > 1 ?
                sliceDeferred.call( arguments, 0 ) : value;
        deferred.notifyWith( promise, pValues );
    };
}

我很想知道是否将作业更改为 just

pValues = [],

会破坏程序...(notifyWith 是否需要 new Array( length ) 才能正常工作?)

最佳答案

我不知道这是否重要,但您会使用构造函数的一种情况是,如果您需要确保拥有干净、未修改的 Array 构造函数。您可以创建一个“iframe 沙箱”

var iframe = document.createElement("iframe");
iframe.style.display = "none";
document.body.appendChild(iframe);
var Safe = frames[frames.length - 1];

然后像这样创建数组...

var things = new Safe.Array('x', 'y', 'z');

...知道您的数组在原型(prototype)中不会有其他脚本放置的任何外来内容。

不过,这并没有利用单参数作为数组长度的特性。唯一真正有用的可能是设置巨大的数组来进行基准测试。

关于javascript - Array 构造函数的合法使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8453048/

相关文章:

javascript - 选中任何复选框或填充任何输入框的简单方法

Javascript 索引性能

iOS Swift - 无法使用数组 [UIViewAnimationOptions] 更改动画选项

java - 查找数组中的重复项并返回临时数组中的重复项

c++ - 在哪些情况下根本没有构造函数,甚至没有默认构造函数?

c++ - 如何将 `__ramfunc` 固有函数应用于构造函数?

java - 防止进一步实例化 Java 类的最佳实践

javascript - 在 jQuery UI Datepicker 中为选定的日期添加一个特殊类

javascript - 检测 jQuery 自动完成是否有结果

javascript - 在 Jade 中迭代循环时重复