Разница между PHP и JS оценкой переменных - PullRequest
0 голосов
/ 24 марта 2011

Может кто-нибудь объяснить мне, почему следующий код JavaScript генерирует предупреждение с 321, а код PHP выдает 1.

Я знаю, что код PHP оценивает выражение и возвращает true или false. Чего я не знаю, так это того, почему в JavaScript он работает как троичный оператор. Это просто так, как все было реализовано на языке?

var something = false;
var somethingelse = (something || 321);
alert(somethingelse); // alerts 321
$var = '123';
$other = ($var || 321);
echo $other; // prints 1

Спасибо!

Ответы [ 4 ]

3 голосов
/ 24 марта 2011

Это просто так, как все было реализовано на языке?

Да, JavaScript делает это немного по-другому. Выражение (something || 321) означает, что если something имеет значение falsy , вместо него используется значение по умолчанию 321.

В условных выражениях || действует как логический OR как обычно, но в действительности он выполняет ту же операцию объединения. Вы можете проверить это с помощью следующего:

if ((0 || 123) === true)
    alert('0 || 123 evaluates to a Boolean');
else
    alert('0 || 123 does not evaluate to a Boolean');

В PHP оператор || выполняет логический OR и дает логический результат, ничего больше.

0 голосов
/ 24 марта 2011

В PHP ($var || 321); оценивается и присваивается $other.

Вы можете использовать это в PHP.

($other = $var) || $other = 321;

Обновление: как сказано в BoltClock в Javascript var somethingelse = (something || 321) стремится присвоить переменной значение по умолчанию, если something равно false.

0 голосов
/ 24 марта 2011

Просто добавьте ответ на boltClock, поскольку я не могу комментировать. Если вы хотите, чтобы это было логическое значение, вы можете проанализировать его как bool:

var somthing = !!(somthingelse || 321);
0 голосов
/ 24 марта 2011

Я на самом деле удивлен, что javascript не предупредил 1 или тоже верно.Синтаксис, который вы хотите использовать для js:

var somethingelse = something || 321;

Обтекание скобок вокруг чего-либо оценивает его как truey / falsey.Для php вы говорите:

//$other will equal true if $var is true or 321 is true. 
$other = ($var || 321);

Соответствующий оператор в php будет выглядеть так:

$other = ($var) ? $var : 321;
...