See this variable definition:
var rawStr = "test"; // 1
var objStr = new String("test"); // 2
1. A primitive string is defined.2. A wrapper object String is defined.
The two variables could be usually considered as identical, still they are not strictly the same:
if(rawStr == objStr) // 1
console.log("rawStr is a " + typeof(rawStr) + ", objStr is a " + typeof(objStr));
if(rawStr !== objStr) // 2
console.log("strictly speaking, a string is not equal to an object String");
1. A raw string and a wrapper String containing the same sequence of characters are loosely seen as equal, but the typeof() operator shows that they actually have a different type (string and object).2. If we strictly compare them, we see that they are actually different.
Same behavior applies to numbers and booleans:
var rawNum = 42;
var objNum = new Number(42);
if(rawNum == objNum)
console.log("rawNum is a " + typeof(rawNum) + ", objNum is a " + typeof(objNum));
if(rawNum !== objNum)
console.log("strictly speaking, a number is not equal to an object Number");
No comments:
Post a Comment