Разница между условностями - PullRequest
3 голосов
/ 09 ноября 2010

Просто хотел узнать, может ли кто-нибудь объяснить разницу между этими двумя условными выражениями:

if ( !object ) 

if ( object == null )

where object is an instance of a user-defined class.

Я уверен, что эти два нельзя использовать взаимозаменяемо, или они?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 10 ноября 2010

Эффект на практике одинаков, поэтому, я думаю, вы могли бы сказать, что они взаимозаменяемы.

В логическом контексте (например, условном) выражение выражается как true или false.

В Actionscript 3.0 следующие значения оцениваются как ложные:

  • false
  • null
  • 0
  • NaN
  • "" (пустая строка)
  • undefined
  • void

Все остальное оценивается как true.

Ссылка наПользовательский экземпляр класса может быть либо нулевым, либо не нулевым.

Итак, в этом случае:

if ( object == null )

Очевидно, что условие выполняется только в том случае, если объект нулевой.

В этом другом случае:

if ( !object )

Выражение object оценивается как ложное, если object равно null.Если это null, выражение ложно.Поскольку это, в свою очередь, отрицается, конечное значение будет истинным, и поэтому условие будет выполнено.Итак, как и в первом случае, если object равно нулю, условие выполнено.И, как и в первом случае, опять же, если object не равно нулю, условие не выполняется.

Нет другого варианта, если ваша переменная введена в определенный пользователем класс;такая переменная может содержать только допустимую ссылку или ноль;т. е. он не может содержать любое значение, оцениваемое на false в логическом контексте, кроме null;Итак, опять же, это либо ноль, либо не нуль .Вот почему оба примера кода имеют одинаковый эффект.

1 голос
/ 09 ноября 2010

Первый делает логическое сравнение.Если объект имеет значение false, операция not (!) Сделает условие истинным, если объект имеет значение, отличное от false, инструкция не выполнится.

Второе условие оценивает, имеет ли объект значениеnull или нет.

Причина, по которой они могут быть взаимозаменяемыми, заключается в том, что различные языки допускают некоторую эквивалентность между 0, false, null (или "\ 0") и другими значениями аналогичного значения.

Iне знаю actionScript, но тестирование эквивалентности false, null, 0 и т. д. или чтение документации по логическим значениям принесет некоторую пользу.

0 голосов
/ 09 ноября 2010

Конечно нет :) Первое означает, что утверждение верно только в том случае, если оно отличается от объекта;Второе истинно, только если объект равен нулю.

"!"означает "не объект" "==" означает, что объект должен иметь значение, равное значению справа от символа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...