Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 08.02.2015, 17:17
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,501

freee,
1. UB на то и UB, что оно Undefined. Во всех существующих браузерах вернётся первый элемент с таким id, да. НО совершенно не факт что завтра не появится новый браузер который будет возвращать последний. Или вообще рандомный. И никто ему не запретит так делать ибо UB.
Потому не вижу смысла удалять это уточнение.

2. Исторически вынесение идентификаторов в глобал изначально было стандартом, потом было исключено из стандарта и вроде даже(не уверен) из некоторых браузеров, и с html5 вернулось в стандарт.
Мнения на этот счёт разные, однако бесконтрольное засорение глобальной области видимости среди js-программистов считается моветоном. Некоторые даже специально используют идентификаторы содержащие символы невозможные в переменных, дабы избежать замусоривания. Например:
<input type="text" id=":textfield">

Так или иначе я бы не назвал это "ошибками в учебнике". Максимум недостаточная освещённость вопроса и то спорно.
__________________
29375, 35

Последний раз редактировалось Aetae, 08.02.2015 в 17:21.
Ответить с цитированием
  #12 (permalink)  
Старый 08.02.2015, 17:28
Аспирант
Посмотреть профиль Найти все сообщения от freee
 
Регистрация: 05.02.2015
Сообщений: 51

Сообщение от Aetae
Некоторые даже специально используют идентификаторы содержащие символы невозможные в переменных, дабы избежать замусоривания. Например:
Возможно, это ведет к тормозам, так как на уровне реализации эти случаи обрабатываются, видимо, отдельно. Неизвестно, какую цепочку ифов проходит каждое такое "объявление"
Кроме того, поиски getElementById, возможно, используют все те же глобальные переменные. А querySelector с решеткой использует getElementById... И так далее, дальше в лес - больше дров.

Последний раз редактировалось freee, 08.02.2015 в 17:38.
Ответить с цитированием
  #13 (permalink)  
Старый 08.02.2015, 17:37
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,501

freee, не там тормоза ищите. getElementById работает очень быстро. Это не может стать бутылочным горлышком ни в одном разумном случае.
__________________
29375, 35
Ответить с цитированием
  #14 (permalink)  
Старый 08.02.2015, 17:43
Аспирант
Посмотреть профиль Найти все сообщения от freee
 
Регистрация: 05.02.2015
Сообщений: 51

Aetae,
Кстати, нет, щас проверил, никуда они не деваются, они просто недоступны в литеральной нотации, так что это вдвойне глупо
<html>
<head>
</head>
<body>
 
<div id=":foo">foo</div>
 
<script>

alert(window[":foo"])



</script>
 
</body>
</html>
Ответить с цитированием
  #15 (permalink)  
Старый 08.02.2015, 17:47
Аспирант
Посмотреть профиль Найти все сообщения от freee
 
Регистрация: 05.02.2015
Сообщений: 51

Сообщение от Aetae
getElementById работает очень быстро
Я предполагаю, что он работает быстро как раз потому, что ему не надо производить каждый раз поиск по документу, он просто берет переменную из глобала, то есть вызов document.getElementById("element") эквивалентен вызову window["element"], или даже просто element. Это и есть причина его быстроты. Но это всего лишь предположение.
Ответить с цитированием
  #16 (permalink)  
Старый 08.02.2015, 17:52
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,501

freee, оно не верно. В глобале лишь ещё одна ссылка.

P.S. Не надо "гадать". Никогда. Интересно как работает - смотри спецификацию или код движка.
__________________
29375, 35
Ответить с цитированием
  #17 (permalink)  
Старый 08.02.2015, 17:58
Аспирант
Посмотреть профиль Найти все сообщения от freee
 
Регистрация: 05.02.2015
Сообщений: 51

Сообщение от Aetae
оно не верно. В глобале лишь ещё одна ссылка.
Я не понял, что не верно? В глобале одна ссылка, да, в данном случае, ":foo", как это противоречит тому что я сказал?
Ответить с цитированием
  #18 (permalink)  
Старый 08.02.2015, 18:06
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,501

freee, всё сложнее и проще. Нет никакого смысла нативному коду лезть в javascript'овский глобал.
__________________
29375, 35
Ответить с цитированием
  #19 (permalink)  
Старый 08.02.2015, 18:13
Аспирант
Посмотреть профиль Найти все сообщения от freee
 
Регистрация: 05.02.2015
Сообщений: 51

Сообщение от Aetae
freee, всё сложнее и проще. Нет никакого смысла нативному коду лезть в javascript'овский глобал.
document.getElementById вызывается из JS. Для поиска элемента у него два варианта: дернуть какой то нативный модуль, чтобы тот произвел поиск по документу (условно говоря), и вернул ему результат. Это, сконей всего, дорогая операция, так как лишний рантайм. Другой вариант -- просто воспользоваться готовой ссылкой в js, это ничего не стоит, поскольку получаем мы в итоге все ту же ссылку, выбор, по-моему, очевиден.
Ответить с цитированием
  #20 (permalink)  
Старый 08.02.2015, 18:22
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,501

Ваше представление о том как всё работает крайне ошибочно и наивно. Дискутировать никакого желания у меня нет.
Лет через пять, если не завяжете с этим делом, будете со смехом читать свои текущие посты.
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
firebug пишет ошибка invalid range in character class Dim@ Общие вопросы Javascript 5 10.05.2012 16:52
ошибка NS_ERROR_DOM_SECURITY_ERR h0kum Events/DOM/Window 2 18.12.2010 20:01
Непонятная ошибка в IE6 Servest Internet Explorer 14 10.10.2010 13:19
То-ли лыжи не едут, толи... возможно ошибка в коде. AzriMan Общие вопросы Javascript 19 18.05.2009 16:07
IE: неизвестная ошибка выполнения _Kpot_ Internet Explorer 1 03.04.2008 11:00