0 !== 2 ← "2" console.log(true == "1"); // true.... true → 1 === 1 ← "1" console.log(false == "0"); // true.... false → 0 === 0 ← "0" console.log(false == "" ); // true.... false → 0 === 0 ← "" console.log(false == NaN); // false... false → 0 !== NaN console.log(NaN == NaN); // false...... NaN is not equivalent to anything, including NaN. // Type checked comparison (no conversion of types and values) console.log(true === 1); // false...... data types do not match // Explicit type coercion console.log(true === !!2); // true.... data types and values match console.log(true === !!0); // false... data types match, but values differ console.log( 1 ? true : false); // true.... only ±0 and NaN are "falsy" numbers console.log("0" ? true : false); // true.... only the empty string is "falsy" console.log(Boolean({})); // true.... all objects are "truthy" The new operator can be used to create an object wrapper for a Boolean primitive. However, the operator does not return for the object wrapper, it returns . Because all objects evaluate as , a method such as , or , must be used to retrieve the wrapped value. For explicit coercion to the Boolean type, Mozilla recommends that the function (without ) be used in preference to the Boolean object. var b = new Boolean(false); // Object false {} var t = Boolean(b); // Boolean true var f = Boolean(b.valueOf()); // Boolean false var n = new Boolean(b); // Not recommended n = new Boolean(b.valueOf()); // Preferred if (0 || -0 || "" || null || undefined || b.valueOf() || !new Boolean() || !t) { console.log("Never this"); } else if ([] && {} && b && typeof b === "object" && b.toString() === "false") { console.log("Always this"); } Symbol New in ECMAScript6. A Symbol is a unique and immutable identifier. Example: var x = Symbol(1); var y = Symbol(1); x === y; // => false var symbolObject = {}; var normalObject = {}; // since x and y are unique, // they can be used as unique keys in an object symbolObject[x] = 1; symbolObject[y] = 2; symbolObject[x]; // => 1 symbolObject[y]; // => 2 // as compared to normal numeric keys normalObject[1] = 1; normalObject[1] = 2; // overrides the value of 1 normalObject[1]; // => 2 // changing the value of x does not change the key stored in the object x