JavaScript模板文字和隐式强制

时间:2019-02-18 20:18:22

标签: javascript coercion template-literals

应满足以下条件为"x"分配什么值:

// let x = ?; 

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

1 个答案:

答案 0 :(得分:0)

类似的事情可以奏效,但这很棘手,toString()对象的方法x会在每次调用时更改其内部状态并返回它。发生这种情况是因为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