循环字符串JavaScript的基础

时间:2015-08-02 22:38:56

标签: javascript for-loop

这件事已经让我伤了一个小时。我正在尝试对字符串执行简单的for循环,并返回当前字符和下一个字符。

var mystring = "abcdef";

for (x in mystring) {
   if (mystring[x + 1]) {
      console.log(x + ": " + mystring[x] + mystring[x + 1]);
   }
   else {
      console.log("You've reached the end of the string");
   }
}

在循环的每次迭代中,“mystring [x + 1]”为false。虽然我希望它对于字符串的前五个字符是正确的。这里发生了什么?有什么关于JavaScript的东西我不明白吗?

1 个答案:

答案 0 :(得分:10)

private void treeView_Loaded(object sender, RoutedEventArgs e) { //don't know why, but in Windows 10 if this code is as XAML, the app falls with a ComExcpetion //so the corresponding XAML should be commented out like this: //... //<controls:TreeView.ItemTemplate> // <DataTemplate> // <!-- <data:DataTemplateExtensions.Hierarchy> // <data:HierarchicalDataTemplate ItemsSource="{Binding Folders}" /> // </data:DataTemplateExtensions.Hierarchy> --> // <Grid> //... WinRTXamlToolkit.Controls.Data.DataTemplateExtensions.SetHierarchy(treeView.ItemTemplate, new WinRTXamlToolkit.Controls.Data.HierarchicalDataTemplate { ItemsSource = new Windows.UI.Xaml.Data.Binding { Path = new PropertyPath("Folders") } }); } 用于循环对象的可枚举属性的名称。属性名称始终为字符串*。 for-in使用串联生成字符串(例如,string + number"1" + 1,而不是"11")。

因此,如果您首先将属性名称转换为数字,那么它可能最常起作用:

2

...但我会用

x = +x; // Convert to number
if (mystring[x + 1]) {

...来代替。如果我需要支持旧的浏览器,我还会使用for (x = 0; x < mystring.length; ++x) { 而不是.charAt(...)来获取角色(但我认为那些不支持索引到字符串的浏览器现在已经相当死了)。

只有[...]的实例:

x = +x
var mystring = "abcdef";

for (x in mystring) {
   x = +x;
   if (mystring[x + 1]) {
      snippet.log(x + ": " + mystring[x] + mystring[x + 1]);
   }
   else {
      snippet.log("You've reached the end of the string");
   }
}

* “属性名称始终为字符串”在ES5中也是如此。在ES6 +中,它们也可能是<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>个实例,但Symbol不会访问非字符串的实例。这与此无关,但我不想在那里留下这样的声明......: - )