O/P of Javascript code



在下面的JavaScript代码中:-

var a  = [];
for (i in a) {
  alert(i);
}

我得到 o/p 作为 - $family、$constuctor、每个、克隆、清理、调用、关联、链接、包含、附加、getlast、getRandom、include、组合、擦除、空、扁平、pick、hexToRgb、rgbToHex。

谁能解释为什么会这样?它是否必须对 Array 对象的属性执行某些操作,如果是这样,那么为什么没有提醒所有属性?另外,如果我们取一个空对象文字,如var a = {},我们没有得到任何o/p。

现在,如果我像这样更改上面的代码:-

var a  = [9,2];
for (i in a) {
    if (a.hasOwnProperty(i)) {
        alert(a.hasOwnProperty(i));
        alert(i);
      }
} 

我得到的输出为 0 和 1.为什么会这样?这些是这个数组对象的属性(也是索引)吗?

for-in 语法适用于对象。它迭代对象的所有字段,包括方法。当您想要迭代数组时,请始终使用以下命令:

for (var i = 0; i < array.size; i++) {
    doSomething(array[i]);
}

后一个带有 hasOwnProperty 的循环不会循环访问数组的标准方法,因为数组a从基 Array 类继承了这些方法,因此它们不是它自己的属性。但是当你显式地将方法添加到数组时,它还应该列出该函数,因为它现在是一个自己的属性:

var a  = [9,2];
a.hello = function() { };
for (i in a) {
    if (a.hasOwnProperty(i)) {
        alert(a.hasOwnProperty(i));
        alert(i);
      }
} 

这应该列出 0、1 和你好。

如果您期望它输出 9 和 2,并且想知道为什么它会输出 0 和 1:这是因为 for-in 数组迭代键,而不是值。数组基本上是对象,其中每个数组元素都是一个以数组索引作为名称的属性。所以

var a = [9, 2];

等效于这个对象(加上从 Array 继承的东西):

var a = {
    0: 9,
    1: 2
}

最新更新