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
为了满足以下条件,应该给"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