Я всегда видел, что JavaScript
есть:
- задания
=
- сравнения
==
и===
Я понимаю, что он ==
делает что-то подобное для сравнения значения переменной, а ===
также сравнивает тип (например, java equals).
Может ли кто-нибудь подтвердить этот момент для меня и расширить его? . Я яванец, и иногда я люблю распечатывать javascript, а иногда ненавижу его.
Как правильно в javascript сравнивать undefined
и null
другие значения по умолчанию?
variable == null
variable === null
undefined
Он используется как текстовая строка или как ключевое слово ? Какое из следующих сравнений верно для элемента html
без value
? (например, ярлык без содержания)
variable == "undefined"
variable === "undefined"
variable == undefined
variable === undefined
Операторы
===
и являются операторами строгого!==
сравнения . Это означает, что если операнды имеют разные типы, они не совпадают. Например,Операторы
==
и являются упрощенными!=
операторами сравнения . То есть, если операнды имеют разные типы, JavaScript пытается преобразовать их так, чтобы они были сопоставимы. Например,Стоит отметить, что оператор
==
не является транзитивным , в отличие от===
.Не очень легко запомнить все правила непринужденного сравнения, и иногда это работает нелогичным образом. Поэтому я рекомендую использовать
===
вместо==
.Я не помню всех тонкостей оператора
==
, поэтому давайте заглянем в спецификацию, пункт 11.9.3:Этот ответ является переводом моего ответа на этот же вопрос на русском сайте .
Разница в том, что == сначала пытается преобразовать типы перед их сравнением. Оператор === этого не делает, он выполняет прямое сравнение, хотя всегда возвращает false, если типы разные. источник (на английском языке)
бывший:
Эти графики могут помочь вам визуализировать разницу:
'==' оператор
Оператор '==='
( источник изображений )
Он эффективно
==
сравнивает значение, а===
также сравнивает тип. Например.Вы можете прочитать технические подробности (на английском языке) в разделе «Сравнения и одинаковость».
undefined
является зарезервированным словом и используется без кавычек.Не совсем. Это правда, что оператор
===
сравнивает тип и значение, не выполняя преобразования, как это сделал бы оператор==
. Однако это верно только для типов значений. В ссылочных типах он проверяет, что это один и тот же объект, недостаточно того, что он имеет тот же тип и значение. Таким образом, это===
будет оператор идентификации, а не==
.Например:
Строковый регистр будет работать как тип значения, если вы не используете конструктор
String
, который будет ссылочным типом.Также обратите внимание, что оператор
==
не является транзитивным в некоторых преобразованиях. Например:Учитывая неоднозначность этого оператора, рекомендуется использовать его всегда,
===
когда это возможно.В любом случае, вы можете взглянуть на эту страницу , которая разрешит сомнения относительно обоих операторов. Там вы можете проверить среди прочего, что
undefined == null
ноundefined !== null
.очень простой
==
это равенство значения, а не типа.===
является равенством значения и типа.На ваш вопрос уже был дан правильный ответ, но я хотел бы прокомментировать то, что кажется вашей проблемой (я также начал с java, и есть определенные вещи, которые javascript упрощает).
Переменная может иметь 2 состояния: «не определено» или иметь что-то, нуль, поскольку в SQl это тип значения, то есть, если ваша переменная имеет значение null, она определена и имеет что-то, ничего, кроме чего-то: P, undefined означает, что ваша переменная не была определена, этот факт любопытен, особенно потому, что null == undefined отвечает true.
Теперь, когда вы ищете элемент с помощью js и не находите его (например, document.getElementById("inpt")), его значение равно null, в случае, если вы находите его, вы запрашиваете его значение, а если нет нет, он отвечает "" .
Самое интересное, что с простым, если вы решаете многое.
Если вы не транспилируете свой код JS (например, с помощью Babel), операция "==" выполняется быстрее, чем проверка типа с помощью "===", поэтому, если ваш код будет использоваться много раз (он является частью архитектура или какая-то библиотека) предпочтительнее использовать "==", учитывая, что вы не собираетесь проходить фильтр типов. Во всех остальных случаях (подавляющее большинство) лучше использовать проверку типов с "===", чтобы избежать неожиданных результатов.
Уточним понятия:
Каждая переменная в JavaScript имеет тип и значение .
В JavaScript есть нечто, называемое принуждением . Приведение — это автоматическое (и неявное) преобразование, которое выполняет движок JavaScript в попытке оперировать значениями разных типов. Например:
Поскольку значение1 имеет тип строка , а значение2 имеет тип число , JavaScript выполняет автоматическое преобразование второго значения, пытаясь выполнить суммирование. Таким образом, значение переменной
suma
будет строкового типа :ВЫВОД
Оператор
==
сравнивает два значения независимо от типа. То есть принуждает, а потом сравнивает. Если значения совпадают после конвертации, вернуть значениеtrue
.Вместо этого оператор
===
возвращаетtrue
значение только в том случае, если значение и тип совпадают.Уточнение: это относится только к 6 примитивным типам.