Чтобы использовать методы и член объекта, вам сначала нужно создать этот объект. Если вы его не создали (переменная, которая должна содержать объект, не инициализируется), но вы пытаетесь использовать его методы или переменные, вы получите эту ошибку.
Иногда вы можете просто забыть инициализировать .
Отредактировано: new не может вернуть значение null, но исключение огня при ошибке. Давно это было на некоторых языках, но не больше. Спасибо @John Saunders за указание на это.
Фактически, только <!--
является действительным javascript. Чтобы закончить комментарий html в javascript, вам действительно нужно использовать //-->
.
В эти дни больше не требуется использовать комментарии HTML в Javascript. Браузеры, которые настолько стара, что не понимают тег <script>
, вряд ли смогут отображать многое на «современном» веб-сайте, и вам не нужно размещать пользователей, которые буквально находятся в браузере с каменным вектором .
Однако, если вы намерены включить свой HTML внутри XML-документа и / или писать x-html, вам придется использовать xml <![CDATA[
и ]]>
корпуса , поскольку различные Javascript-операторы (&
, <
и >
в частности) вызовут ошибки анализа XML без корпусов.
<script>
внутри строк, заданных через innerHTML
, никогда не запускается (в первую очередь потому, что в IE никогда не было, а затем от этого зависели сайты, поэтому, когда другие браузеры реконструировали реализацию innerHTML
, они тоже должны были это сделать). В комментариях HTML есть красная селедка.
Если вам нужно запустить <script>
, вам нужно использовать другой способ вставки узлов (например, createContextualFragment
).
Нет, нет причин их включать. Я регулярно пропускаю эти комментарии и не имею проблем с современными браузерами.
HTML-комментарии в блоках скриптов не нужны в течение многих лет. Опущение их не вызовет никаких проблем.
Это нестандартная функция, которую браузеры и механизмы JavaScript всегда выполняли. В настоящее время он не может быть удален с веб-платформы, так как это нарушит совместимость. Это подробно описано в спецификации JavaScript / Web ECMAScript :
<!--
должно рассматриваться как началоSingleLineComment
- эквивалентно//
.var x = true; <!-- x = false; // note: no syntax error x; // true
-->
в начале строки, необязательно предшествующей пробелу илиMultiLineComment
s, должен рассматриваться какSingleLineComment
- эквивалент//
.BLOCKQUOTE>var x = true; --> x = false; // note: no syntax error x; // true var x = 1; /* multiline comment! x = 2; */ --> x = 3; x; // 1