JavaScript и почему заглавные буквы иногда работают, а иногда нет - PullRequest
7 голосов
/ 18 сентября 2008

В Notepad ++ я писал файл JavaScript, и что-то не работало: при нажатии кнопки должно было отображаться предупреждение, но оно не работало.

Я использовал плагин автозаполнения, поставляемый с Notepad ++, который подарил мне onClick.

Когда я сменил прописную C на маленькую c, это сработало.

Итак, прежде всего, когда я смотрел на функции в автозаполнении, я заметил много функций, использующих заглавные буквы.

Но когда вы изменяете getElementById на getelementbyid, вы также получаете ошибку, и, что еще хуже, в моем школьном справочнике все написано заглавными буквами, а все решения сделаны маленькими буквами.

Так что же такое с JavaScript и его избирательным характером, в отношении которого функции могут содержать заглавные буквы, а какие нет?

Ответы [ 4 ]

29 голосов
/ 18 сентября 2008

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 находятся в camelCase . Единственное исключение, которое приходит на ум, - это свойства обработчика событий, которые обычно считаются неправильным способом прикрепления к событиям . Предпочитаю использовать addEventListener как в:

document.getElementById('divYo').addEventListener('click', modifyText, false);
6 голосов
/ 18 сентября 2008

Некоторые объекты IE не всегда чувствительны к регистру, включая некоторые / большинство / все ActiveX - почему оба XHR.onReadyStateChange и XHR.onreadystatechange будут работать нормально в IE5 или IE6, но только последний будет работать с собственным XMLHttpRequest объектом в IE7, FF и т. Д.

Но краткий справочник по корпусу API " standard ":

  • UPPERCASE - Константы (обычно символические, поскольку const не поддерживается глобально)
  • С заглавной буквы - Классы / Функции объектов
  • строчные - События
  • camelCase - все остальное

Нет 100% гарантии. Но в большинстве случаев это точно.

1 голос
/ 18 сентября 2008

Javascript должен всегда быть чувствительным к регистру, но я видел случаи в Internet Explorer, где он допускает все прописные буквы для некоторых имен функций, но не для других. Я думаю, что он ограничен функциями, которые также существуют в Visual Basic, так как между интерпретаторами существует некоторый странный инбридинг. Очевидно, что такого поведения следует избегать, если, конечно, вы не намерены создавать код, который запускается только в одном браузере:)

1 голос
/ 18 сентября 2008

методы JavaScript API почти все вызываются с lowerCamelCase именами, а JavaScript чувствителен к регистру

...