实际上,我正在研究别人的代码。
在解决我发现的错误时 这类事情。
注意: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]);
你能不能解释一下这种行为。
答案 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()