将int推送到数组时自动将int转换为字符串

时间:2018-06-11 20:27:22

标签: javascript arrays

假设我有一个这样的数组:

let array = [1, 45, 14, 4]

当我查找这些整数的类型时,我得到一个数字类型(正常:完全符合我的预期)

现在假设我声明我的数组:

let array = [].push(1) or [].concat([1,2,3])

现在,如果我尝试使用“typeof”获取类型,我会得到一种字符串

  

在下面的片段中,数组中的所有整数都是字符串类型。一世   不明白为什么!

PS:我需要严格的类型

var array = [1,2,3,4,5];
for (item in array) { console.log(typeof item); }

4 个答案:

答案 0 :(得分:1)

他们是数字



var array = [1,2,3,4,5];
array.push(6);
array = array.concat([7,8,9])
for(var i = 0; i < array.length; i++) {
  console.log(typeof array[i])
}
&#13;
&#13;
&#13;

如果您检查样本中的item值,您会发现它不是数组项,而是它们的索引,这就是for/in的工作原理迭代一个对象(实际上也是一个数组)

&#13;
&#13;
var array = [1,2,3,4,5];
for(item in array) {
  console.log(typeof item, "type, and item value is: " + item)
}
&#13;
&#13;
&#13;

答案 1 :(得分:1)

这里for..in循环遍历键,它是字符串格式的元素索引。因此,这里的类型是每个元素的键的字符串。

虽然typeof数组元素显然是数字。请在下面的代码中查看:

var array = [1,2,3,4,5];
for(item in array) {
    console.log(typeof item, item, typeof array[item], array[item])
}

答案 2 :(得分:1)

正如其他人所述,for...in语句枚举对象的属性名称(键),这里string

正如CRice建议您可以使用forEach方法枚举array的成员。

var array = [1,2,3,4,5];
array.forEach(function(item){
   console.log(typeof item)
});

答案 3 :(得分:1)

你犯了一个小错误,for(i in arr)不给你项目而是索引

&#13;
&#13;
var array = [1, 2, 3, 4, 'a'];

for(idx in array){
//console.log(typeof array[i])
console.log('index:'+idx+
' item:'+array[idx]+
' typeof:'+typeof array[idx])
}
&#13;
&#13;
&#13;

或者您可以使用for循环来直接访问项目:

&#13;
&#13;
var array = [1, 2, 3, 4, 'a'];
for (var idx = 0; idx < array.length; idx++) {
  console.log(array[idx]+':'+typeof array[idx])
}
&#13;
&#13;
&#13;

第三个选项是使用forEach():

&#13;
&#13;
var array = [1, 2, 3, 4, 'a'];

array.forEach( item=> console.log(item+':'+typeof item) )
&#13;
&#13;
&#13;