Я хочу знать, являются ли два фрагмента JavaScript одинаковыми или нет
Я новичок в JavaScript и хочу узнать больше об этом.
Например:
a == true && alert("a is true");
Это похоже на:
if(a == true)
{
alert("a is true");
}
Если приведенный выше код верен, и если оба они равны, я хочу знать все операторы и условия, подобные этому. Где я могу их найти?
Ответы
Ответ 1
Ответ: результат, который является полем предупреждения, будет таким же.
Пояснение:
Большинство языков предназначены для оценки второго выражения только в том случае, если первый оценивается с помощью true
, в случае выражения &&
.
Это означает, что если a
оценивается как false
, null
, undefined
, пустая строка 0
или NaN
, alert("a is true")
не будет оцениваться, t см. окно предупреждения.
JavaScript имеет значения, которые могут быть "правдивыми" или "ложными", я предлагаю вам прочитать об этом здесь: http://11heavens.com/falsy-and-truthy-in-javascript.
Таким образом, это зависит от вашего определения "тот же", результат, т.е. просмотр или отсутствие окна предупреждения, тот же.
Если вы хотите узнать больше о разных операторах в JavaScript и о том, как они работают, посмотрите: developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators.
Ответ 2
Единственное различие между ними состоит в том, что это выражение:
a == true && alert("a is true");
Но это утверждение:
if (a == true) {
alert('a is true');
}
Результат выражения зависит от того, что a == true
оценивает.
false && alert('a is true'); // false (and alert box does not show up)
true && alert('a is true'); // undefined (after alert box is clicked away)
Это работает благодаря поведению "короткого замыкания" при оценке выражений; используя &&
, первое условие, что falsy станет результатом выражения без оценки остальных.
Другим оператором, который имеет подобное поведение, является логический или ||
. Рассмотрим:
a || alert('a is false');
Показывает окно предупреждения, если a
оценивается как ложный.
false || alert('a is false'); // undefined (after alert box is clicked away)
true || alert('a is false'); // true (alert box does not show up)
Обратите внимание, что выражения с такими побочными эффектами считаются "умными" решениями; они могут сократить ваш код, но исходное намерение не всегда очевидно.
Тем не менее, есть хорошее применение этого, например:
a = a || 'default value';
Это присвоит значение по умолчанию a
, если оно ложно и исходное значение a
в противном случае. Вы можете видеть эти выражения довольно часто, и они являются мощной особенностью языка.
Ответ 3
Это не специальный синтаксис Javascript - это всего лишь трюки для сокращения кода.
Нет волшебства. Это простая логика. Обычно такие трюки используются сокращением кода для сокращения кода. Это поведение основано на && и || операторы - они не оценивают вторую часть выражения, если результат становится известным из первой части (в противоположность операторам и /, которые всегда оценивают обе части выражения).
Объяснения:
a==true && alert("a is true");
Если "a" - false - механизм javascript анализирует, что все выражение также должно быть ложным (из-за значения логического оператора "& &" (AND)), и он опускает вторую часть выражения, потому что независимо от того, что он возвращает результат, он не изменит результат целого выражения. Таким образом, он не запускает "alert". В противоположном случае, если "a" истинно, то движок Javascript должен знать результат второй части выражения и запускает "alert". Такое поведение подражает обычному утверждению "если".
a==false || alert("a is true");
Этот использует логический оператор OR. Если "a" является ложным, тогда нет необходимости убеждать вторую часть выражения, а "alert" уволен. Если "a" истинно, тогда существует вероятность того, что вторая часть выражения будет "истина", а целое выражение будет оцениваться как "true", поэтому механизм javascript запускает "alert".
Кроме того, эти ярлыки могут быть сокращены еще больше. Потому что нет необходимости сравнивать два булевых значения: "a" и "true", потому что "a" уже имеет значение boolean. Он делает следующее:
a && alert("a is true");
В принципе, вам не нужно использовать такие вещи вручную, просто используйте обычные инструкции "if" - это сделает ваш код доступным для чтения. Затем вы можете использовать минимизаторы кода для сокращения кода для производства, если это необходимо.
Счастливое кодирование!
Ответ 4
Есть много хороших примеров, как &&
работает, в других ответах, поэтому я не буду повторять их. В любом случае...
Когда выражение оценивается, оно отправляет возвращаемое значение в качестве результата. В вашем конкретном случае (1-й пример) возвращаемое значение нигде не используется, и результат совпадает с вторым примером. Но если мы будем использовать это возвращаемое значение, скажем, в if
, мы можем получить немного запутывающие результаты. Вот пример:
var a = true;
if (a == true && alert('a = true')) {
alert('a really is true');
} else {
alert('It seems, that a is not true');
}
Этот код вводит сначала предупреждение "a = true", а второе предупреждение будет "Кажется, что a неверно". Это связано с возвращаемым значением собственной функции DOM alert()
, которая возвращает undefined
, что делает условие ложным (true && undefined === false
). Таким образом, мы можем сказать, что ваши коды-коды равны в этом конкретном контексте, но они не находятся в некоторых других контекстах.
Ответ 5
Они оба делают то же самое. Это сводится к тому, как вы предпочитаете, чтобы ваш код выглядел, и большинство (я думаю) согласен с тем, что 2-я версия лучше всего читать.
Операторы If
останавливают выполнение, когда они приходят к ложному (в случае операторов & &), поэтому в первом утверждении говорится: "если a истинно, то если alert...", что означает, что если a true, тогда будет показано предупреждение.
Это точно тот же результат, что и вторая версия.
Ответ 6
Два набора кода дают один и тот же результат, но не одинаковы
Для первого набора кода
a == true && alert("a is true")
используется логический оператор &&
.
При оценке оператора с помощью &&
, false && anything
вычисляется короткое замыкание на значение false.
Итак, в первом утверждении предупреждение (1) не вызывается, если a
- false. Компилятор js пропускает оператор alert
.
Если a
истинно, тогда выполняется предупреждение (1), потому что условие не закорачивается.
Во втором наборе используется нормальное условие if
. Проверьте ссылку .
Ответ 7
этот код делает то же самое, проверьте, является ли true, а затем вызывает функцию оповещения о функции, я могу сказать, что это то же самое.