【问题标题】:Javascript Array extensionJavascript 数组扩展
【发布时间】:2009-08-05 16:52:44
【问题描述】:

只是想知道。 我使用它的原型扩展了 javascript Array 对象,如下所示:

<html>
<head>
</head>
<body>
<script type="text/javascript">
  function SomeMethod(){
  alert('Hello');
  }
  if(typeof Array.prototype.SomeMethod ==='undefined' ){
    Array.prototype.SomeMethod = SomeMethod;
  }
  var ax=new Array("A","B","C");
  for(var i in ax){
    document.write(ax[i]);
  }
</script>

</body>
</html>

结果将是:

ABCfunction SomeMethod() { alert("Hello"); } 

编辑: 虽然我已经找到了答案,但我觉得有必要补充一些 更多信息,以便其他人更清楚。

【问题讨论】:

  • 里面是不是藏着一个问题?
  • 你给我们的只会输出“ABC”。
  • 不要在数组上使用 for...in,它不是为此而设计的

标签: javascript


【解决方案1】:

for..in 迭代对象的(非内置)属性。不要使用它来遍历数组。只需使用常规的 for 循环即可。

阅读此链接https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Statements/for...in#Description

【讨论】:

    【解决方案2】:

    一个问题会很有帮助;-)

    我假设您不想显示原型属性? JS 不允许您在添加到原型的属性上设置“DontEnum”,因此您必须检查数组是否具有该属性,或者它是否是其原型的属性:

    for(var i in ax) {
        if (a.hasOwnProperty(i)) {
            document.write(ax[i]);
        }
    }
    

    虽然要遍历数组,但您实际上不应该使用 for...in,因为它用于遍历对象的属性,而不是数组的元素。

    【讨论】:

      【解决方案3】:

      Crockford 很好地解释了 on his site 和他的视频。听起来您通过将 Array 类型用作哈希表来滥用它。在这种情况下,您需要执行以下操作

      来自克罗克福德:

      JavaScript 有很好的符号 操作方便 哈希表。

      var myHashtable = {};
      

      这个语句创建了一个新的哈希表 并将其分配给新的本地 多变的。 JavaScript 是松散类型的, 所以我们不使用类型名称 声明。我们使用下标 添加、替换或检索的符号 哈希表中的元素。

      myHashtable["name"] = "Carl Hollywood";
      

      还有一个点符号是 方便一点。

      myHashtable.city = "Anytown";
      

      当 下标是字符串常量 合法标识符的形式。因为 语言定义错误, 保留字不能用于 点表示法,但它们可以用于 下标符号。

      你可以看到 JavaScript 的 哈希表表示法非常类似于 Java 的对象和数组表示法。 JavaScript 走得更远: 对象和哈希表是相同的 东西,所以我可以写

      var myHashtable = new Object();
      

      结果应该是完全一样的 一样的。

      有枚举能力 内置在 for 语句中。

      for (var n in myHashtable) {
          if (myHashtable.hasOwnProperty(n)) {
              document.writeln("<p>" + n + ": " + myHashtable[n] + "</p>");
          }
      }
      

      我相信 jquery .each 代码会为您执行此操作,但我不能 100% 确定。

      如果您正在使用 实际 数组并想正确使用它,则应该这样做

      for (var i = 0; i < myArray.length; i++)
      {
          alert(myArray[i]);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-09
        • 1970-01-01
        • 2018-09-24
        • 2011-06-02
        • 2018-02-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多