为啥 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 代码:

&lt;body&gt; &lt;script src="logic_operators.js"&gt;&lt;/script&gt; &lt;/body&gt;

文件“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) + '&lt;br/&gt;');

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

【问题讨论】:

b/c 否则读作docwrite value1 === true or (value2===true + &lt;br&gt;) 【参考方案1】:

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

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

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

导致

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

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

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

所以它发生value1value2 的这些特定值生成你想要的换行符。

虽然您可以通过使用括号或使用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以及如何将其与方法一起使用

春季启动时出现Cors错误,将其与反应连接并尝试在tomcat或jboss服务器上部署?

Parent从文件中读取操作,子项将其与bc相加