为什么 JavaScript 在尝试将其与运算符 OR 的结果连接时忽略 HTML <br/> 标签?

Why JavaScript ignores the HTML <br/> label when trying to concatenate it with the result of the operator OR?

抱歉这个问题,我不知道怎么问。基本上我在练习 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 的新手,无法真正理解这一点。

+operator precedence 高于 ||。具体来说,+ 有 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/>');

因此 碰巧 value1value2.

的这些特定值生成您想要的换行符

虽然您可以通过使用括号或使用 writeln instead, it would be much, much better to avoid document.write completely.

来避免此问题