Javascript toPrimitive为模板文字和字符串文字提供不同的结果

Javascript toPrimitive为模板文字和字符串文字提供不同的结果,javascript,Javascript,我想知道为什么在这种情况下模板字符串会产生[object object]: class Omg {} const omg = new Omg() Omg.prototype.valueOf = () => 6; +omg // 6 omg + '' // "6" '' + omg // "6" `${omg}` // "[object Object]" 模板字符串显然使用Object.toString()来“翻译”其中的占位符(${…})。模板字符串是奇妙的小动物;)如果您最好需要

我想知道为什么在这种情况下模板字符串会产生
[object object]

class Omg {}

const omg = new Omg()

Omg.prototype.valueOf = () => 6;

+omg
// 6
omg + ''
// "6"
'' + omg
// "6"
`${omg}`
// "[object Object]"

模板字符串显然使用
Object.toString()
来“翻译”其中的占位符(
${…}
)。模板字符串是奇妙的小动物;)如果您最好需要在模板字符串中使用
valueOf
,则可以使用
标记函数
(请参见代码段和)

class Omg{}
const omg=new omg()
Omg.prototype.valueOf=()=>6;
控制台日志(+omg)
console.log(omg+'');
控制台日志(“”+omg);
log(`${omg}`);
//注:7演示标记功能
Omg.prototype.toString=()=>7;
log(`${omg}`);
//可以使用标记函数强制使用valueOf
函数UseValueOfWhere可能(字符串,…占位符){
让结果=strings.raw[0];
for(占位符.entries()的常量[i,phldr]{
结果+=(phldr.valueOf()| | phldr)+strings.raw[i+1];
}
返回结果;
}

log(UseValueOfWhere可能`${omg}`)模板字符串显然使用
Object.toString()
来“翻译”其中的占位符(
${…}
)。模板字符串是奇妙的小动物;)如果您最好需要在模板字符串中使用
valueOf
,则可以使用
标记函数
(请参见代码段和)

class Omg{}
const omg=new omg()
Omg.prototype.valueOf=()=>6;
控制台日志(+omg)
console.log(omg+'');
控制台日志(“”+omg);
log(`${omg}`);
//注:7演示标记功能
Omg.prototype.toString=()=>7;
log(`${omg}`);
//可以使用标记函数强制使用valueOf
函数UseValueOfWhere可能(字符串,…占位符){
让结果=strings.raw[0];
for(占位符.entries()的常量[i,phldr]{
结果+=(phldr.valueOf()| | phldr)+strings.raw[i+1];
}
返回结果;
}
log(UseValueOfWhere可能`${omg}`)