object-loose-equality.js (1679B)
1 var obj = {}; 2 var sym = Symbol(); 3 4 var notEqual = [ 5 [obj, sym], 6 7 [0, {valueOf() { return null; }}], 8 [0, {toString() { return null; }}], 9 [null, {valueOf() { return null; }}], 10 [null, {toString() { return null; }}], 11 [undefined, {valueOf() { return null; }}], 12 [undefined, {toString() { return null; }}], 13 ["", {valueOf() { return null; }}], 14 ["", {toString() { return null; }}], 15 ["0", {valueOf() { return null; }}], 16 ["0", {toString() { return null; }}], 17 18 [0, {valueOf() { return undefined; }}], 19 [0, {toString() { return undefined; }}], 20 [null, {valueOf() { return undefined; }}], 21 [null, {toString() { return undefined; }}], 22 [undefined, {valueOf() { return undefined; }}], 23 [undefined, {toString() { return undefined; }}], 24 ["", {valueOf() { return undefined; }}], 25 ["", {toString() { return undefined; }}], 26 ["0", {valueOf() { return undefined; }}], 27 ["0", {toString() { return undefined; }}], 28 ] 29 30 var equal = [ 31 [sym, {valueOf() { return sym; }}], 32 [sym, {toString() { return sym; }}], 33 34 ["abc", {valueOf() { return "abc"; }}], 35 ["abc", {toString() { return "abc"; }}], 36 37 [1, {valueOf() { return 1; }}], 38 [1, {toString() { return 1; }}], 39 40 [1, {valueOf() { return true; }}], 41 [1, {toString() { return true; }}], 42 43 [true, {valueOf() { return true; }}], 44 [true, {toString() { return true; }}], 45 46 [true, {valueOf() { return 1; }}], 47 [true, {toString() { return 1; }}], 48 ] 49 50 for (var [lhs, rhs] of notEqual) { 51 assertEq(lhs == rhs, false); 52 assertEq(rhs == lhs, false); 53 } 54 55 for (var [lhs, rhs] of equal) { 56 assertEq(lhs == rhs, true); 57 assertEq(rhs == lhs, true); 58 }