【问题标题】:Why is the index of an array a string in the below code? [duplicate]为什么数组的索引在下面的代码中是一个字符串? [复制]
【发布时间】:2018-08-21 08:30:24
【问题描述】:

var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
for(var index in arrayOfNumbers){
   console.log(index+1);
}

此示例代码的输出是。
01
11
21
31
41
51
61

为什么数组的这些索引在 JavaScript 中被视为字符串?

【问题讨论】:

  • 因为那些是字符串。尝试typeof index它返回"string"类型
  • 对象的键总是字符串。
  • 如果你想用 1 添加索引,那么你可以试试这个 console.log(parseInt(index)+1);同意@NinaScholz
  • 是的,for..in 最初是用于对象的,因此返回字符串是明智的,因为对象的键始终是字符串。
  • BTW for...in 循环应避免与数组一起使用。看到这个post

标签: javascript arrays string indexing


【解决方案1】:

来自MDN for...in

注意: for...in 不应用于迭代索引顺序很重要的数组。

... for...in 循环语句将返回所有可枚举的属性, 包括具有非整数名称的名称和继承的名称。

当使用 for...in 时,键总是一个字符串,它所做的只是字符串连接。

你有一个数组,所以最好像这样使用Array.foreach()

var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
arrayOfNumbers.forEach(function(item, index){
     console.log(index + 1); // Here the index is a number!
});

【讨论】:

  • 那是因为对象的键总是字符串,不管是{ 0: "some value" }还是'0': "value value.."
  • 是的,我检查了 typeof,它是一个字符串。我的查询就像在其他语言(如 JAVA)中一样,它会是一个整数,但为什么这些索引在 javascript 中是字符串?
  • @rohitwtbs 因为使用for in 会将您的数组视为对象,并且对象键始终是字符串。
  • @caramba 知道了。
【解决方案2】:

键是一个字符串,因为它是一个对象。在 JavaScript 中有 Object,这就是为什么它的键在字符串中。

您可以通过将字符串转换为int或添加前缀+来实现。

var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
for(var index in arrayOfNumbers) {
  var v = parseInt(index) + 1;
  console.log(v);
}

带前缀

var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
for(var index in arrayOfNumbers) {
  var v = parseInt(index) + 1;
  console.log(v);
}
 var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
 for(var index in arrayOfNumbers){
    var v = +index + 1;
     console.log(v);
  }

【讨论】:

    【解决方案3】:

    不要对数组使用“for in”。 'for in' 用于遍历对象。当您尝试使用数组时,它看起来像这样:

    arr = {
        "0": 1,
        "1": 2,
        "2": 3,
        "3": 4,
        "4": 5,
        "5": 6,
        "6": 78
    }
    

    我希望你正在寻找这个:

    var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
    for(var index=0; index<arrayOfNumbers.length; index++) {
         console.log(index+1);
    }
    

    【讨论】:

      【解决方案4】:

      参考:MDN FOR..IN

      for...in 语句迭代对象的可枚举属性。对于每个不同的属性,可以执行语句。

      var string1 = "";
      var object1 = {a: 1, b: 2, c: 3};
      
      for (var property1 in object1) {
        string1 = string1 + object1[property1];
      }
      
      console.log(string1);

      在您的情况下,索引被称为对象键,它是一个 t 字符串或一个键字符串:{ foo : 'something in universe'}

      看看这里,如果你想要密钥的值:

      var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
      for(var index in arrayOfNumbers) {
          console.log(arrayOfNumbers[index+1]);
      }
      console.log(arrayOfNumbers)

      【讨论】:

        【解决方案5】:

        如 cmets 和一些答案中所述,for in 循环旨在用于对象迭代,并且在 JavaScript 中数组也是对象。所以键将是字符串类型。

        但是,为了您的预期结果,您可以使用以下内容:

        var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
        arrayOfNumbers.forEach(function(num)
        {
            console.log(num+1);
        });
        

        【讨论】:

          【解决方案6】:

          来自 for...in (MDN):

          for...in 语句遍历对象的可枚举属性。

          因此,代码中index 的值将始终返回这些属性的名称。在数组中,这些是索引的名称。

          另外,String 加上 Number 等于 String,这是在 console 中打印的内容。

          【讨论】:

            猜你喜欢
            • 2020-04-08
            • 2017-02-14
            • 2019-11-24
            • 2022-11-27
            • 2013-11-02
            • 1970-01-01
            • 2019-10-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多