Javascript—为什么这个if语句会打印“Javascript”;“你好”;两次在控制台?

Javascript—为什么这个if语句会打印“Javascript”;“你好”;两次在控制台?,javascript,Javascript,对于此示例代码,它会在控制台中打印两次“Hello”: var x=10; if((null)| |(console.log(“Hello”)| | x>5){ console.log(“你好”); }console.log的返回类型为未定义 您将看到console.log输出两次,因为您已经调用了两次: 一次在if条件中,下一次在if语句中 您的if语句将运行,因为您正在使用OR,并且x=10>5if语句首先遇到null,这是false,然后执行console.log(),它返回undefi

对于此示例代码,它会在控制台中打印两次“Hello”:

var x=10;
if((null)| |(console.log(“Hello”)| | x>5){
console.log(“你好”);

}
console.log的返回类型为未定义

您将看到console.log输出两次,因为您已经调用了两次:

一次在if条件中,下一次在if语句中


您的if语句将运行,因为您正在使用OR,并且x=10>5

if
语句首先遇到
null
,这是false,然后执行
console.log()
,它返回
undefined
,因此也是false,最后是
x>5
,这是true。因此,
if
语句为true,它进入正文并进行另一次打印

我假设当读取“if”语句时,它读取console.log,然后打印它,因为x>5,所以返回语句为true,然后控制台第二个“Hello”

更准确地说,“if”语句是执行的。具体而言,对条件进行评估。由于
null
为“false”,因此将计算
|
运算符的右侧。它执行第一个
console.log()
。这依次返回
未定义的
,这也是“false”,并计算下一个
|
的下一个操作数
x>5
的计算结果为
true
,因此执行第二个
console.log()


请注意,这不是编写代码的好方法
console.log()
不应在
条件下使用。它的返回值没有意义,因为它总是返回
未定义的

您编写的第一个console.log位于if语句中,在计算if语句时将调用该函数。如果满足if语句中的条件,将调用第二个语句。console.log本身返回未定义的,并且在if语句中没有真正的用途。我会建议删除它,因为我不相信它是实现你的意图 祝你好运:)

你的功能:

  • 设置变量及其值
    var x=10

  • 检查条件,直到其中一个“为”
    true
    (返回
    true

  • (null)
    返回自身,因此函数检查其他条件
  • (console.log(“Hello”)
    不返回任何内容(
    null
    ),因此函数 检查其他情况

  • x>5
    返回
    true
    ,因此如果发生{
    }
    ,则执行
    中的代码

  • (console.log(“Hello”)
    如果{}
  • 执行,则在
    内部执行
    
    如您所见,
    (console.log(“Hello”)
    在检查
    if
    语句内部的条件和执行该
    if
    语句的“内部”时同时执行。这就是为什么您会看到“Hello”被记录了两次。

    为了进一步澄清,第一和第二个条件语句将始终执行,因为即使运算符是&&,它也需要至少从两个条件进行验证。@alex067这不太正确:如果它是
    &
    且LHS为false,翻译将短路并跳过RHS(无需评估,因为整体将是错误的)。@Klaycon哦,是的,这是真的,对不起,我没有思考straight@alex067在
    |
    的情况下,如果第一个操作数的计算结果为
    true
    ,则将不计算其余操作数。