我被告知不要for...in在JavaScript中使用数组.为什么不?
我有一个关于JavaScript数组的通用问题.JavaScript中的数组索引是否作为字符串内部处理?我读到某处,因为数组是JavaScript中的对象,索引实际上是一个字符串.我对此感到有点困惑,并且对任何解释都很高兴.
我刚注意到:
//IN CHROME JS CONSOLE
parseInt("03010123"); //prints: 3010123
//IN NODE.JS
parseInt("03010123"); //prints: 790611
Run Code Online (Sandbox Code Playgroud)
由于两者都基于V8,为什么同样的操作会产生不同的结果?
这个Javascript逻辑让我困惑.我正在创建一个数组并将其第一个元素设置为数字.当我使用"for"循环进行交互时,Javascript将数组键转换为字符串.为什么?我希望它留下一个数字.
stuff = [];
stuff[0] = 3;
for(var x in stuff) {
alert(typeof x);
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Google Chrome进行此测试:与直觉相反,第一个循环警告"字符串"3次,而第二个循环警告"数字"3次.
numarray = [1, 2, 3];
//for-each loop
for(num in numarray)
alert(typeof(num));
//standard loop
for(i=0; i<numarray.length; i++)
alert(typeof(numarray[i]));
Run Code Online (Sandbox Code Playgroud)
我期待两个循环警告"数字"3次.如何在Javascript中实现第一个循环?换句话说,如果for-each是语法糖,使用标准循环的等价物是什么?
另外,有没有办法使用标准循环迭代对象的命名空间?我希望使用第二种循环来触摸某些对象的方法和属性中的每一个.我是Javascript的新手,非常感谢任何帮助,谢谢.
这是在Chromium 78中:
for (var i in [1,3,5]) console.log(i+1)Run Code Online (Sandbox Code Playgroud)
现在,我希望for (var i in [1,3,5]) console.log(i+1)输出1、2、3,因为它i应该是一个索引值。我知道MDN文档提到在这种情况下顺序可能奇怪,但是为什么要进行类型转换?
我正在for...in用 javascript编写一个简单的循环,想知道为什么key是字符串而不是数字?
为什么会这样,我可以将其更改为数字吗?
var array = ["a", "b", "c"];
for (var key in array) {
console.log(typeof key); //string
console.log(key + 1); //expected output : 01, 11, 21...
}
Run Code Online (Sandbox Code Playgroud)