jQuery: почему целое число добавляется к переменной, как строка? - PullRequest
1 голос
/ 07 апреля 2011

Итак, я пытаюсь взять переменную, которая увеличивается в выражении for, и добавить к ней целое число ... но по какой-то причине он добавляет целое число, как если бы оно было строкой; другие операции, такие как вычитание или умножение, работают как положено.

Почему это происходит? Редактировать: я добавил всю функцию; проблема в том, где я пытаюсь добавить 2 к переменной x.

Что меня смущает, так это то, что я могу без проблем использовать x, например, в объекте .eq () ...

$(function() {
    $('textarea').bind('paste', function (e){
        inputGroup = $(this).parent();
        var ob = $(this);
        if (e.type == 'paste'){
            setTimeout(function(){
                var data = ob.val();
                var tabbed = data.replace(/\n/g, "\t");
                var cells = tabbed.split("\t");
                for(var x in cells) {
                    foo = x + 2;
                    alert(foo);
                    $(inputGroup).find('input').eq(x).val(cells[x]);
                }
            }, 1);
        }
    });
});

Ответы [ 4 ]

5 голосов
/ 07 апреля 2011

Почему это происходит?

Потому что x - это строка, которая выглядит как число.Сначала приведите Number, и вы получите ожидаемый результат:

"1" + 2 = "12"
Number("1") + 2 = 3

РЕДАКТИРОВАТЬ: Теперь, когда я вижу, вы используете split, чтобы превратить строку в массив, ваша проблема определенно в том, что вы объединяете строки.Сначала приведите к Number, и ваша проблема будет решена.

Да, другие арифметические операции будут работать, поскольку они неявно приводят операнды к числам.Заблуждение, "2" * 3 на самом деле приведет к целому числу 6.Добро пожаловать в Javascript.

-tjw

2 голосов
/ 07 апреля 2011

Без дополнительного кода, в частности инициализации ячеек, я не могу сказать вам точную причину.Но вы можете просто позвонить parseInt() на x, чтобы превратить его в целое число для сложения

for(var x in cells) {
    foo = parseInt(x, 10) + 2;
    $(inputGroup).find('input').eq(foo).val(cells[x]);
}
0 голосов
/ 07 апреля 2011

Как уже упоминалось, x - это строка.Вот почему.

Есть хороший прием для преобразования строк в числа в JavaScript, который не был упомянут:

for(var x in cells) {
  // Without the "var" here, you're setting a global
  //  variable during each loop iteration.
  var foo = +x + 2;

  $(inputGroup).find('input').eq(foo).val(cells[x]);
}
0 голосов
/ 07 апреля 2011

Поскольку + - это конкатенация строк, но для * или / не существует эквивалентного метода String, поэтому при использовании их он приводит значение как число.Просто приведите x в виде целого числа:

for(var x in cells) {
    foo = parseInt(x, 10) + 2;
    $(inputGroup).find('input').eq(foo).val(cells[x]);
}

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10}

...