Всегда я видел, что в JavaScript
есть:
=
==
и ===
Я верю в то, что понимаю, что ==
он делает что-то похожим, чтобы сравнивать стоимость переменной и ===
также сравни тип (как equals java).
Кто-то мог бы подтверждать мне эту точку и увеличивать это?. Я javero и не tipado javascript иногда очень нравится мне и другие я это ненавижу.
Каковым состоит правильный способ в javascript в том, чтобы сравнивать undefined
, null
и другая стандартная настройка?
variable == null
variable === null
¿undefined
он используется как цепь текста или как ключевое слово? Который следующие сравнения - правильная для элемента html
без value
? (например label без контента)
variable == "undefined"
variable === "undefined"
variable == undefined
variable === undefined
Операторы ===
и !==
они - операторы строгого сравнения. Это значит, что, если у operandos есть различные типы, они не равны. Например,
1 === "1" // false
1 !== "1" // true
null === undefined // false
Операторы ==
и !=
они - операторы беспутного сравнения. А именно, если у operandos есть различные типы, язык сценариев JavaScript старается конвертировать их для того, чтобы они были сравнимыми. Например,
1 == "1" // true
1 != "1" // false
null == undefined // true
Стой упоминать о том, что оператор ==
он не является переходным, в отличие от того как ===
.
"0" == 0 // true
0 == "" // true
"0" == ""// false
Не очень легко помнить все правила беспутного сравнения, и иногда функционирует в контраинтуитивном способе. Поэтому, я рекомендую использовать ===
вместо ==
.
Я не помню все маленькие детали оператора ==
, тогда давайте бросать беглый взгляд в спецификацию, точку 11.9.3:
Алгоритм сравнения абстрактного равенства
Сравнение x == и, где x и и это стоимость, возвратись true или false. Это сравнение осуществляется следующего способа:
- Если Type (x) и Type (y) - те же самые,
- Если Type (x) - Undefined, возвратись true.
- Если Type (x) - Null, возвратись true.
- Если Type (x) - Number,
- Если x - NaN, возвратись false.
- Если и это NaN, возвращается false.
- Если x - та же стоимость Number, которую и, он возвращает true.
- Если x +0 и и - −0, возвратись true.
- Если x-0 и и его +0, возвратись true.
- Возвратись false.
- Если Type (x) - String, возвратись true если x и и это точно та же последовательность символов (с той же длиной и теми же символами в соответствующих положениях). В противоположном случае, возвратись false.
- Если Type (x) - Boolean, возвратись true, если x и и оба true или оба false. В противоположном случае, возвратись false.
- Возвратись true если x и и они передают тот же объект. В противоположном случае, возвратись false.
- Если x он null и и - undefined, возвратись true.
- Если x он undefined и и - null, возвратись true.
- Если Type (x) - Number и Type (y) - String,
возвращает результат сравнения x == ToNumber (y).- Если Type (x) - String и Type (y) - Number,
возврати результат сравнения ToNumber (x) == и.- Если Type (x) - Boolean, возврати результат сравнения ToNumber (x) == и.
- Если Type (y) - Boolean, возвращает результат сравнения x == ToNumber (y).
- Если Type (x) - String или Number, и Type (y) - Object,
возвращает результат сравнения x == ToPrimitive (y).- Если Type (x) - Object и Type (y) - String или Number,
возврати результат сравнения ToPrimitive (x) == и.- Возвратись false.
Этот ответ - перевод моего ответа на тот же вопрос в русском сайте.
Различие состоит в том, что == сначала он пробует конвертировать типы перед тем, как сравнивать их. Оператор === не, делает прямое сравнение, хотя он всегда возвращается фальшиво, если типы различные. шрифт (на английском)
ej:
1 == "1" // verdadero
1 === "1" // falso
'' == 0 // verdadero
'' === 0 // falso
Эти графики может быть смогли помогать тебе отображать различие:
Действительно ==
сравнивает стоимость, в то время как ===
сравнивает tambiГ©n тип. Например.
"1" == 1 // true
"1" === 1 // false
null == undefined // true
null === undefined // false
ты Можешь читать детали tГ©cnicos (в inglГ©s) в Equality comparisons and sameness
undefined
это размещенное слово и используется без кавычек.
Не точно. Верно, что оператор ===
сравни тип и стоимость, не делая превращений, как сделал бы оператор ==
. Однако это одинокое верное для типов стоимости. В типах из-за ссылки то, что он делает, состоит в том, чтобы подтверждать, что это тот же объект, не достаточно, чтобы он был того же типа и стоимости. Так что ===
он был бы оператором тождества, в отличие от того как ==
.
Например:
var a = { x: 1, y: 2 };
var b = { x: 1, y: 2 };
var c = a;
a === b // false
a === c // true
Случай цепей функционировал бы как тип стоимости, если только ты не используешь строитель String
, что был бы типом ссылки.
Указывать также на то, что оператор ==
он не является переходным в каких-то превращениях. Например:
'' == '0' // false
0 == '' // true
Ввиду двусмысленности этого оператора, он советует себе, чтобы был использован оператор ===
каждый раз, когда было возможно.
В любом случае ты можешь бросать беглый взгляд в эту страницу, которая решит сомнения относительно обоих операторов. Там ты можешь подтверждать между другими вещами, которые undefined == null
но undefined !== null
.
a === b
false
....
– Jordi Castilla
03.12.2015, 12:48
'0' == 0 // true
(и двигать первый случай в и #250; ltimo место)
– Alvaro Montoro♦
03.12.2015, 17:28
a
с c
, результата true
.
– Alvaro Montoro♦
03.12.2015, 17:35
a === b
false
, потому что a
и b
не указывают на тот же объект..., они указывают на различные объекты, свойства которых дай случайность, которой у них есть та же стоимость
– Jcl
03.12.2015, 20:16
Простое добро
==
- равенство стоимости и не типа.
===
- равенство стоимости и типа.
console.log("1 == '1 =>", 1 == '1') // true
console.log("1 === '1' =>", 1 === '1') // false, ya que uno es un string.
console.log("1 === 1 =>", 1 === 1) // son iguales
Уже они ответили тебе правильно на вопрос, но я gustarГ, - чтобы высказывать мнение, в котором она кажется твоей проблемой (я tambiГ©n начался с java и есть некие вещи, которые javascript он облегчает).
у переменной может быть 2 состояния, "undefined" или иметь что-то, null, как в SQl это тип стоимости, а именно, которая, если твоя переменная имеет null, определена и у нее есть что-то, ничто но что-то: P, undefined означает, что твоя переменная не была определена, - любознательный человек этот факт прежде всего, из-за которого null == undefined он отвечает true.
Сейчас, когда ты ищешь элемент с js, и он это не находит (например document.getElementById ("inpt")) Ваша стоимость состоит null, в случае в том, что, если он нашел вопросы из-за Ваш, я оценил, и в случае когда этого не имеет он отвечает тебе "".
Интересная часть состоит в том, что с простым if ты решаешь много.
var una,dos = null,tres =[],cuatro = 1;
if(noexisto) //es undefinided, saca error por que estas preguntando por ella
if( typeof notoy == "undefined") //es la manera correcta de preguntar si una variable no ha sido definida
if(una)//false pero no saca error por que implicitamente tiene un null
if(una == null) //es lo mismo que la anterior
if(dos) //false pero no saca error
if(tres) //true por que contiene un array, vacio pero es algo
if("")//false por que esta vacio
if(cuatro)//tiene algo por tanto es true
В случае не transpilar твой код JS (с Вавилоном например) операция "==" быстрее, чем проверка типа с "===" следовательно, если твой код будет являться útilizado часто (это часть архитектуры или какого-то книжного магазина) предпочтительно использовать "==" имея в виду, что ты не будешь перемещать фильтр типа. В оставшейся части случаев (большинство) лучше использовать проверку типов с "===", чтобы предотвращать неожиданные результаты.