<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>
	Комментарии: Ошибка JavaScript – TypeError: null is not an object	</title>
	<atom:link href="https://ploshadka.net/typeerror-null-is-not-an-object/feed/" rel="self" type="application/rss+xml" />
	<link>https://ploshadka.net/typeerror-null-is-not-an-object/</link>
	<description>Мир интернет технологий</description>
	<lastBuildDate>Sat, 07 Nov 2020 13:56:20 +0000</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1</generator>
	<item>
		<title>
		Автор: Алекс		</title>
		<link>https://ploshadka.net/typeerror-null-is-not-an-object/#comment-406</link>

		<dc:creator><![CDATA[Алекс]]></dc:creator>
		<pubDate>Sat, 07 Nov 2020 13:56:20 +0000</pubDate>
		<guid isPermaLink="false">https://ploshadka.net/?p=2146#comment-406</guid>

					<description><![CDATA[Предлагаемый список низкоуровневых ошибок в Javascript:

Вместо &lt;strong&gt;ReferenceError: x is not defined&lt;/strong&gt;: 
&lt;strong&gt;Notice: x is not defined in in %s on line %d&lt;/strong&gt; и возврат undefined.

Использование неопределенного индекса массива (вывод в document, передача в функцию): 
&lt;strong&gt;Notice: Undefined index: x in in %s on line %d&lt;/strong&gt;.

Использование переменной или свойства с неопределенным значением (тоже вывод в document, передача в функцию): &lt;strong&gt;Notice: Undefined variable or property: x in in %s on line %d&lt;/strong&gt;.

Вместо &lt;strong&gt;TypeError: Cannot read property of null/undefined&lt;/strong&gt;: &lt;strong&gt;Warning: Cannot read/set  property of null/undefined/boolean in in %s on line %d&lt;/strong&gt; и возврат null или undefined.

Вместо DOMException, появляющихся при обработке DOM объектов - Warning и Notice.
Некорректные математические операции (строка, умноженная на число и т.п.) - &lt;strong&gt;Notice: A non well formed numeric value encountered in in %s on line %d&lt;/strong&gt; и &lt;strong&gt;Notice: A non-numeric value encountered in in %s on line %d&lt;/strong&gt;.

Деление на ноль - &lt;strong&gt;Notice: Division by zero in in %s on line %d&lt;/strong&gt;.

Рассмотрим ES6:
В цикле &lt;strong&gt;for...of&lt;/strong&gt; вместо исключения - &lt;strong&gt;Warning: x is not iterable in in %s on line %d&lt;/strong&gt;.
При пропуске или избытке аргументов функций
&lt;strong&gt;Warning: Function &#039;fun&#039; expects * parameters, * present in in %s on line %d&lt;/strong&gt;

При неправильном использовании BigInt - Warning.
И это не всё!
Также нужны ошибки Deprecated.
Кстати, необязательно использовать notice, достаточно трех типов ошибок: исключение, предупреждение и сообщение об устаревшем коде.]]></description>
			<content:encoded><![CDATA[<p>Предлагаемый список низкоуровневых ошибок в Javascript:</p>
<p>Вместо <strong>ReferenceError: x is not defined</strong>:<br />
<strong>Notice: x is not defined in in %s on line %d</strong> и возврат undefined.</p>
<p>Использование неопределенного индекса массива (вывод в document, передача в функцию):<br />
<strong>Notice: Undefined index: x in in %s on line %d</strong>.</p>
<p>Использование переменной или свойства с неопределенным значением (тоже вывод в document, передача в функцию): <strong>Notice: Undefined variable or property: x in in %s on line %d</strong>.</p>
<p>Вместо <strong>TypeError: Cannot read property of null/undefined</strong>: <strong>Warning: Cannot read/set  property of null/undefined/boolean in in %s on line %d</strong> и возврат null или undefined.</p>
<p>Вместо DOMException, появляющихся при обработке DOM объектов &#8212; Warning и Notice.<br />
Некорректные математические операции (строка, умноженная на число и т.п.) &#8212; <strong>Notice: A non well formed numeric value encountered in in %s on line %d</strong> и <strong>Notice: A non-numeric value encountered in in %s on line %d</strong>.</p>
<p>Деление на ноль &#8212; <strong>Notice: Division by zero in in %s on line %d</strong>.</p>
<p>Рассмотрим ES6:<br />
В цикле <strong>for&#8230;of</strong> вместо исключения &#8212; <strong>Warning: x is not iterable in in %s on line %d</strong>.<br />
При пропуске или избытке аргументов функций<br />
<strong>Warning: Function &#8216;fun&#8217; expects * parameters, * present in in %s on line %d</strong></p>
<p>При неправильном использовании BigInt &#8212; Warning.<br />
И это не всё!<br />
Также нужны ошибки Deprecated.<br />
Кстати, необязательно использовать notice, достаточно трех типов ошибок: исключение, предупреждение и сообщение об устаревшем коде.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Автор: Алекс		</title>
		<link>https://ploshadka.net/typeerror-null-is-not-an-object/#comment-358</link>

		<dc:creator><![CDATA[Алекс]]></dc:creator>
		<pubDate>Tue, 26 May 2020 09:34:03 +0000</pubDate>
		<guid isPermaLink="false">https://ploshadka.net/?p=2146#comment-358</guid>

					<description><![CDATA[Изучил исходный код Chromium на Github и нашел такой код C++
&lt;code&gt;
  /*
  void некая_функция_уведомления(message) {
    сообщить_в_консоли(&quot;Notice: &quot; + message);
  }
  void некая_функция_предупреждения(message) {
    предупредить_в_консоли(&quot;Warning: &quot; + message);
    вывести_в_HTML(&quot;&lt;br /&gt;&lt;b&gt;Warning&lt;/b&gt;: &quot; + message + &quot;&lt;br /&gt;&quot;);
  }
  */
 // ...
 if (selectors.IsEmpty()) {
   // вместо этого кода
    exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError,
                                      &quot;The provided selector is empty.&quot;);
   // написать это:
   /*
     некая_функция_предупреждения(&quot;The provided selector is empty.&quot;);
   */
    return nullptr;
  }
  // ...
  CSSSelectorList selector_list = CSSParser::ParseSelector(
      MakeGarbageCollected&lt;CSSParserContext&gt;(
          document, document.BaseURL(), true /* origin_clean */,
          document.GetReferrerPolicy(), WTF::TextEncoding(),
          CSSParserContext::kSnapshotProfile),
      nullptr, selectors);

  if (!selector_list.First()) {
    // сюда вместо этого кода написать вывод предупреждения
    exception_state.ThrowDOMException(
        DOMExceptionCode::kSyntaxError,
        &quot;&#039;&quot; + selectors + &quot;&#039; is not a valid selector.&quot;);
    /*
      некая_функция_предупреждения(&quot;&#039;&quot; + selectors + &quot;&#039; is not a valid selector.&quot;);
    */
    return nullptr;
  }
&lt;/code&gt;
И еще, если я правильно понял, код, где возвращается элемент или null:
&lt;code&gt;
Element* SelectorQuery::Closest(Element&amp; target_element) const {
  QUERY_STATS_RESET();
  if (selectors_.IsEmpty())
    return nullptr;
  if (needs_updated_distribution_)
    target_element.UpdateDistributionForFlatTreeTraversal();

  for (Element* current_element = &amp;target_element; current_element;
       current_element = current_element-&gt;parentElement()) {
    if (SelectorListMatches(target_element, *current_element))
      return current_element;
  }
  // Здесь должно быть уведомление
  /*
   некая_функция_уведомления(&quot;DOM element &#039;&quot; + selectors + &quot;&#039; not found.&quot;);
  */
  return nullptr;
}
&lt;/code&gt;
Думаю, что хоть вы в C++ и не разбираетесь особо, понятно. Кстати, раз уж пошла такая тема, то напишете статью про распространенные ошибки в Javascript с объяснениями? Заранее спасибо.]]></description>
			<content:encoded><![CDATA[<p>Изучил исходный код Chromium на Github и нашел такой код C++</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">&nbsp; /*<br />
&nbsp; void некая_функция_уведомления(message) {<br />
&nbsp; &nbsp; сообщить_в_консоли(&quot;Notice: &quot; + message);<br />
&nbsp; }<br />
&nbsp; void некая_функция_предупреждения(message) {<br />
&nbsp; &nbsp; предупредить_в_консоли(&quot;Warning: &quot; + message);<br />
&nbsp; &nbsp; вывести_в_HTML(&quot;&lt;br /&gt;&lt;b&gt;Warning&lt;/b&gt;: &quot; + message + &quot;&lt;br /&gt;&quot;);<br />
&nbsp; }<br />
&nbsp; */<br />
&nbsp;// ...<br />
&nbsp;if (selectors.IsEmpty()) {<br />
&nbsp; &nbsp;// вместо этого кода<br />
&nbsp; &nbsp; exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;The provided selector is empty.&quot;);<br />
&nbsp; &nbsp;// написать это:<br />
&nbsp; &nbsp;/*<br />
&nbsp; &nbsp; &nbsp;некая_функция_предупреждения(&quot;The provided selector is empty.&quot;);<br />
&nbsp; &nbsp;*/<br />
&nbsp; &nbsp; return nullptr;<br />
&nbsp; }<br />
&nbsp; // ...<br />
&nbsp; CSSSelectorList selector_list = CSSParser::ParseSelector(<br />
&nbsp; &nbsp; &nbsp; MakeGarbageCollected&lt;CSSParserContext&gt;(<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; document, document.BaseURL(), true /* origin_clean */,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; document.GetReferrerPolicy(), WTF::TextEncoding(),<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CSSParserContext::kSnapshotProfile),<br />
&nbsp; &nbsp; &nbsp; nullptr, selectors);<br />
<br />
&nbsp; if (!selector_list.First()) {<br />
&nbsp; &nbsp; // сюда вместо этого кода написать вывод предупреждения<br />
&nbsp; &nbsp; exception_state.ThrowDOMException(<br />
&nbsp; &nbsp; &nbsp; &nbsp; DOMExceptionCode::kSyntaxError,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &quot;'&quot; + selectors + &quot;' is not a valid selector.&quot;);<br />
&nbsp; &nbsp; /*<br />
&nbsp; &nbsp; &nbsp; некая_функция_предупреждения(&quot;'&quot; + selectors + &quot;' is not a valid selector.&quot;);<br />
&nbsp; &nbsp; */<br />
&nbsp; &nbsp; return nullptr;<br />
&nbsp; }</div></div>
<p>И еще, если я правильно понял, код, где возвращается элемент или null:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">Element* SelectorQuery::Closest(Element&amp; target_element) const {<br />
&nbsp; QUERY_STATS_RESET();<br />
&nbsp; if (selectors_.IsEmpty())<br />
&nbsp; &nbsp; return nullptr;<br />
&nbsp; if (needs_updated_distribution_)<br />
&nbsp; &nbsp; target_element.UpdateDistributionForFlatTreeTraversal();<br />
<br />
&nbsp; for (Element* current_element = &amp;target_element; current_element;<br />
&nbsp; &nbsp; &nbsp; &nbsp;current_element = current_element-&gt;parentElement()) {<br />
&nbsp; &nbsp; if (SelectorListMatches(target_element, *current_element))<br />
&nbsp; &nbsp; &nbsp; return current_element;<br />
&nbsp; }<br />
&nbsp; // Здесь должно быть уведомление<br />
&nbsp; /*<br />
&nbsp; &nbsp;некая_функция_уведомления(&quot;DOM element '&quot; + selectors + &quot;' not found.&quot;);<br />
&nbsp; */<br />
&nbsp; return nullptr;<br />
}</div></div>
<p>Думаю, что хоть вы в C++ и не разбираетесь особо, понятно. Кстати, раз уж пошла такая тема, то напишете статью про распространенные ошибки в Javascript с объяснениями? Заранее спасибо.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Автор: Алекс		</title>
		<link>https://ploshadka.net/typeerror-null-is-not-an-object/#comment-357</link>

		<dc:creator><![CDATA[Алекс]]></dc:creator>
		<pubDate>Mon, 25 May 2020 20:46:53 +0000</pubDate>
		<guid isPermaLink="false">https://ploshadka.net/?p=2146#comment-357</guid>

					<description><![CDATA[В ответ на &lt;a href=&quot;https://ploshadka.net/typeerror-null-is-not-an-object/#comment-355&quot;&gt;Admin&lt;/a&gt;.

Изучил исходный код движка V8 на C++ - тёмный-тёмный лес. Совершенно непонятно, где происходит выбрасывание ошибки типа &quot;x is not defined&quot; или &quot;cannot read property of null&quot;. Поиск мало чего дает. Не нашёл исходного кода методов querySelector и других для работы с DOM. Не найдено исходного кода методов встроенных объектов. Где все это реализовано?]]></description>
			<content:encoded><![CDATA[<p>В ответ на <a href="https://ploshadka.net/typeerror-null-is-not-an-object/#comment-355">Admin</a>.</p>
<p>Изучил исходный код движка V8 на C++ &#8212; тёмный-тёмный лес. Совершенно непонятно, где происходит выбрасывание ошибки типа &#171;x is not defined&#187; или &#171;cannot read property of null&#187;. Поиск мало чего дает. Не нашёл исходного кода методов querySelector и других для работы с DOM. Не найдено исходного кода методов встроенных объектов. Где все это реализовано?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Автор: Алекс		</title>
		<link>https://ploshadka.net/typeerror-null-is-not-an-object/#comment-356</link>

		<dc:creator><![CDATA[Алекс]]></dc:creator>
		<pubDate>Sun, 24 May 2020 18:16:54 +0000</pubDate>
		<guid isPermaLink="false">https://ploshadka.net/?p=2146#comment-356</guid>

					<description><![CDATA[В ответ на &lt;a href=&quot;https://ploshadka.net/typeerror-null-is-not-an-object/#comment-355&quot;&gt;Admin&lt;/a&gt;.

В приведенных примерах бросается исключение. Можно просто не бросать исключение, а писать в консоль или в HTML-код страницы предупреждение и выполнять какое-то действие по умолчанию. При этом обработчик ошибок не будет считать сообщение ошибкой. Например, код:
&lt;code&gt;
var obj = {data: null, foo: &quot;bar&quot;};
console.log(obj.data.data);
console.log(obj.baz.data);
&lt;/code&gt;
должен вывести в консоль null и undefined и два предупреждения:
&lt;code&gt;Warning: Cannot read property &#039;data&#039; of null in...&lt;/code&gt;
&lt;code&gt;Warning: Cannot read property &#039;data&#039; of undefined in...&lt;/code&gt;
В PHP тоже постепенно заменяют Fatal error на исключения, которые сами по себе, если не отловить, Fatal error.
В принципе, несложно написать код на языке C++ (или на каком написан движок для браузеров?), реализующий помимо исключения низкоуровневую ошибку, не трогая остальной код движка. Сами исключения никуда не денутся. Кстати, как устроен Javascript, в двух словах? Просто замена предлагается постепенная. Слишком уж странная логика ошибок у Javascript. Деление на ноль, некорректная математическая операция, вывод неопределенных значений в HTML, обращение к булеву значению как к объекту, вызов функции без аргументов не вызывает даже вывода предупреждающего сообщения, не говоря уж об ошибках. 
Система ошибок Javascript подчиняется каким-то стандартам (IEEE и т.д.)?
TypeScript не рассматриваем, так как он пока не встроен в Javascript. Предлагаемые изменения нужно именно встроить.
Кстати, в Chrome нашел баг: код
&lt;code&gt;document.createElement(null);&lt;/code&gt;
не вызовет ошибки, а создаст DOM элемент null, разумеется, невалидный.]]></description>
			<content:encoded><![CDATA[<p>В ответ на <a href="https://ploshadka.net/typeerror-null-is-not-an-object/#comment-355">Admin</a>.</p>
<p>В приведенных примерах бросается исключение. Можно просто не бросать исключение, а писать в консоль или в HTML-код страницы предупреждение и выполнять какое-то действие по умолчанию. При этом обработчик ошибок не будет считать сообщение ошибкой. Например, код:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">var obj = {data: null, foo: &quot;bar&quot;};<br />
console.log(obj.data.data);<br />
console.log(obj.baz.data);</div></div>
<p>должен вывести в консоль null и undefined и два предупреждения:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">Warning: Cannot read property 'data' of null in...</div></div>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">Warning: Cannot read property 'data' of undefined in...</div></div>
<p>В PHP тоже постепенно заменяют Fatal error на исключения, которые сами по себе, если не отловить, Fatal error.<br />
В принципе, несложно написать код на языке C++ (или на каком написан движок для браузеров?), реализующий помимо исключения низкоуровневую ошибку, не трогая остальной код движка. Сами исключения никуда не денутся. Кстати, как устроен Javascript, в двух словах? Просто замена предлагается постепенная. Слишком уж странная логика ошибок у Javascript. Деление на ноль, некорректная математическая операция, вывод неопределенных значений в HTML, обращение к булеву значению как к объекту, вызов функции без аргументов не вызывает даже вывода предупреждающего сообщения, не говоря уж об ошибках.<br />
Система ошибок Javascript подчиняется каким-то стандартам (IEEE и т.д.)?<br />
TypeScript не рассматриваем, так как он пока не встроен в Javascript. Предлагаемые изменения нужно именно встроить.<br />
Кстати, в Chrome нашел баг: код</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">document.createElement(null);</div></div>
<p>не вызовет ошибки, а создаст DOM элемент null, разумеется, невалидный.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Автор: Admin		</title>
		<link>https://ploshadka.net/typeerror-null-is-not-an-object/#comment-355</link>

		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 24 May 2020 14:23:48 +0000</pubDate>
		<guid isPermaLink="false">https://ploshadka.net/?p=2146#comment-355</guid>

					<description><![CDATA[В ответ на &lt;a href=&quot;https://ploshadka.net/typeerror-null-is-not-an-object/#comment-354&quot;&gt;Алекс&lt;/a&gt;.

PHP может работать, если ошибки не fatal. JavaScript устроен иначе. Почти любая ошибка сломает дальнейший код. Так исторически сложилось, не думаю, что это сегодня можно изменить. 

Что касается:
&lt;code&gt;3 * &quot;string&quot;;&lt;/code&gt;

есть TypeScript и надстройки над JavaScript, которые делают строгую типизацию в JS.]]></description>
			<content:encoded><![CDATA[<p>В ответ на <a href="https://ploshadka.net/typeerror-null-is-not-an-object/#comment-354">Алекс</a>.</p>
<p>PHP может работать, если ошибки не fatal. JavaScript устроен иначе. Почти любая ошибка сломает дальнейший код. Так исторически сложилось, не думаю, что это сегодня можно изменить. </p>
<p>Что касается:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">3 * &quot;string&quot;;</div></div>
<p>есть TypeScript и надстройки над JavaScript, которые делают строгую типизацию в JS.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Автор: Алекс		</title>
		<link>https://ploshadka.net/typeerror-null-is-not-an-object/#comment-354</link>

		<dc:creator><![CDATA[Алекс]]></dc:creator>
		<pubDate>Sun, 24 May 2020 11:44:07 +0000</pubDate>
		<guid isPermaLink="false">https://ploshadka.net/?p=2146#comment-354</guid>

					<description><![CDATA[Идея: низкоуровневые ошибки! Почему в Javascript нет низкоуровневых ошибок (Warning/Notice), как в PHP? Можно просто выбрасывать предупреждение: &lt;strong&gt;Warning: null is not an object&lt;/strong&gt; или &lt;strong&gt;Warning: Cannot set property &quot;...&quot; of null&lt;/strong&gt;

Метод &lt;strong&gt;document.querySelector();&lt;/strong&gt; не должен тихо возвращать null. Можно выбрасывать замечание &lt;strong&gt;Notice: DOM element &quot;selector&quot; not found&lt;/strong&gt; и после него возвращать null.

Кстати, низкоуровневые ошибки нужны в куче случаев, которые приводят к логическим ошибкам.

Пример: некорректные математические операции. 

&lt;strong&gt;3 * &quot;string&quot;;&lt;/strong&gt; 

должно выбросить предупреждение или замечание: 

&lt;strong&gt;A non-numeric value encountered&lt;/strong&gt;

а уже потом вернуть NaN. Должен быть предусмотрен отдельный оператор конкатенации строк, использование &quot;+&quot; должно приводить к низкоуровневой ошибке.

Другие примеры.

Деление на нуль должно генерировать замечание &lt;strong&gt;Notice: Division by zero&lt;/strong&gt;

Попытка обратиться к undefined или null, а также к булеву значению как к объекту должно генерировать предупреждение и возвращать null или undefined при попытке чтения свойства.

Использование неитерируемого объекта в цикле for...of должно выбрасывать предупреждение вместо исключения.

Методы, работающие с DOM, должны выбрасывать предупреждения вместо DOMException.

Вывод напрямую массива или объекта в document должно сгенерировать замечания или предупреждения: 
&lt;strong&gt;Array to string conversion&lt;/strong&gt; 
&lt;strong&gt;Object to string conversion&lt;/strong&gt;

Должна быть предусмотрена низкоуровневая ошибка Deprecated.

И это далеко не все случаи, учитывая, что ECMAScript продолжает развиваться.

Нужна функция типа PHP функции trigger_error(), выбрасывающая низкоуровневые ошибки, нужны предопределенные константы E_NOTICE, E_WARNING и E_DEPRECATED, а также константы E_CONSOLE и E_DOCUMENT, определяющие, куда выводить сообщение или предупреждение.

Например: &lt;strong&gt;window.triggerError(&quot;Caught error on strong&quot;, E_WARNING, E_CONSOLE);&lt;/strong&gt;

Не будут лишними и синтаксические предупреждения (предупреждения парсинга), например, пропуск точки с запятой, использование зарезервированного слова или код после return.]]></description>
			<content:encoded><![CDATA[<p>Идея: низкоуровневые ошибки! Почему в Javascript нет низкоуровневых ошибок (Warning/Notice), как в PHP? Можно просто выбрасывать предупреждение: <strong>Warning: null is not an object</strong> или <strong>Warning: Cannot set property &#171;&#8230;&#187; of null</strong></p>
<p>Метод <strong>document.querySelector();</strong> не должен тихо возвращать null. Можно выбрасывать замечание <strong>Notice: DOM element &#171;selector&#187; not found</strong> и после него возвращать null.</p>
<p>Кстати, низкоуровневые ошибки нужны в куче случаев, которые приводят к логическим ошибкам.</p>
<p>Пример: некорректные математические операции. </p>
<p><strong>3 * &#171;string&#187;;</strong> </p>
<p>должно выбросить предупреждение или замечание: </p>
<p><strong>A non-numeric value encountered</strong></p>
<p>а уже потом вернуть NaN. Должен быть предусмотрен отдельный оператор конкатенации строк, использование &#171;+&#187; должно приводить к низкоуровневой ошибке.</p>
<p>Другие примеры.</p>
<p>Деление на нуль должно генерировать замечание <strong>Notice: Division by zero</strong></p>
<p>Попытка обратиться к undefined или null, а также к булеву значению как к объекту должно генерировать предупреждение и возвращать null или undefined при попытке чтения свойства.</p>
<p>Использование неитерируемого объекта в цикле for&#8230;of должно выбрасывать предупреждение вместо исключения.</p>
<p>Методы, работающие с DOM, должны выбрасывать предупреждения вместо DOMException.</p>
<p>Вывод напрямую массива или объекта в document должно сгенерировать замечания или предупреждения:<br />
<strong>Array to string conversion</strong><br />
<strong>Object to string conversion</strong></p>
<p>Должна быть предусмотрена низкоуровневая ошибка Deprecated.</p>
<p>И это далеко не все случаи, учитывая, что ECMAScript продолжает развиваться.</p>
<p>Нужна функция типа PHP функции trigger_error(), выбрасывающая низкоуровневые ошибки, нужны предопределенные константы E_NOTICE, E_WARNING и E_DEPRECATED, а также константы E_CONSOLE и E_DOCUMENT, определяющие, куда выводить сообщение или предупреждение.</p>
<p>Например: <strong>window.triggerError(&#171;Caught error on strong&#187;, E_WARNING, E_CONSOLE);</strong></p>
<p>Не будут лишними и синтаксические предупреждения (предупреждения парсинга), например, пропуск точки с запятой, использование зарезервированного слова или код после return.</p>
]]></content:encoded>
		
			</item>
	</channel>
</rss>
