JavaScript 模板文字和隐式强制转换

JavaScript template literals and implicit coercion

为了满足以下条件,应该给"x"赋什么值:

// let x = ?; 

console.log(`${x}` != '' + x) // true
console.log(`${x}` !== '' + x) // true

像这样的东西可以工作,但它很棘手,x 对象的方法 toString() 在每次调用时都会改变他的内部状态,returns 它。发生这种情况是因为 implicit coercion 在尝试将 x 转换为字符串时生效(如果找到,它将使用对象的 toString() 方法)。

let x = {
  counter: 1,
  toString: () => x.counter++
}

console.log('' + x);
console.log(`${x}`);

console.log(`${x}` != '' + x) // true
console.log(`${x}` !== '' + x) // true