Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“什么是”呢;未定义的x 1“;用JavaScript?_Javascript_Arrays_Oop_Arguments - Fatal编程技术网

“什么是”呢;未定义的x 1“;用JavaScript?

“什么是”呢;未定义的x 1“;用JavaScript?,javascript,arrays,oop,arguments,Javascript,Arrays,Oop,Arguments,我正在做一些小的实验 我正在谷歌Chrome的调试器中进行这项研究,困难的部分来了 我得到的事实是,我不能删除局部变量(因为它们不是对象属性)。我可以从名为“arguments”的数组中“读出”传递给函数的所有参数。我甚至知道我不能删除和数组的元素,只能实现数组[0]有一个未定义的值 有人能给我解释一下嵌入图像上未定义的x1是什么意思吗 当我覆盖函数foo以返回参数[0]时,我会得到通常的和“正常”的未定义值 这只是一个实验,但似乎是相互测试,有人知道未定义的x1是指什么吗?这似乎是Chrom

我正在做一些小的实验

我正在谷歌Chrome的调试器中进行这项研究,困难的部分来了

我得到的事实是,我不能删除局部变量(因为它们不是对象属性)。我可以从名为“arguments”的数组中“读出”传递给函数的所有参数。我甚至知道我不能删除和数组的元素,只能实现数组[0]有一个未定义的值

有人能给我解释一下嵌入图像上未定义的x1是什么意思吗

当我覆盖函数
foo
以返回
参数[0]
时,我会得到通常的和“正常”的未定义值


这只是一个实验,但似乎是相互测试,有人知道未定义的x1是指什么吗?

这似乎是Chrome在数组(和类似数组的对象)中显示未初始化索引的新方法:

这肯定比打印
[未定义,未定义,未定义,…]
或以前的打印方式要好


尽管如此,如果只有一个
未定义的
值,他们可能会删除
x1

这也发生在我身上。在另一个浏览器中打开相同的内容,并将阵列输出/记录到控制台。只要它以同样的方式在Crome和Firefox中工作(就像在访问元素时工作得很好,即使输出有未定义的X1)时,我认为Chrome中的某种bug不能在内部刷新某些东西。实际上,您可以通过以下方式进行测试:

  • 我正在向数组中添加元素,并启动console.log()来记录元素,以检查元素是否未定义。它们都被定义了

  • 在push()之后,我记录了这个数组,似乎发生这种情况时,它总是最后一个在Chrome上未定义x1的数组

  • 然后我试着记录了更多次,后来也记录了,但结果是一样的

  • 但是,当我通过索引访问元素(为了输出)时,它返回了正确的值(有趣)

  • 之后,我再次记录了数组,它说最后一个索引是未定义的x1(就是我刚刚成功直接访问的那个)

  • 然后我在数组上做了一个for循环,记录或使用每个元素,结果都很好

  • 然后阵列上的另一个日志仍然有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)