Как видно из дальнейших исследований, в моем O'Reilly JavaScript Pocket Reference я обнаружил, что есть параграф, в котором говорится:
null
( и не определено )
Ключевое слово JavaScript null
- это специальное значение, которое указывает «нет значения». Если переменная содержит null
, вы знаете, что она не содержит допустимого значения любого типа. В JavaScript есть еще одно специальное значение: неопределенное значение. Это значение, возвращаемое при использовании необъявленной или неинициализированной переменной или при использовании несуществующего свойства объекта. Нет ключевого слова JavaScript для этого значения.
После некоторого тестирования с предупреждением (dest.onchange) я обнаружил, что Firefox не жаловался на каждый вызов dest.onchange()
, а только те, которые были ошибками ( undefined ). Очевидно (Grrrr!) Firefox не получил памятку: [ Нет ключевого слова JavaScript для этого значения. ]
Если я изменю свой код для проверки на dest.onchange !== undefined
, тогда Firefox будет доволен, но Safari, Opera и Chrome FAIL на тесте. Если я изменю код, как показано ниже, он будет работать во всех четырех браузерах.
if ( (dest.onchange !== null) // test for safari, chrome, opera
&& (dest.onchange !== undefined) ) { // test for firefox
//we have an onchange function, so let's do it!
dest.onchange();
}
И мне пришлось потратить 8 часов, пытаясь понять, почему Firefox не играет хорошо.