为什么 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/>');
因此 碰巧 为 value1
和 value2
.
的这些特定值生成您想要的换行符
虽然您可以通过使用括号或使用 writeln instead, it would be much, much better to avoid document.write
completely.
来避免此问题
抱歉这个问题,我不知道怎么问。基本上我在练习 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/>');
因此 碰巧 为 value1
和 value2
.
虽然您可以通过使用括号或使用 writeln instead, it would be much, much better to avoid document.write
completely.