我有一段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'));
答案 0 :(得分:6)
来自MDN Docs
for ... in不应该用于遍历索引所在的数组 订单很重要。
数组索引只是可枚举的属性 整数名称,并且与一般对象相同 属性。无法保证......中将返回 任何特定顺序的索引。 for ... in循环语句将 返回所有可枚举属性,包括非整数属性 名称和继承的名称。
因为迭代的顺序是依赖于实现的,所以迭代 在数组上可能无法以一致的顺序访问元素。因此 最好使用带有数字索引的for循环(或 迭代时,Array.prototype.forEach()或for ... of循环) 访问顺序很重要的数组。
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);
答案 1 :(得分:1)
无需在
中使用'mystring'.split('').reverse().join('')
答案 2 :(得分:1)
在这种情况下,您不应该使用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(''));