使用数字和字符串创建新的Array()构造函数

时间:2017-10-23 08:13:17

标签: javascript arrays

实际上,我正在研究别人的代码。

在解决我发现的错误时 这类事情。

注意:API提供的数字类型为productNumber。

  

有时只在新的Array()中传递一个productNumber。然后一个新的   发生了错误。

     

当输入productNumber不止一个时,工作正常。

     

为什么arr1 [0]给出未定义的。

var productNumber1 = 1001;
var arr1 = new Array(productNumber1);
console.log("arr1",arr1[0]);

var productNumber2 = '1001';
var arr2 = new Array(productNumber2);
console.log("arr2",arr2[0]);

你能不能解释一下这种行为。

3 个答案:

答案 0 :(得分:4)

在case1中,您传递的参数被视为数组的长度

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

  

使用给定元素初始化JavaScript数组,除非将单个参数传递给Array构造函数并且该参数是数字(请参阅下面的arrayLength参数)。请注意,此特殊情况仅适用于使用Array构造函数创建的JavaScript数组,而不适用于使用括号语法创建的数组文字。

     

arrayLength

     

如果传递给Array构造函数的唯一参数是0到2 ^ 32-1(含)之间的整数,则返回一个新的JavaScript数组,其length属性设置为该数字(注意:这意味着arrayLength空槽的数组,而不是具有实际未定义值的槽。)如果参数是任何其他数字,则抛出RangeError异常。

实际上在case1中,您正在创建一个长度为1001的数组。

然而,在案例2中,由于它不是数字,因此被视为元素。

答案 1 :(得分:2)

documentation for the Array constructor

中对此进行了描述
  

如果传递给Array构造函数的唯一参数是0到232-1(含)之间的整数,则返回一个新的JavaScript数组,其length属性设置为该数字

因此,如果你传递一个像1001这样的数字你会设置长度,但如果你传递一个像'1001'这样的字符串,你将设置第一个值,如果你传递多个参数你将设置多个值。

只是不要使用Array构造函数。请改用方括号文字符号。这避免了这个问题。

var productNumber1 = 1001;
var arr1 = [productNumber1];
console.log("arr1",arr1[0]);

var productNumber2 = '1001';
var arr2 = [productNumber2];
console.log("arr2",arr2[0]);

答案 2 :(得分:1)

您也可以使用set ridx [lsearch -regexp [lreverse $list] {[Tt]he}] set last [expr {[llength $list] - 1 - $ridx}] 工具完成此项工作。

Array.of()