Подтвердить что ты не робот

Javascript логический оператор "! =="?

Я возвращаюсь к веб-разработке и в последнее время пытаюсь пересмотреть нюансы jscript. Я проливал источник библиотеки расширений THREEx, построенный на вершине Three.JS, и заметил эту функцию

THREEx.KeyboardState.prototype.pressed  = function(keyDesc)
{
    var keys    = keyDesc.split("+");
    for(var i = 0; i < keys.length; i++){
        var key     = keys[i];
        var pressed;
        if( THREEx.KeyboardState.MODIFIERS.indexOf( key ) !== -1 ){
            pressed = this.modifiers[key];
        }else if( Object.keys(THREEx.KeyboardState.ALIAS).indexOf( key ) != -1 ){
            pressed = this.keyCodes[ THREEx.KeyboardState.ALIAS[key] ];
        }else {
            pressed = this.keyCodes[key.toUpperCase().charCodeAt(0)];
        }
        if( !pressed)   return false;
    };
    return true;
}

Я смотрю, в частности, на линии:

if( THREEx.KeyboardState.MODIFIERS.indexOf( key ) !== -1 ){

Я не знаком с этим! == оператором. Я проверил w3schools и их список логических операторов не включил этот. Я не уверен, написано ли это с ошибкой, и браузеры просто считают это = = или если у него есть другое значение. Также мне было интересно, действительно ли это один логический оператор или это какая-то комбинация, например! + ==?

4b9b3361

Ответ 1

Вы можете найти операторы === и !== на нескольких других языках с динамической типизацией. Это всегда означает, что эти два значения сравниваются не только по их "подразумеваемому" значению (то есть оба или оба значения могут быть преобразованы, чтобы сделать их сопоставимыми), но также и их исходным типом.

Это в основном означает, что если 0 == "0" возвращает true, 0 === "0" вернет false, потому что вы сравниваете число и строку. Аналогично, в то время как 0 != "0" возвращает false, 0 !== "0" возвращает true.

Ответ 2

Это != без принуждения типа. См. Документацию MDN для операторов сравнения.

Также см. fooobar.com/questions/61/..., который включает цитату из "JavaScript: Хорошие детали" о проблемах с == и !=. (null == undefined, false == "0" и т.д.)

Короткий ответ: всегда используйте === и !==, если у вас нет веских оснований для этого. (Инструменты вроде JSLint, JSHint, ESLint и т.д. даст вам этот же совет.)

Ответ 3

Скопировано из формальной спецификации: ECMAScript 5.1 раздел 11.9.5

11.9.4 Оператор Strict Equals (===)

Производство EqualityExpression: EqualityExpression === RelationalExpression оценивается следующим образом:

  • Пусть lref является результатом вычисления выражения EqualityExpression.
  • Пусть lval - GetValue (lref).
  • Пусть rref является результатом вычисления RelationalExpression.
  • Пусть rval - GetValue (rref).
  • Возвращает результат выполнения строгой проверки равенства rval === lval. (См. 11.9.6)

11.9.5 Строгий оператор не равных (! ==)

Производство EqualityExpression: EqualityExpression! == RelationalExpression оценивается следующим образом:

  • Пусть lref является результатом вычисления выражения EqualityExpression.
  • Пусть lval - GetValue (lref).
  • Пусть rref является результатом вычисления RelationalExpression.
  • Пусть rval - GetValue (rref). Пусть r - результат выполнения строгого сравнения сравнений rval === lval. (См. 11.9.6)
  • Если r true, верните false. В противном случае верните true.

11.9.6 Алгоритм сравнения строгого равенства

Сравнение x === y, где x и y - значения, выражает true или false. Такое сравнение выполняется следующим образом:

  • Если тип (x) отличается от типа (y), верните false.
  • Тип (x) Undefined, возвращает true.
  • Тип (x) - Null, возвращает true.
  • Тип (x) - это номер, затем
    • Если x является NaN, верните false.
    • Если y является NaN, верните false.
    • Если x - это то же значение числа, что и y, верните true.
    • Если x равно +0 и y равно -0, верните true.
    • Если x равно -0, а y равно +0, верните true.
    • Возвращает false.
  • Если Type (x) - String, верните true, если x и y - точно такая же последовательность символов (одинаковая длина и одинаковые символы в соответствующих позициях); в противном случае верните false.
  • Если тип (x) является логическим, верните true, если x и y оба true или оба false; в противном случае верните false.
  • Возвращает true, если x и y относятся к одному и тому же объекту. В противном случае верните false.

Ответ 4

Оператор !== проверяет, не являются ли значения одинаковыми или нет. то есть.

var x = 5;
var y = '5';
var 1 = y !== x; // true
var 2 = y != x; // false

Ответ 5

ссылка здесь

! == является строгим не равным оператором и возвращает значение true только в том случае, если оба операнда не равны и/или не относятся к одному типу. Следующие примеры возвращают логическое значение true:

a !== b 
a !== "2" 
4 !== '4' 

Ответ 6

!==

Это строгий не равный оператор и возвращает значение true если оба операнда не равны и/или не того же типа. следующие примеры возвращают логическое значение true:

a !== b
a !== "2"
4 !== '4'