1

抱歉这个问题,我不知道怎么问。基本上我正在使用逻辑运算符练习 JavaScript。我有一个非常简单的 HTML 代码:

<body> <script src="logic_operators.js"></script> </body>

文件“logic_operators.js”有以下几行代码:

let value1 = true;
let value2 = false;

document.write(value1 && value2 + '<br/>');
document.write(value1 || value2 + '<br/>');
document.write(!value1 + '<br/>');
document.write(!value2 + '<br/>');

基本上,每个document.write()句子都用新的一行写出每个逻辑操作的结果。

它适用于除 OR ( || ) 之外的每个句子,它不打印新行。我得到下一个结果:

false
truefalse
true

我需要使用括号将 OR 操作括起来才能使句子起作用:

document.write((value1 || value2) + '<br/>');

这是为什么?我是 JavaScript 新手,无法真正弄清楚这一点。

4

1 回答 1

5

+具有比更高的运算符优先级||。具体来说,+ 有 14 和 || 有 6 个。因此,+当没有括号将三个运算符分组时,首先进行运算。

document.write(value1 || value2 + '<br/>');

document.write(value1 || (value2 + '<br/>')

导致

document.write(true || (false + '<br/>')
document.write(true)

&&优先级也低于+&&如果第一个操作数为真,则计算最后一个操作数。所以

document.write(value1 && value2 + '<br/>');
document.write(true && false + '<br/>');
document.write(true && (false + '<br/>'));
document.write(false + '<br/>');

因此,它恰好会value1为and的这些特定值生成您想要的换行符value2

虽然您可以通过使用括号或改用writeln来避免这个问题,但完全避免会好得多document.write

于 2021-06-11T23:11:35.787 回答