plain-object-to-string.js (818B)
1 // Test for OrdinaryToPrimitive called on a plain object with hint "string". 2 3 function assertStr(o, s) { 4 assertEq(String(o), s); 5 } 6 function test() { 7 assertStr({x: 1}, "[object Object]"); 8 assertStr({[Symbol.toStringTag]: "Foo"}, "[object Foo]"); 9 assertStr({toString() { return 123; }}, "123"); 10 assertStr({toString: Math.abs}, "NaN"); 11 assertStr({x: "hello", toString() { return this.x; }}, "hello"); 12 13 let c = 0; 14 let fun = () => "hi-" + ++c; 15 assertStr({toString: fun}, "hi-1"); 16 assertStr({toString: "foo", valueOf: fun}, "hi-2"); 17 assertStr({toString() { return {}; }, valueOf: fun}, "hi-3"); 18 19 let proto = {}; 20 proto[Symbol.toStringTag] = null; 21 assertStr(Object.create(proto), "[object Object]"); 22 proto[Symbol.toStringTag] = "Bar"; 23 assertStr(Object.create(proto), "[object Bar]"); 24 } 25 test();