Тестирование неопределенных переменных в JavaScript / возможная ошибка JavaScript? - PullRequest
0 голосов
/ 22 марта 2012

Итак, я работал с javascript для веб-сайта, который я проектирую, шокер, я знаю, я пытался найти способ проверить, не существует ли переменная или она не была определена.Пройдя через это, я думаю, что быть неопределенным и не существовать - это две разные вещи.Также я думаю, что маловероятно, что я нашел ошибку, но, возможно, кто-то с лучшим пониманием Javascript может объяснить мне, почему следующий код работает так, как он работает.

<script type="text/javascript">
var t1="";
var t2;
if (t1==undefined) {document.write("t1 is undefined");}
if (t2==undefined) {document.write("t2 is undefined");}
</script> 

Приведенный выше код возвращает "t2 не определено".

<script type="text/javascript">
var t1="";
if (t1==undefined) {document.write("t1 is undefined");}
if (t2==undefined) {document.write("t2 is undefined");}
</script> 

Этот второй код дает сбой, я полагаю.Так в первом коде t2 существует, но не определен?и во втором коде он должен существовать, прежде чем он может быть неопределенным?Я просто подумал, что если я не напишу "var t2;"затем проверено на это, это будет неопределенным.Надеюсь, я достаточно объяснил этот вопрос.

Ответы [ 3 ]

2 голосов
/ 22 марта 2012

Это не ошибка.Фактически, оператор typeof является единственным местом, где вы можете использовать необъявленную переменную без получения ошибки.

См. Мой ответ Internet Explorer: «консоль не определена» Ошибка дляподробное объяснение

edit:

Вот как это определено в specs :

Производство UnaryExpression : typeof UnaryExpression вычисляется следующим образом: 1. Пусть val будет результатом вычисления UnaryExpression.
2. Если Тип (val) равен Reference, тогда
a. Если IsUnresolvableReference (val) имеет значение true, вернуть "undefined".
...

Везде, IsUnresolvableReference==true приведет к ошибке.

0 голосов
/ 22 марта 2012

Похоже, здесь есть запутанное соглашение об именах; Мы можем сказать, что в первом случае вы определяете переменную t2, но для нее не определено значение . Вы можете считать свойство "undefined" как "значение-неопределенное", чтобы быть более точным.

Во втором случае у вас t2 переменная сама НЕ определена, поэтому вы получите сообщение об ошибке при попытке использовать ее в коде: "переменная не определена", эта ошибка из-за другой причина, но она названа аналогично, что делает ситуацию немного запутанной. Думайте об этой ошибке как "переменная-неопределенная", чтобы быть более точной.

Я думаю, что вы можете просто использовать свойство "null" вместо "undefined" в первом случае, чтобы было ясно.

var t1="";
var t2;
if (t1==null) {document.write("t1 is null");} 
if (t2==null) {document.write("t2 is null");} 

и *; 1014 *

var t1="";
if (t1==null) {document.write("t1 is null");} 
if (t2==null) {document.write("t2 is null");} // this line gives error because t2 variable is undefined
0 голосов
/ 22 марта 2012

Хорошо в вашем случае, если у вас есть:

var t1 = "";

Вы объявите пустую строку, так что это нормально для "определения";

В то время как вы делаете:

var t2;

Вы не определяете его как любой тип объекта javascript

...