Объясните, пожалуйста, почему из трех алертов ниже исполняется только последний? Вроде как во всех трёх случаях идет мягкое сравнение на равенство к true
if (true == "0") alert('Тру равно нулю!');
if ("0" == true) alert('Ноль равен тру');
if ("0") alert('Как бы тоже тру, или как?');
https://jsfiddle.net/z1xbshmk/
Стоит обратиться к спецификации
При вычислении равенства EqualityExpression == RelationalExpression получаются значения левой и правой части, и к ним применяется Abstract Equality Comparison.
Сравнение x == y, где x и y - значения, возвращает true or false. Такое сравнения производится следующим образом:
Если Type(x) тот же самый, что и Type(y), тогда возвращается результат выполнения Strict Equality Comparison x === y.
Если x является null и y является undefined, вернуть true.
Если x является undefined и y является null, вернуть true.
Если Type(x) - это Number и Type(y) - это String,
вернуть результат выражения x == ToNumber(y).
Если Type(x) - это String и Type(y) - это Number,
вернуть результат выражения ToNumber(x) == y.
Если Type(x) - это Boolean, вернуть результат выражения ToNumber(x) == y.
Если Type(y) - это Boolean, вернуть результат выражения x == ToNumber(y).
Если Type(x) один из следующих: String, Number, или Symbol и Type(y) это Object, вернуть значение выражения x == ToPrimitive(y).
Если Type(x) - это Object и Type(y) один из следующих: String, Number, или Symbol, вернуть значение выражения ToPrimitive(x) == y.
Вернуть false.
Рассмотрим первый пример:
true == "0"
Это выражении соответствует ветке
Если Type(x) - это Boolean, вернуть результат выражения ToNumber(x) == y.
При приведении к числу получаем выражение: 1 == "0"
попадаем в ветку
Если Type(x) - это Number и Type(y) - это String, вернуть результат выражения x == ToNumber(y).
При приведении к числу получаем выражение: 1 == 0
и как результат: false.
Со вторым случаем происходит аналогичное.
Теперь рассмотрим третий случай.
Обратимся опять к спецификации:
К выражению внутри скобок применяется функция ToBoolean
, которая в случае строки возвращает false если строка пустая(длина строки 0), и true - в противном случае.
Так как "0" - не пустая(длина строки 1), то условие считается выполненным.
true
.Как оно происходит.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть такой select, нужно определять текст опции при смене варианта, например при смене на "Вариант 2" будет выскакивать его "Выберите вариант...
Не знаю, правильно ли я охарактеризовал свой вопрос, но суть такова: Есть структура
Здравствуйте ! Помогите на html страницы выводить контент другой страницыIframe не катит, так как надо чтобы было еще кликабельно, а здесь получается...
Мне нужно, чтобы по исполнению функции аудио не только замедлялось, но и изменяло частоту звука