Странные операторы JavaScript

#javascript #jquery #operators

#javascript #jquery #операторы

Вопрос:

У меня небольшая проблема с оператором. У меня есть число, которое либо увеличивается, либо вычитается в зависимости от ввода ключа. Странная вещь заключается в том, что операторы = 1 и = 11 буквально добавляют числа к статическому числу: 60 становится 601 и 6011 вместо 61 и 71.

Вот код, поэтому примите во внимание, что статическое число равно 60:

 switch(e.keyCode) {
    case 37:
        boxID -= 1;
        break;
    case 38:
        boxID -= 11;
        break;
    case 39:
        boxID  = 1; // Becomes 601
        break;
    case 40:
        boxID  = 11; // Becomes 6011
        break;
}
  

Комментарии:

1. как вы определяете boxID? среда выполнения javascript считает, что это строка

2. Я определяю boxID следующим образом, где идентификатор является номером 60 элемента списка: var boxID = $('li.selected').attr('id');

3. затем следуйте совету cwolves var boxId = parseInt($(«li.selected»).attr(«id»))

4. Придирка: числовой идентификатор недопустим, см. w3.org/TR/html401/types.html#type-id

Ответ №1:

boxId в вашем случае это строка. Сначала преобразуйте его в число, используя parseInt(boxId) или просто boxId << 0

-= Работает потому, что у него есть только одна функция (вычитание с использованием математики), поэтому boxId преобразуется к числу перед операцией. перегружен в JavaScript для обозначения «конкатенации строк ИЛИ математического сложения», поэтому, если boxId это строка, он выполняет операции со строками.

Комментарии:

1. Не забудьте использовать необязательный параметр radix и вместо этого выполните parseInt(boxId, 10) . Это предотвращает обработку «010» как восьмеричного числа.