字符串模板中的不同布尔处理?

时间:2019-05-08 03:28:43

标签: javascript

const a = 'hi';
const b = 'newTextHI'
const str = `${a.toUpperCase()}${true && `\n${b.toUpperCase()}`}`;
console.log(str);

const c = 'hi';
const d = 'newTextHI'
const str2 = `${c.toUpperCase()}${false && `\n${d.toUpperCase()}`}`;
console.log(str2);

true将被自动忽略,但是false将被评估为字符串吗?

我知道三元运算符可以得到我想要的,但是我不明白在上面的示例中布尔被区别对待的原因

1 个答案:

答案 0 :(得分:3)

expression1 && expression2

如果expression1truthy,它将返回expression2,否则将返回expression1。 (Documentation

如果被链接,则重复应用相同的逻辑。它将检查直到找到falsy值。如果找不到,则返回最后一个表达式(Short-circuit evaluation

// no falsy expressions here
// last expression returned: `string`
console.log(true && `string`)

// short-circuit at false, because what's the point of going further?
console.log(false && `string`) 

// true, 100, "string" are all truthy
// 0 is a falsy value. So, this evaluates until 0 and returns it
console.log(true && 100 && `string` && 0 && "doesn't matter")

在您的情况下,您可以改用三元运算符:

const a = 'hi';
const b = 'newTextHI'
const decider = false;
const str = `${a.toUpperCase()}${decider ? `\n${b.toUpperCase()}` : ``}`;
console.log(str);