2012-09-25 4 views
1

Я использую ворс и для следующих целей:Что случилось с тем, если (json.RowKey = json.NewRowKey!)

if (json.RowKey != json.NewRowKey) 

Это дает мне сообщение:

Expected '!==' and instead saw '!='. 

Может кто-то объяснить, что это означает?

+2

«Крокфорд сказал, что использование двойных равным (==) для сравнения объектов всегда плохая идея, потому что это делает неявное преобразование типов.» [0] (http://osric.com/chris/accidental-developer/2012/01/douglas-crockford-programming-style-and-your-brain/) [1] (http://shop.oreilly.com /product/9780596517748.do) – pdoherty926

ответ

1

== попытается преобразовать типы двух операндов, чтобы они были одинаковыми, прежде чем сравнивать их. Таким образом, "2" == 2 - true.

=== не будет пытаться преобразовать типы двух операндов, поэтому, если они не одного типа, они никогда не будут ===. Таким образом, "2" === 2 - false.

Лучше использовать === и !== как ваш выбор по умолчанию и использовать только == или != когда вы явно хотите, чтобы преобразование типа. Если вы не ожидаете, что два операнда будут разных типов, то === и !== с большей вероятностью будут делать то, что вы ожидаете.

Это позволяет избежать ошибок при кодировании, когда вещи на самом деле не равны, и ваш код не предназначен для того, чтобы они были равны.

Некоторые необычные вещи, которые происходят с == (и не случаются с ===), которые вы не можете ожидать и могут привести к неприятностям. Все эти оценки в true:

null == undefined 
false == '0' 
0 == '0' 
0 == '' 

Там более подробно написано здесь: Which equals operator (== vs ===) should be used in JavaScript comparisons?

0

Это предупреждение, что говорит вам, что вы должны рассмотреть возможность использования оператора !== вместо !=.

С поверхности они оба выполняют одно и то же: сравните, не совпадают ли эти два элемента. Однако !== гарантирует, что оба элемента имеют один и тот же тип (т. Е. Он не будет пытаться преобразовать, скажем, строку в число, если один сравниваемый элемент является строкой, а другой - числом), поэтому это в целом безопаснее использовать и помогает избежать ошибок сравнения.

Для получения более подробной информации, смотрите здесь: Which equals operator (== vs ===) should be used in JavaScript comparisons?

0

Да,

if("1" == 1) //Returns true because it will convert the second 1 into a string to match 

но

"1" !== 1 //Returns false because the first 1 is a string and the second 1 is an integer. 

Мы говорим о переменных типов; с двумя равными знаками, javascript (и php) будет вызывать переменную для вас (преобразовать целое число 1 в строку 1, чтобы сделать совпадение и быть истинным), но со вторым утверждением это не будет.

1 === 1 //True 
1 === "1" //False 
1 == "1" //True 
1 == 1 //True 

Надеюсь, что мой ответ имеет смысл для вас.

1

!== не равно (ни значение или типа) Например: var x = 5; x !== "5" returns true var x = 5; x !== 5 returns false

Смежные вопросы