我有一段JavaScript代码使用for循环来反转字符串。但是,我想知道是否可以使用for in循环,我将如何进行呢?
function reverse(str){
var reversedString = '';
for (var i = str.length - 1; i >= 0; i--){
reversedString = reversedString + str[i];
}
return reversedString;
}
alert(reverse('hello'));
来自MDN Docs
for ... in不应该用于迭代索引顺序很重要的数组。
数组索引只是具有整数名称的可枚举属性,并且与一般对象属性相同。无法保证for ... in将以任何特定顺序返回索引。 for ... in循环语句将返回所有可枚举属性,包括具有非整数名称和继承的属性。
因为迭代的顺序是依赖于实现的,所以迭代数组可能不会以一致的顺序访问元素。因此,在迭代访问顺序很重要的数组时,最好使用带有数字索引(或Array.prototype.forEach()或for ... of循环)的for循环。
let iterable = '1234567';
String.prototype.hello = "hello"; // doesn't affect
let reversed = "";
for (let value of iterable) {
reversed = value + reversed;
}
console.log(reversed);
Feature Chrome Edge Firefox Internet Explorer Opera Safari
Basic support 38 12 131 No 25 8
打破for..in
(见你好匍匐)
let iterable = '1234567';
String.prototype.hello = "hello";
let reversed = "";
for (let index in iterable) {
reversed = iterable[index] + reversed;
}
console.log(reversed);
无需用于
'mystring'.split('').reverse().join('')
在这种情况下,你不应该使用for...in
。 for...in
设计用于迭代对象文字,而不是字符串或数组。
[...'mystring'].reverse().join('')
Array.from('mystring').reverse().join('')
我建议你使用扩展语法或Array.from
将字符串转换为数组而不是.split('')
,因为split('')
在多字节unicode字符的情况下不起作用。
console.log([...'\uD83D\uDE80']);
console.log('\uD83D\uDE80'.split(''));