Почему НЕ добавление "+" "после математической операции в javascript делает подсчет длины новых переменных неопределенным? - PullRequest
2 голосов
/ 11 января 2011

Я считаю количество часов, а затем вычитаю его на 12, если оно превышает 12 (так что 13:00 не отображается как 13:00).Ниже приведена часть моего кода javascript.

else if (hours[0] >= 13) {
    hours[0] = hours[0] - 12 + "";
}

Позже в коде, когда я пытаюсь подсчитать длину переменной массива 'hours [0]', она кажется неизвестной, если у меня есть этот кодвместо этого:

else if (hours[0] >= 13) {
    hours[0] = hours[0] - 12;
}

и я не понимаю почему.Может ли кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

4 голосов
/ 11 января 2011

Вычитание hours[0] - 12 возвращает число, независимо от того, содержит ли hours[0] число или строку, содержащую число, например, "13". Добавление + "" преобразует результат вычитания в строку. Число не имеет длины в javascript, и, следовательно, вызов члена длины для числа вернет undefined.

2 голосов
/ 11 января 2011

Если вы добавите "" к выражению, вы преобразуете результат в строку , и строки имеют свойство .length.Числа вместо этого не имеют .length, поэтому то, что вы испытываете, является нормальным ...

var x = 42;         // this is a number
var y = x + "";     // y is a string ("42")
var z1 = x.length;  // this is undefined (numbers have no length)
var z2 = y.length;  // this is the lenght of a string (2 in this case)
...