Javascript Can';我不理解条件执行流

Javascript Can';我不理解条件执行流,javascript,Javascript,一个简单的js代码段。为什么它总是保持警惕 “结果为空” 根据我的理解,if块应该执行,因为结果=“为true并发出警报 “结果不是空的” <script> var result = false; if(result != "") alert('result is not empty') else alert('result is empty') </script> var结果=假; 如果(结果!=“”) 警报('结果不为空') 其他的 警报('结果为空') 这是因为

一个简单的js代码段。为什么它总是保持警惕

“结果为空”

根据我的理解,
if
块应该执行,因为
结果=“
true
并发出警报

“结果不是空的”

<script>
var result = false;
if(result != "")
alert('result is not empty')
else
alert('result is empty')
</script>

var结果=假;
如果(结果!=“”)
警报('结果不为空')
其他的
警报('结果为空')

这是因为
=执行隐式类型转换。如果您使用的是严格版本,
==,它将执行您期望的操作。但是松散的版本,
=
,将这两个操作数都转换为数字,而
false都将转换为
0
,因此
!=false
为false,因为它(通过一系列卷积)最终为
0!=0

规范中的算法对此进行了详细阐述:

  • 返回一个brupt(x)
  • 返回初始值(y)
  • 如果类型(x)与类型(y)相同,则 返回执行严格相等比较的结果x==y
  • 如果x为null而y未定义,则返回true
  • 如果x未定义且y为null,则返回true
  • 如果类型(x)是数字,类型(y)是字符串, 返回比较结果x==ToNumber(y)
  • 如果类型(x)是字符串,类型(y)是数字, 将比较结果返回到数字(x)=y
  • 如果类型(x)是布尔值,则返回比较结果tonNumber(x)==y
  • 如果类型(y)是布尔值,则返回比较结果x==ToNumber(y)
  • 如果类型(x)是字符串、数字或符号,而类型(y)是对象,则 返回比较结果x==ToPrimitive(y)
  • 如果类型(x)是对象,类型(y)是字符串、数字或符号,则 返回比较结果ToPrimitive(x)==y
  • 返回false
  • 从上面我们可以看到,如果我们从
    false
    开始,那么:

    • 我们按照步骤8,将
      false
      转换为
      0
      ,然后从
      0!=“”
    • 我们按照第6步,将
      转换为
      0
      ,然后从
      0!=0
    • 我们按照步骤3得到结果
      false
      (因为我们正在做
      !=
      ,而算法是根据
      =
      定义的)

      • 这是因为
        =执行隐式类型转换。如果您使用的是严格版本,
        ==,它将执行您期望的操作。但是松散的版本,
        =
        ,将这两个操作数都转换为数字,而
        false都将转换为
        0
        ,因此
        !=false
        为false,因为它(通过一系列卷积)最终为
        0!=0

        规范中的算法对此进行了详细阐述:

      • 返回一个brupt(x)
      • 返回初始值(y)
      • 如果类型(x)与类型(y)相同,则 返回执行严格相等比较的结果x==y
      • 如果x为null而y未定义,则返回true
      • 如果x未定义且y为null,则返回true
      • 如果类型(x)是数字,类型(y)是字符串, 返回比较结果x==ToNumber(y)
      • 如果类型(x)是字符串,类型(y)是数字, 将比较结果返回到数字(x)=y
      • 如果类型(x)是布尔值,则返回比较结果tonNumber(x)==y
      • 如果类型(y)是布尔值,则返回比较结果x==ToNumber(y)
      • 如果类型(x)是字符串、数字或符号,而类型(y)是对象,则 返回比较结果x==ToPrimitive(y)
      • 如果类型(x)是对象,类型(y)是字符串、数字或符号,则 返回比较结果ToPrimitive(x)==y
      • 返回false
      • 从上面我们可以看到,如果我们从
        false
        开始,那么:

        • 我们按照步骤8,将
          false
          转换为
          0
          ,然后从
          0!=“”
        • 我们按照第6步,将
          转换为
          0
          ,然后从
          0!=0
        • 我们按照步骤3得到结果
          false
          (因为我们正在做
          !=
          ,而算法是根据
          =
          定义的)

        Javascript检查真实值

        false != "" 
        
        是假的

        false !== ""
        

        是true,因此您可以尝试使用。

        Javascript检查truthy值

        false != "" 
        
        是假的

        false !== ""
        

        是真的,所以你可以试试看。

        在javascript中,两个错误是相等的,就像在本例中,
        结果!=“
        产生
        false


        您需要使用严格的比较,即
        ==
        进行比较<代码>结果!==“
        产生
        true

        在javascript中,两个错误可以相等,在本例中,
        结果!=“
        产生
        false


        您需要使用严格的比较,即
        ==
        进行比较<代码>结果!==“
        产生
        true

        因为”“是一个虚假的值。@jalooc不,这不是reason@Bergi当然是:
        =强制转换值,以便
        false!=''
        解析为
        false
        @jalooc,但它将
        转换为一个数字(
        数字(“”
        ),而不是布尔值(
        布尔值(“”
        ),所以它的错误性并不重要。@Bergi“0”数字仍然是错误的,不是吗?只需执行
        false!=''在devtools控制台中。您将得到
        false
        ,而不是
        true
        ,正如您在问题中错误地陈述的那样。因为“”是一个错误的值。@jalooc不,这不是reason@Bergi当然是:
        =强制转换值,以便
        false!=''
        解析为
        false
        @jalooc,但它将
        转换为一个数字(
        数字(“”
        ),而不是布尔值(
        布尔值(“”
        ),所以它的错误性无关紧要。@Bergi“0”数字仍然是错误的,不是吗