Javascript logical "!==" operator?

JavascriptSyntaxLogical Operators

Javascript Problem Overview


I am getting back into web development, and have been trying to go over the nuances of jscript recently. I was pouring through the source of the THREEx extension library built on top of Three.JS and noticed this function

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;
}

I am looking in particular at the line here:

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

I am not familiar with this !== operator. I checked w3schools and their logical operators list does not have this one included. I am not sure if this is misspelled and the browsers simply count it as != or if it has some other meaning. Also I was wondering whether this is actually a single logical operator or whether it is some kind of combination, like ! + ==?

Javascript Solutions


Solution 1 - Javascript

You can find === and !== operators in several other dynamically-typed languages as well. It always means that the two values are not only compared by their "implied" value (i.e. either or both values might get converted to make them comparable), but also by their original type.

That basically means that if 0 == "0" returns true, 0 === "0" will return false because you are comparing a number and a string. Similarly, while 0 != "0" returns false, 0 !== "0" returns true.

Solution 2 - Javascript

It's != without type coercion. See the MDN documentation for comparison operators.

Also see this StackOverflow answer, which includes a quote from "JavaScript: The Good Parts" about the problems with == and !=. (null == undefined, false == "0", etc.)

Short answer: always use === and !== unless you have a compelling reason to do otherwise. (Tools like JSLint, JSHint, ESLint, etc. will give you this same advice.)

Solution 3 - Javascript

Copied from the formal specification: ECMAScript 5.1 section 11.9.5

> ### 11.9.4 The Strict Equals Operator ( === )

> The production EqualityExpression : EqualityExpression === RelationalExpression is evaluated as follows:

> 1. Let lref be the result of evaluating EqualityExpression. 2. Let lval be GetValue(lref).

  1. Let rref be the result of evaluating RelationalExpression.
  2. Let rval be GetValue(rref).
  3. Return the result of performing the strict equality comparison rval === lval. (See 11.9.6)

> ### 11.9.5 The Strict Does-not-equal Operator ( !== ) The production EqualityExpression : EqualityExpression !== RelationalExpression is evaluated as follows:

> 1. Let lref be the result of evaluating EqualityExpression. > 2. Let lval be GetValue(lref). > 3. Let rref be the result of evaluating RelationalExpression. > 4. Let rval be GetValue(rref). > Let r be the result of performing strict equality comparison rval === lval. (See 11.9.6) > 5. If r is true, return false. Otherwise, return true.

> ### 11.9.6 The Strict Equality Comparison Algorithm The comparison x === y, where x and y are values, produces true or false. Such a comparison is performed as follows:

> 1. If Type(x) is different from Type(y), return false. 2. Type(x) is Undefined, return true.

  1. Type(x) is Null, return true.
  2. Type(x) is Number, then
    1. If x is NaN, return false.
    2. If y is NaN, return false.
    3. If x is the same Number value as y, return true.
    4. If x is +0 and y is -0, return true.
    5. If x is -0 and y is +0, return true.
    6. Return false.
  3. If Type(x) is String, then return true if x and y are exactly the same sequence of characters (same length and same characters in corresponding positions); otherwise, return false.
  4. If Type(x) is Boolean, return true if x and y are both true or both false; otherwise, return false.
  5. Return true if x and y refer to the same object. Otherwise, return false.

Solution 4 - Javascript

The !== opererator tests whether values are not equal or not the same type. i.e.

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

Solution 5 - Javascript

reference http://www.devguru.com/technologies/ecmascript/quickref/comparison_operators.html">here</a>

!== is the strict not equal operator and only returns a value of true if both the operands are not equal and/or not of the same type. The following examples return a Boolean true:

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

Solution 6 - Javascript

!==

> This is the strict not equal operator and only returns a value of true > if both the operands are not equal and/or not of the same type. The > following examples return a Boolean true:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCory GrossView Question on Stackoverflow
Solution 1 - JavascriptWormboView Answer on Stackoverflow
Solution 2 - JavascriptJoe WhiteView Answer on Stackoverflow
Solution 3 - JavascriptkayView Answer on Stackoverflow
Solution 4 - JavascriptsecretformulaView Answer on Stackoverflow
Solution 5 - JavascriptBrendan CutajarView Answer on Stackoverflow
Solution 6 - JavascriptRahulView Answer on Stackoverflow