“什么是”呢;未定义的x 1“;用JavaScript?
我正在做一些小的实验 我正在谷歌Chrome的调试器中进行这项研究,困难的部分来了 我得到的事实是,我不能删除局部变量(因为它们不是对象属性)。我可以从名为“arguments”的数组中“读出”传递给函数的所有参数。我甚至知道我不能删除和数组的元素,只能实现数组[0]有一个未定义的值 有人能给我解释一下嵌入图像上未定义的x1是什么意思吗 当我覆盖函数“什么是”呢;未定义的x 1“;用JavaScript?,javascript,arrays,oop,arguments,Javascript,Arrays,Oop,Arguments,我正在做一些小的实验 我正在谷歌Chrome的调试器中进行这项研究,困难的部分来了 我得到的事实是,我不能删除局部变量(因为它们不是对象属性)。我可以从名为“arguments”的数组中“读出”传递给函数的所有参数。我甚至知道我不能删除和数组的元素,只能实现数组[0]有一个未定义的值 有人能给我解释一下嵌入图像上未定义的x1是什么意思吗 当我覆盖函数foo以返回参数[0]时,我会得到通常的和“正常”的未定义值 这只是一个实验,但似乎是相互测试,有人知道未定义的x1是指什么吗?这似乎是Chrom
foo
以返回参数[0]
时,我会得到通常的和“正常”的未定义值
这只是一个实验,但似乎是相互测试,有人知道未定义的x1是指什么吗?这似乎是Chrome在数组(和类似数组的对象)中显示未初始化索引的新方法: 这肯定比打印
[未定义,未定义,未定义,…]
或以前的打印方式要好
尽管如此,如果只有一个
未定义的
值,他们可能会删除x1
这也发生在我身上。在另一个浏览器中打开相同的内容,并将阵列输出/记录到控制台。只要它以同样的方式在Crome和Firefox中工作(就像在访问元素时工作得很好,即使输出有未定义的X1)时,我认为Chrome中的某种bug不能在内部刷新某些东西。实际上,您可以通过以下方式进行测试:
还值得一读:我在代码中也使用了pop(),这是一个合理的解释,控制台日志实际上代表了不同的时间状态(当代码“暂停”时)。Google Chrome似乎选择使用这个
未定义的xn
符号来显示。如果不是稀疏数组,它将显示[未定义,未定义]
:
var arr = new Array(2);
console.log(arr);
var arr2 = [];
arr2[3] = 123;
console.log(arr2);
var arr3 = [,,,];
console.log(arr3)
var arr4 = [,];
console.log(arr4)
var arr5 = [undefined, undefined]
console.log(arr5)
var arr6 = [undefined]
console.log(arr6)
arr1到arr4都是稀疏数组,而arr5和arr6则不是。Chrome将显示为:
[undefined × 2]
[undefined × 3, 123]
[undefined × 3]
[undefined × 1]
[undefined, undefined]
[undefined]
请注意稀疏数组的[undefined x 1]
由于您删除了一个元素,因此如下所示:这是它的外观,请在chrome devtools控制台中键入此代码:-
arr = new Array(4);
arr[2] = "adf";
console.log(arr); // [undefined × 2, "adf", undefined × 1]
查看由*2表示的前两个连续的“未定义”,以显示其中有两个连续的未定义较新版本的Chrome使用
空
而不是未定义
,以使区别更清楚
例如,在DevTools控制台中输入[,,undefined,,]
,将导致:
▼(4) [empty × 2, undefined, empty]
2: undefined
length: 4
▶__proto__: Array(0)
哦,我想我已经把手伸进了一些我不应该=D好的,thanx mate,+1,接受=德尼斯一号。似乎只适用于隐式
未定义的s,例如新数组(100)
调用它,但[未定义,未定义]
调用它not@alex:是的,在这种情况下,索引0
和1
实际上存在于数组中。我的答案的措辞有点改变。我的数组类似于var e=[a(b),a(c),a(d)]如果我访问它,chrome会显示未定义的x3(e[0]),它显示的是正确的类型。@FelixKling这发生在我使用星号进行寻路时。简单地说,第一个console.log(open)是[undefined x xx],第二个console.log(open[0])是正确的类型。我不知道为什么会这样。我不能提供一个例子,因为我无法让这个行为在任何其他代码上工作,我不想显示我的代码。。。所以我不能。但感谢您的回答。从技术上讲,您不是在处理数组
,而是处理类似对象
的数组。请注意参数
不是数组,而是参数
对象(尽管它的外观和行为类似)。另外,从数组中删除项不是用delete
操作符完成的。@alex:是的,我知道这一点,这就是为什么我“能够”删除,但只删除对值的引用,对吗?否则,数组的长度将缩短为1。@Bergi:当您创建一个临时数组并克隆需要的元素而跳过不需要的元素时,您是说该方法吗?或者你有别的想法?你在寻找一种过滤方法?您应该使用for(var i)循环arguments对象
▼(4) [empty × 2, undefined, empty]
2: undefined
length: 4
▶__proto__: Array(0)