for循环中的变量是一个字符串
Variable in for loop is a string
我不确定这是否是正常的行为,但是运行这个:
for (var i in [1, 2, 3]) {
console.log(i + 1);
}
结果如下:
// 01
// 11
// 21
谁能解释一下,为什么在这种情况下var i
被视为字符串,而不是如果我做for (var i = 0; i < [1, 2, 3].length; i++)
?
很可能是因为在这个for循环样式(for..in)中,它将i
视为键,并且由于对象中的键通常是字符串(是的,数组是javascript中的一种对象类型),它将其视为字符串。
parseInt(i)
在这种情况下工作,但为了良好的编程实践,您可能希望使用类似于以下的for
循环:
var array = [1, 2, 3];
for (var i = array.length - 1; i >= 0; i--) {
// do work with each array element here
}
原因是for .. in
迭代对象属性("键"),即使对于数组也是如此。这里的"键"是数组的"索引"但它仍然只是对象键。因为所有的对象键都是字符串,所以i
得到一个字符串值。
我想你想要的是数组的值,而不是键。如果你不能使用ES6, Xorifelse的答案是有效的,但如果你可以,有for ... of
,正如你可能想象的那样工作:
for (let i of [1, 2, 3]) {
console.log(i + 1);
}
在ES5及以上版本中也有Array.prototype.forEach
:
[1, 2, 3].forEach(function(value, index) {
console.log(value + 1);
});
使用in
关键字循环遍历对象中的每个键,这些都是字符串类型,当对字符串使用+
运算符时,将导致它执行连接赋值。
如果要执行算术赋值,操作符的左值和右值必须是整型。一种解决方案是尝试将字符串解析为整数:
console.log(parseInt("0") + 1); // 1
然而…
你应该循环值而不是
var data = [1, 2, 3];
for(var key in data){
console.log('a: data['+ key + '] = ' + data[key]);
}
for (var i = 0; i < data.length; i++) {
console.log('b: data['+ i + '] = ' + data[i]);
}
data.forEach(function(value, index){
console.log('c: data[' + index + '] = ' + value);
});
您可以使用ES6方法来单独遍历值:
for(let v of [1, 2, 3]) {
console.log(v);
}
这种方法的缺点是不兼容旧的android设备,因为它是一个新的标准。
如果你正在使用jQuery,你也可以看看$。
$.each([1, 2, 3], function(index, value) {
console.log( index + ": " + value );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
这是因为i
是每个元素的键/索引,它是字符串类型。因此,您实际上是在连接string和int -结果是string。
这是因为使用"in"关键字遍历对象的键,而不是数组索引。但是在本例中,由于对象是一个数组,因此其中项的键是索引。最后,for. in循环中的键是字符串。
如果你需要数组的数字索引,你需要使用常规的for循环。
var array = [0, 1, 2];
for (var i = 0; i < array.length; i++) {
console.log(i + 1);
}
当您使用for...in
循环时,您正在访问对象中的每个键。数组是对象,它们的键是数字,但通常将对象键视为字符串。
如果要将键转换为int,可以使用parseInt
函数。链接!
for (var i in [1, 2, 3]) {
console.log(parseInt(i) + parseInt(1));
}
- NodeJS在一个较大的字符串中获取一个字符串的索引
- Javascript:用while循环在给定的count参数中重复一个字符串
- 如何使用另一个字符串作为模板从字符串中提取数据
- 如何检查一个字符串的所有字符是否都存在于另一个字符串中
- 从表单中动态生成一个字符串,传递给通过AJAX加载的PHP文件
- 我可以使用JS一次使用JSON数组中的一个字符串吗
- 将字符串转换为数组使用javascript更新一个值并返回一个字符串
- 如何在JavaScript中每隔第n个字符分割一个字符串
- 我需要使用什么语法来向一个对象的成员添加一个临时数组,该成员等同于一个字符串的通用列表
- 使用Jquery从所有元素创建一个字符串
- 在Javascript中截断一个字符串,混淆了最后两个测试字符串
- Javascript使用本地存储,回调对象并用Json更改为一个字符串以用于填充函数
- 将一个字符串数组解析为一个新的数组javascript
- 我可以在两个javascript文件之间传递一个字符串吗?
- 如何拆分一个字符串,然后将它们与另一个字符串匹配
- get没有方法“writefile”,即使输入是一个字符串
- 将 url 中的一个字符串替换为另一个字符串
- 如何在 javascript 中使用正则表达式在其他两个字符串之间找到一个字符串
- “JSON.parse(str)”返回“意外令牌c”,但str是一个字符串
- 递归查找嵌套数组中的最后一个字符串