Symbol.toPrimitive
var obj = {
[Symbol.toPrimitive](hint) {
if (hint == "number") return 10;
if (hint == "string") return "hello";
return true;
},
};
+obj; // 10 (hint: "number")
`${obj}`; // "hello" (hint: "string")
obj + ""; // "true" (hint: "default")
[] + {} vs {} + []
[] + {};
// [].toString() + {}.toString() → "" + "[object Object]" → "[object Object]"
{} + [];
// {} 被解析为代码块,变成 +[] → +("") → 0
所以 {} + [] != [] + {}(0 != "[object Object]")。