JavaScript и почему заглавные буквы иногда работают, а иногда нет
-
01-07-2019 - |
Вопрос
В Notepad++ я писал файл JavaScript, и что-то не сработало:при нажатии кнопки должно было отображаться предупреждение, но оно не работало.
Я использовал плагин автозаполнения, поставляемый с Notepad++, который предоставил мне onClick
.
Когда я сменил столицу C
до маленького c
, это сработало.
Итак, прежде всего, просматривая функции автодополнения, я заметил множество функций, использующих заглавные буквы.
Но когда ты меняешься getElementById
к getelementbyid
, вы также получаете ошибку, и, что еще хуже, в моем школьном справочнике все написано заглавными буквами, но все решения написаны маленькими буквами.
Так что же такого в JavaScript и его избирательном характере в отношении того, какие функции могут содержать заглавные буквы, а какие нет?
Решение
Javascript - это ВСЕГДА чувствителен к регистру, html — нет.
Звучит так, будто вы говорите о том, являются ли атрибуты HTML (например,onclick) чувствительны или не чувствительны к регистру.Ответ заключается в том, что атрибуты не чувствительны к регистру, а способ доступа к ним через DOM.Итак, вы можете сделать это:
<div id='divYo' onClick="alert('yo!');">Say Yo</div> // Upper-case 'C'
или:
<div id='divYo' onclick="alert('yo!');">Say Yo</div> // Lower-case 'C'
но через DOM вы должны использовать правильный регистр.Итак, это работает:
getElementById('divYo').onclick = function() { alert('yo!'); }; // Lower-case 'C'
но вы не можете сделать это:
getElementById('divYo').onClick = function() { alert('yo!'); }; // Upper-case 'C'
РЕДАКТИРОВАТЬ:CMS подчеркивает, что большинство методов и свойств DOM находятся в верблюдЧехол.Единственным исключением, которое приходит на ум, являются свойства обработчика событий, которые обычно считаются неправильный способ привязки к событиям в любом случае.Предпочитаю использовать addEventListener
как в:
document.getElementById('divYo').addEventListener('click', modifyText, false);
Другие советы
Некоторые объекты в IE не всегда чувствительны к регистру, включая некоторые/большинство/все элементы ActiveX. Почему оба XHR.onReadyStateChange и XHR.onreadystatechange будет нормально работать в IE5 или IE6, но только последний будет работать с родным XMLHttpRequest объект в IE7, FF и т. д.
Но краткая справка для "стандартный" Корпус API:
- ВЕРХНИЙ РЕГИСТР - Константы (вообще символические, т.к. константа не поддерживается глобально)
- С заглавной буквы - Классы/функции объектов
- строчные буквы - События
- верблюдЧехол - все остальное
Никаких 100% гарантий.Но с точки зрения большинства это верно.
Почти все методы JavaScript API вызываются с помощью нижнийCamelCase имена, а JavaScript чувствителен к регистру
Javascript должен всегда учитывайте регистр, но я видел случаи в Internet Explorer, когда он допускал все прописные буквы для некоторых имен функций, но не для других.Я думаю, что это ограничивается функциями, которые также существуют в Visual Basic, поскольку между интерпретаторами существует некоторое странное родство.Очевидно, что такого поведения следует избегать, если, конечно, вы не намерены создавать код, который работает только в одном браузере :)