【问题标题】:What is the difference between condensed arrays and literal arrays?压缩数组和文字数组有什么区别?
【发布时间】:2011-09-17 04:25:03
【问题描述】:

正如标题所说:压缩数组和字面量数组有什么区别?

new Array("John", "Bob", "Sue"); // condensed array

["John", "Bob", "Sue"]; // literal array

有没有我可以用一个做而我不能用另一个做的事情?还是它在记忆中的保存方式?

【问题讨论】:

  • 我猜这只是同一事物的两种语法

标签: javascript arrays


【解决方案1】:

没有,生成的对象没有区别,都是一样的。

第一个尝试是为了满足那些习惯于“经典”环境的程序员,在这种环境中,您必须实例化一个“新”数组对象。

需要注意的是,javascript中的数组并不是按顺序分配内存,而是具有可枚举属性名和一些额外(有用)方法的对象。

因此,在大多数(如果不是全部)情况下,创建一个固定长度的数组是相当无用和不必要的。

var array = new Array(10);

在功能上与手动设置数组长度相同

var array = [];
array.length = 10;

【讨论】:

  • +1 我比我更喜欢你对 OP 问题的阅读。我专注于你可以用句法形式“不同地”做什么,但在第二次阅读时,OP 可能会询问用这些形式生成的数组对象的差异。我会留下我的答案,但我认为你的解释是正确的。
【解决方案2】:

Array() 构造函数至少有一种众所周知的用法:

String.prototype.repeat= function(n){
    n= n || 1;
    return Array(n+1).join(this);
}

document.writeln('/'.repeat(80))

【讨论】:

    【解决方案3】:

    数组初始化器的语义在 ECMA 262 第 5 版规范的第 11.1.4 节中。你可以在那里阅读。它表示初始化器的含义与调用new Array 的含义相同。但是你可以用初始化器做一件事,而你不能用构造器做。看看这个:

    > a = [3,,,,5,2,3]
    3,,,,5,2,3
    > a = new Array(3,,,,5,2,3)
    SyntaxError: Unexpected token ,
    

    我在初始化程序中使用了所谓的“省略”。

    数组构造函数本身有一点灵活性

    a = new Array(10)
    ,,,,,,,,,
    a = new Array(1,2,30)
    1,2,30
    

    因此,构造函数的单个参数会生成一个包含那么多未定义的数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 2016-08-10
      相关资源
      最近更新 更多