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

Dam*_*GDO 1 html javascript logic operators

抱歉问这个问题,我不知道该怎么问。基本上我正在使用逻辑运算符练习 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/>');
Run Code Online (Sandbox Code Playgroud)

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

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

false
truefalse
true
Run Code Online (Sandbox Code Playgroud)

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

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

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

Cer*_*nce 5

+具有比更高的运算符优先级||。具体来说,+ 有 14 和 || 有 6。所以,+当没有括号将三个运算符分组时,首先完成操作。

document.write(value1 || value2 + '<br/>');
Run Code Online (Sandbox Code Playgroud)

document.write(value1 || (value2 + '<br/>')
Run Code Online (Sandbox Code Playgroud)

导致

document.write(true || (false + '<br/>')
Run Code Online (Sandbox Code Playgroud)
document.write(true)
Run Code Online (Sandbox Code Playgroud)

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

document.write(value1 && value2 + '<br/>');
Run Code Online (Sandbox Code Playgroud)
document.write(true && false + '<br/>');
Run Code Online (Sandbox Code Playgroud)
document.write(true && (false + '<br/>'));
Run Code Online (Sandbox Code Playgroud)
document.write(false + '<br/>');
Run Code Online (Sandbox Code Playgroud)

因此,它恰好value1and 的这些特定值生成了您想要的换行符value2

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

  • 我想 &amp;&amp; 也一样吗? (2认同)
  • @DamianGDO 查看答案的中间部分 (2认同)