为啥 JavaScript 在尝试将其与运算符 OR 的结果连接时会忽略 HTML <br/> 标签?
Posted
技术标签:
【中文标题】为啥 JavaScript 在尝试将其与运算符 OR 的结果连接时会忽略 HTML <br/> 标签?【英文标题】:Why JavaScript ignores the HTML <br/> label when trying to concatenate it with the result of the operator OR?为什么 JavaScript 在尝试将其与运算符 OR 的结果连接时会忽略 HTML <br/> 标签? 【发布时间】:2021-08-28 19:51:42 【问题描述】:抱歉这个问题,我不知道怎么问。基本上我正在使用逻辑运算符练习 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 新手,无法真正弄清楚这一点。
【问题讨论】:
b/c 否则读作docwrite value1 === true or (value2===true + <br>)
【参考方案1】:
+
的 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 来避免此问题,但它应该是much, much better to avoid document.write
completely.
【讨论】:
我猜 && 也一样? @Kinglish 正要问同样的问题。这很奇怪,因为它似乎与 && 以不同的方式工作,它实际上应用了新行,即使它也具有较低的运算符优先级。 @DamianGDO 查看答案的中间部分 我太笨了,我第一次真的没看到,一定是眨了眨眼。以上是关于为啥 JavaScript 在尝试将其与运算符 OR 的结果连接时会忽略 HTML <br/> 标签?的主要内容,如果未能解决你的问题,请参考以下文章
如何比较 C++ slice_array?为啥不能将其与 valarray 进行比较?
easelJS - 使用 Javascript 调整图像大小,然后将其与 SpriteSheet 一起使用
JavaScript–欧元™s setTimeout以及如何将其与方法一起使用