tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

object-tostring.js (1578B)


      1 function doTest(expected, v) {
      2    assertEq(Object.prototype.toString.call(v), expected)
      3 }
      4 
      5 function Dummy() {}
      6 
      7 // Basic primitive cases
      8 doTest("[object Undefined]", undefined);
      9 doTest("[object Null]", null);
     10 doTest("[object String]", "");
     11 doTest("[object Number]", 12);
     12 doTest("[object Number]", 12.34);
     13 doTest("[object Boolean]", true);
     14 doTest("[object Symbol]", Symbol());
     15 doTest("[object BigInt]", 1234n);
     16 
     17 // Exotic objects with builtinTag
     18 doTest("[object Array]", []);
     19 (function() {
     20    doTest("[object Arguments]", arguments);
     21 })();
     22 doTest("[object Function]", () => {});
     23 doTest("[object Error]", new Error);
     24 doTest("[object Date]", new Date);
     25 doTest("[object RegExp]", /i/);
     26 
     27 // Exotic objects with @@toStringTag
     28 doTest("[object Map]", new Map);
     29 doTest("[object Set]", new Set);
     30 doTest("[object JSON]", JSON);
     31 doTest("[object Math]", Math);
     32 
     33 // Normal object cases
     34 doTest("[object Object]", {});
     35 doTest("[object Object]", new Dummy);
     36 doTest("[object Foo]", { [Symbol.toStringTag]: "Foo" });
     37 
     38 // Test the receiver of Symbol.toStringTag
     39 let receiver1;
     40 let object1 = {
     41    __proto__: {
     42        get [Symbol.toStringTag]() {
     43            receiver1 = this;
     44        }
     45    }
     46 };
     47 doTest("[object Object]", object1);
     48 assertEq(receiver1, object1);
     49 
     50 //// BELOW THIS LINE TAMPERS WITH GLOBAL
     51 
     52 // Set a toStringTag on the global String.prototype
     53 let receiver2;
     54 Object.defineProperty(String.prototype, Symbol.toStringTag, { get: function() {
     55    receiver2 = this;
     56    return "XString";
     57 }});
     58 doTest("[object XString]", "");
     59 assertEq(Object.getPrototypeOf(receiver2), String.prototype);