#javascript
#javascript
Вопрос:
var str;
var displayedNum;
for (i in imgURLArray){
str = "<li photonum=" i ">" "<a>" (1 i) "</a>" "</li>";
$("ul.selection-list").append(str);
}
Мне нужно сделать это в цикле, но в результате выводится «11» вместо «2», потому что он преобразуется в строку перед добавлением.
У меня та же проблема, если я пытаюсь выполнить сложение вне строки и сохранить также в переменной, она все равно преобразуется в строку вместо выполнения сложения.
Число (1 1) по-прежнему сначала преобразуется в строку, прежде чем превращаться в число, поэтому получается 11.
Комментарии:
1. Это решит вашу проблему:
... 1 i ...
Ответ №1:
Используйте круглые скобки:
var str = "foobar" (1 i) "other stuff";
У меня та же проблема, если я пытаюсь выполнить сложение вне строки и сохранить также в переменной, она все равно преобразуется в строку вместо выполнения сложения.
Этого не должно быть. Я предполагаю, что вы и там делаете что-то не так.
Обновление: Похоже, что вы преобразуете i
в строку где-то в коде, который вы не публиковали.
Не используйте для перебора массива for..in
Обновление 2:. Используйте обычный for
цикл, если это действительно массив:
for(var i = 0, l = imgURLArray.length; i < l; i )
Но если это объекты:
for...in
всегда будет задан i
в виде строки (поскольку он перебирает свойства объекта, которые не всегда являются целыми числами). Это означает, что вам придется преобразовать, i
прежде чем выполнять какое-либо добавление:
... (1 ( i)) ...
Обновление 3:
Вам не всегда нужно использовать такой «явный» цикл for. Например, вы можете перемещаться по массиву в обратном порядке, что делает заголовок короче:
for (var i = imgURLArray.length; i--; ) {
str = "<li photonum=" i ">" "<a>" (1 i) "</a>" "</li>";
$("ul.selection-list").prepend(str);
}
Комментарии:
1. @BenB.: Тогда, пожалуйста, опубликуйте больше вашего кода. Это работает: jsfiddle.net/fkling/XfDwd Я предполагаю, что вы где-то конвертируете
i
в строку.2. for…in установит i в виде строки? Что в этом рационального??
3. @BenB.:
for...in
используется для перебора свойств объектов, таких как:obj = {foo: 'bar'}; for(var i in obj){console.log(obj[i]}
. Очевидно, чтоfoo
не является целым числом.4. @Ben Вы уверены, что свойства
imgURLArray
являются числами, а не строками?5. Хорошо, хорошо прочитаем это на for…in . Думаю, с этого момента я никогда не буду это использовать… очень плохо… Я предпочитаю это явным циклам.
Ответ №2:
Попробуйте обернуть числа в Number()
Нравится:
var i = 1;
var str = "foobar" Number(1 i) "other stuff";
Комментарии:
1. Пытается преобразовать параметры в виде чисел, а не складывать их вместе в виде строк.
2. @c-smile
Number(x)
приводит значениеx
к типу Number.3. Нет. Сначала преобразуется в строку, поэтому она преобразуется в число после объединения «строки», например, Число (1 1) = 11
4. У меня все нормально работает? Мой вывод был: foobar2 other stuff
5. @Marty Wallace: если ‘i’ — это число, то результатом number number также является число. В чем тогда смысл
Number(number)
этого?
Ответ №3:
var str = "foobar" (1 i) "other stuff";
Ответ №4:
Вы могли бы просто использовать метод parseInt:
var str = "foobar" (parseInt(1 i)) "other stuff";
Ответ №5:
Причина связана с вашим циклом:
for (i in imgURLArray){
При этом выполняется итерация по всем именам свойств imgURLArray
в виде строк. Итак, вам нужно будет использовать Number()
для преобразования i
в целое число:
str = "<li photonum=" i ">" "<a>" (1 Number(i)) "</a>" "</li>";