相关疑难解决方法(0)

如何在javascript中初始化数组的长度?

我在JavaScript中使用数组(包括w3schoolsdevguru)阅读的大多数教程都建议您可以使用var test = new Array(4);语法将整数传递给Array构造函数来初始化具有一定长度的数组.

在我的js文件中大量使用这种语法之后,我通过jsLint运行了一个文件,它吓坏了:

错误:第1行字符22处的问题:预期')'而是看到'4'.
var test = new Array(4);
第1行第23个问题:预期';' 而是看到')'.
var test = new Array(4);
第1行字符23处的问题:预期标识符而不是')'.

通过阅读jsLint对其行为的解释后,看起来jsLint并不真正喜欢new Array()语法,而是[]在声明数组时更喜欢.

所以我有几个问题.首先,为什么?我是否因使用new Array()语法而冒任何风险?是否存在我应该注意的浏览器不兼容性?第二,如果我切换到方括号语法,有没有办法声明一个数组并将其长度全部设置在一行,或者我必须做这样的事情:

var test = [];
test.length = 4;
Run Code Online (Sandbox Code Playgroud)

javascript arrays jslint

470
推荐指数
14
解决办法
60万
查看次数

为什么Array.apply(null,[args])在处理稀疏数组时行为不一致?

我最近在SO上发现了以下代码片段,以帮助快速填充具有默认值的数组:

Array.apply(null, new Array(3)).map(function() {return 0;});
Run Code Online (Sandbox Code Playgroud)

鉴于Array构造函数和apply方法的行为,上面的代码片段也可以这样重写:

Array.apply(null, [undefined, undefined, undefined]).map(function() {return 0;});
Run Code Online (Sandbox Code Playgroud)

在处理您希望使用默认值填充的稀疏数组时,此技术也很有用:

var sparseArr = [3,,,4,1,,],
    denseArr = Array.apply(null, sparseArr).map(function(e) {
      return e === undefined ? 0 : e;
    });

// denseArr = [3,0,0,4,1,0]
Run Code Online (Sandbox Code Playgroud)

然而,其中出现了两个奇怪之处:

  1. 如果sparseArr未定义最后一个术语,则不映射该术语denseArr
  2. 如果sparseArr仅包含单个术语(例如sparseArr = [1])或单个术语后跟单个尾随未定义术语(例如sparseArr = [1,]),则得到的denseArr等于[undefined x 1]

谁能解释这种行为?

javascript arrays

17
推荐指数
1
解决办法
6838
查看次数

Array.apply(null,Array(x))和Array(x)之间的区别

究竟有什么区别:

Array(3)
// and
Array.apply(null, Array(3) )
Run Code Online (Sandbox Code Playgroud)

第一个返回,[undefined x 3]而第二个返回[undefined, undefined, undefined].第二种是通过环连接Array.prototype.functions,如.map,但第一不是.为什么?

javascript

13
推荐指数
3
解决办法
3036
查看次数

标签 统计

javascript ×3

arrays ×2

jslint ×1