Тройное равно javascript: Зачем использовать тройное равенство в JavaScript?
|
Операторы, их особенности в JS
В Javascript есть все необходимые для жизни операторы, хотя нет их перегрузки.
Некоторые операторы(+,побитовые,логические,===) имеют специфические особенности.
В Javascript есть даже операторы >>>
и <<<
.
В отличие от некоторых других языков, оператор «+» делает конкатенацию, если хотя бы один операнд — строка, причем, не обязательно первый.
Проверим:
Унарный оператор «+» также используется для преобразования строки к числу:
alert(+"123"+1) // 124
Все побитовые операции работают с 4-байтовым signed int.
Операция >>>
сдвигает побитово вправо, а слева нулями дополняет. В результате эффект — тот же, что и при простом сдвиге >> для положительных чисел.
Для отрицательных — все по-другому. Например, -9 в битовом виде выглядит как: 11111111111111111111111111110111.
Операция >>>
даст эффект: -9 >>> 2
будет в битовом виде 00111111111111111111111111111101, т.е 1073741821.
Логическое И. Возвращает последний операнд, если все операнды верны. Если хоть один из операндов неверен, то возвратит первый неверный операнд.
Например, 1 && 2 = 2
:
1 && 0 && false === 0
:
Оператор И обычно используется, чтобы избежать ошибок при получении вложенных свойств объекта.
Например, нужно свойство petShop.animals.rabbit
или ложное значение, если такого свойства нет.
Безопасный способ:
var rabbit = petShop && petShop.animals && petShop.animals.rabbit
Этот код корректно выполнится, даже если petShop = false
, в то время как
var rabbit = petShop.animals.rabbit
выдаст ошибку(бросит исключение) об отсутствующем свойстве.
Оператор логического ИЛИ возвращает первое верное знач
Операторы Javascript
В JavaScript существует множество различных операторов: арифметические операторы, операторы присваивания, строковые операторы, операторы сравнения, логические операторы, операторы типов, побитовые операторы.
Оператор присваивания (=) присваивает значение переменной:
var x = 5; // присваивает значение 5 переменной x
var y = 2; // присваивает значение 2 переменной y
var z = x + y; // присваивает значение 7 переменной z (x + y)
Оператор сложения (+) складывает числа:
var x = 5;
var y = 2;
var z = x + y;
Оператор умножения (*) перемножает числа:
var x = 5;
var y = 2;
var z = x * y;
Арифметические операторы JavaScript
Арифметические операторы используются для выполнения арифметических операций с числами:
Оператор | Описание |
---|---|
+ | Сложение |
— | Вычитание |
* | Умножение |
/ | Деление |
% | Остаток от деления |
++ | Увеличение на 1 |
— | Уменьшение на 1 |
Операторы присваивания JavaScript
Операторы присваивания присваивают значения переменным JavaScript.
Оператор | Пример | Аналог |
---|---|---|
= | x = y | x = y |
+= | x += y | x = x + y |
-= | x -= y | x = x — y |
*= | x *= y | x = x * y |
/= | x /= y | x = x / y |
%= | x %= y | x = x % y |
Строковые операторы JavaScript
Оператор сложения (+) также может использоваться для объединения (конкатенации) строк.
txt1 = "John";
txt2 = "Doe";
txt3 = txt1 + " " + txt2;
В результате в переменной txt3 будет строка — «John Doe».
Также, для конкатенации строк можно использовать оператор присваивания +=:
txt1 = "Какой теплый ";
txt1 += "и чудесный день";
В результате в переменной txt1 будет строка — «Какой теплый и чудесный день».
При использовании со строками оператор + еще называют оператором конкатенации.
Сложение строк и чисел
Сложение двух чисел вернет сумму этих чисел, однако сложение числа и строки вернет строку:
x = 5 + 5;
y = "5" + 5;
z = "Hello" + 5;
В результате в переменных x, y, z мы получим 10, 55, Hello5 соответствен
JavaScript — Двойное отрицание (!! x)
пример
Двойное отрицание !!
не является отдельным оператором JavaScript или специальным синтаксисом, а скорее последовательностью из двух отрицаний. Он используется для преобразования значения любого типа в его соответствующее true
или false
логическое значение в зависимости от того, является ли оно правдивым или ложным .
!!1 // true
!!0 // false
!!undefined // false
!!{} // true
!![] // true
Первое отрицание преобразует любое значение в значение false
если оно является правдивым, а true
если оно ложно . Второе отрицание действует на нормальное булево значение. Вместе они преобразуют любое истинное значение в true
и любое значение ложности в false
.
Тем не менее, многие профессионалы считают, что использование такого синтаксиса неприемлемо, и рекомендовать более простые для чтения альтернативы, даже если они более длинны для написания:
x !== 0 // instead of !!x in case x is a number
x != null // instead of !!x in case x is an object, a string, or an undefined
Использование !!x
считается плохой практикой по следующим причинам:
- Стилистически это может выглядеть как особый синтаксис, тогда как на самом деле он не делает ничего, кроме двух последовательных отрицаний с неявным преобразованием типов.
- Лучше предоставить информацию о типах значений, хранящихся в переменных и свойствах через код. Например,
x !== 0
говорит, чтоx
, вероятно, является числом, тогда как!!x
не дает такого преимущества читателям кода. - Использование
Boolean(x)
допускает аналогичную функциональность и является более явным преобразованием типа.
JavaScript — Двойное равенство против тройного равенства | Брэндон Морелли
Udemy Распродажа в Черную пятницу — Тысячи курсов по веб-разработке и разработке программного обеспечения продаются всего за 10 долларов США в течение ограниченного времени! Полную информацию и рекомендации курса можно найти здесь .
Проблема
В JavaScript есть два визуально похожих, но очень разных способов проверки равенства.Вы можете проверить равенство с помощью ==
или ===
. Вот различия:
Triple Equals
При использовании Triple Equals ===
в JavaScript мы проверяем на строгое равенство . Это означает, что сравниваемые значения и должны быть одинаковыми.
Давайте посмотрим на пару примеров строгого равенства.
В этом первом примере мы сравниваем число 5 с числом 5.Как и ожидалось, возвращается true
. Оба числа , и оба имеют одно и то же значение из 5.
5 === 5
// true
Имея это в виду, мы можем рассмотреть еще два примера, которые вернут true
:
'hello world' === 'hello world'
// true (обе строки , равны значений ) true === true
// true (оба логических значения , равны значений )
Отлично.Теперь давайте рассмотрим несколько примеров, которые вернут false
:
В этом примере мы сравним число 77 со строковым значением из 77. Это означает, что наши операнды будут иметь такое же значение , а у другой тип . Это вернет false
77 === '77'
// false (Number v. String)
Вот два дополнительных примера:
'cat' === 'dog'
/ / false (Оба являются строками, но имеют разные значения) false === 0
// false (Другой тип и другое значение)
Отлично! Опять же, ключевой вывод для тройного (строгого) равенства заключается в том, что и сравниваемые нами тип и значение должны быть одинаковыми.
Double равно
При использовании double equals в JavaScript мы проверяем на свободное равенство. Double равно также выполняет приведение типа .
Приведение типа означает, что два значения сравниваются только после попытки преобразовать их в общий тип.
Это проиллюстрирует пример. Вспомните ранее, когда мы тестировали следующее со строгим равенством:
77 === '77'
// false (Number v.String)
77
не строго равно '77'
, потому что они имеют разные типы. Однако, если бы мы проверили эти значения со слабым равенством…
77 == '77'
// true
Вы можете видеть, что мы получаем true
. Это из-за приведения типа. JavaScript фактически попытается преобразовать наши значения в подобный тип. В этом случае это удается. Строковое значение '77'
можно легко преобразовать в числовое значение 77
.Поскольку 77
равно 77
, мы получаем ответ истинный
.
Рассмотрим еще один пример.
Вспомните ранее, когда мы тестировали со строгим равенством, если false
равно 0
:
false === 0
// false (Другой тип и другое значение)
Это, очевидно, ложь. Однако, если мы запустим то же уравнение со слабым равенством…
false == 0
// true
Мы получим true
? Почему это? Это связано с ложными значениями в JavaScript.Мы исследуем эту концепцию в следующем разделе.
Ложные значения
Итак, почему false == 0
в JavaScript? Это сложно, но это потому, что в JavaScript 0
— это ложное значение .
Принуждение типа фактически преобразует наш ноль в ложное логическое значение, тогда false
равно false
.
В JavaScript всего шесть ложных значений , о которых вы должны знать:
-
false
— логическое ложное -
0
— нулевое число -
«»
— пустая строка -
null
-
undefined
-
NaN
— Not A Number
Сравнение ложных значений
Следующее, что вы можете считать «правилами» ложных значений.Это то, что вам в конечном итоге следует запомнить, если вы будете часто работать с JavaScript.
-
false
,0
и""
При сравнении любого из наших первых трех ложных значений со свободным равенством они всегда будут равны! Это потому, что все эти значения будут преобразованы в логическое значение false
.
false == 0
// true 0 == ""
// true "" == false
// true
2. null
и undefined
При сравнении null
и undefined
они равны только себе и друг другу:
null == null
// true undefined == undefined
// true null == undefined
// true
Если вы попытаетесь сравнить null
с любым другим значением, оно вернет false
.
3. NaN
Наконец, NaN
ничему не эквивалентны.Еще круче, это даже не сам по себе!
NaN == null
// false NaN == undefined
// false NaN == NaN
// false
Ключевые выводы
- Как вы видели, принуждение типа может получить немного сумасшедший в JS. Если вы не очень хорошо знакомы с JavaScript, потеря равенства может вызвать больше головной боли, чем оно того стоит. Запоминание шести ложных ценностей и правил, связанных с ними, может иметь большое значение для понимания слабого равенства.
- Тройное равенство превосходит двойное равенство. По возможности следует использовать тройное равенство для проверки равенства. Проверяя тип и значение, вы можете быть уверены, что всегда выполняете настоящий тест на равенство.
Спасибо за чтение! Если вы готовы, наконец, изучить веб-разработку, ознакомьтесь с The Ultimate Guide to Learning Full Stack Web Development for 6 months .
Каждую неделю я публикую 4 статьи по веб-разработке. Если вы хотите, чтобы вас добавляли в мой еженедельный список рассылки, укажите здесь , введите свой адрес электронной почты , и подписывайтесь на меня в Twitter .
Если этот пост был полезен, пожалуйста, нажмите кнопку хлопка несколько раз ниже, чтобы выразить свою поддержку! ⬇⬇
.
JavaScript тройное равенство и сравнение трех переменных
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
Должен ли я использовать оператор сравнения равенства === или == в JavaScript?
Вы знаете, что в JavaScript есть два разных оператора сравнения равенства: операторы ===
и ==
, или тройка равна , а double равняется , как их называют. Вы видели, как используются оба, но не уверены, какой из них выбрать для своего кода. Вы хотели бы знать верный способ решить один или другой.
Как оказалось, есть простой способ решить, какой из них использовать.Та же логика работает и для операторов сравнения неравенств ! ==
и ! =
.
Сравнить равные и одного типа с ===
Оператор тройного равенства ( ===
) возвращает истину, если оба операнда одного типа и содержат одинаковое значение. Если сравнивать разные типы на равенство, результат будет ложным.
Этого определения равенства достаточно для большинства случаев использования. При сравнении строки «0»
и числа 0
результат ложный, как и ожидалось.
Источники, такие как D. Crockford и MDN, рекомендуют использовать только оператор тройного равенства при программировании на JavaScript, а оператор двойного равенства вообще игнорировать.
Преобразования сложных типов выполняются с помощью ==
Оператор двойного равенства ( ==
) пытается выполнить преобразование типов, если типы различаются, а затем сравнить их на равенство. Если типы различаются, сначала один или оба операнда преобразуются в общий тип. Правила преобразования сложны и зависят от типов аргументов.Полную сравнительную таблицу см., Например, в MDN или спецификации ECMAScript.
Например, при сравнении строки «0»
и числа 0
первый аргумент сначала преобразуется в число.
1 2
"0" == 0
ToNumber ("0") === 0
Хотя сравнение строк и чисел понятно, сложные правила для других типов приводят к нелогичным результатам. Например, см. Сравнения между null
, undefined
и false
:
1 2 3
false == undefined
false == null
null == undefined
Используйте только ===
Используйте оператор сравнения равенства тройного равенства ( ===
).При попытке сравнить разные типы с тройным равенством результат всегда ложный. Вы получите ожидаемые результаты, не требующие сложных для запоминания правил преобразования. Сравнение яблок с апельсинами не соответствует ожиданиям.
Обратите внимание, что эти операторы сравнения предназначены для сравнения примитивных типов. Для сравнения глубокого равенства объектов или массивов необходим другой подход, который сравнивает операнды структурно.
.
node.js — разница в производительности JavaScript между double equals (==) и triple equals (===)
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…