суббота, 6 ноября 2010 г.

Осторожно, динамическая типизация JavaScript

Недавно возникла такая проблема - все браузеры, кроме Internet Explorer (чудеса случаются), получая параметра от элемента, считали этот параметр строкой, а не числом. Это происходило примерно в следующей ситуации:

for (var i = 0; i < objects.length; i++) //objects - строки таблицы, например
{
   objects[i].setAttribute('i', i); //i сейчас точно является числом
}

...

for (var i = 0; i < objects.length; i++) //objects - те же строки таблицы
{
   value[i] = objects[i].getAttribute('i') + 1; //что окажется в value[i]?
}

Internet Explorer в value[i] запишет 1, 2, 3 и т.д. Другие браузеры запишут туда 01, 11, 21 и т.д. Вроде, результат очевиден: к выражению содержащему только цифры прибавляется число в явном виде - должно получиться число. Однако это понимает только Internet Explorer.

Если возникнет подобный случай, сразу используйте функцию parseInt(objects[i].getAttribute('i')).

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

Отправить комментарий

Мои записи и на Я.ру — levelost!