Javascript 为什么是';0';不等于空列表?

Javascript 为什么是';0';不等于空列表?,javascript,equals,Javascript,Equals,如果0(作为数字)等于0(作为字符串),0等于空列表,为什么作为字符串的0不等于空列表(从作为数字的0等于作为字符串的0开始) 要了解代码的结果,您需要了解==相等运算符在以下情况下的工作方式: 当两个操作数的类型相同时,返回严格相等比较的结果== 如果一个操作数是数字,另一个是字符串,请将字符串操作数转换为数字 如果任何一个或两个操作数都是非基元,请将非基元操作数转换为基元值 记住上述几点,让我们看看如何处理每个比较: 0==“0” 由于将'0'转换为一个数字,然后执行严格的相等比较,因为

如果0(作为数字)等于0(作为字符串),0等于空列表,为什么作为字符串的0不等于空列表(从作为数字的0等于作为字符串的0开始)


要了解代码的结果,您需要了解
==
相等运算符在以下情况下的工作方式:

  • 当两个操作数的类型相同时,返回严格相等比较的结果
    ==
  • 如果一个操作数是数字,另一个是字符串,请将字符串操作数转换为数字
  • 如果任何一个或两个操作数都是非基元,请将非基元操作数转换为基元值
记住上述几点,让我们看看如何处理每个比较:

  • 0==“0”

    由于将
    '0'
    转换为一个数字,然后执行严格的相等比较,因为在将
    '0'
    转换为一个数字后,两个操作数具有相同的类型,因此计算结果为true

  • 0=[]

    返回true,因为当
    ==
    运算符的任何操作数为非基元时,它将转换为基元值。将空数组转换为基元值时,将生成空字符串。所以在这个转换之后,你有了
    0=''
    。现在一个操作数是数字,另一个是字符串。然后将空字符串转换为一个数字,该数字将导致
    0
    ,从而比较
    0==0
    ,其计算结果为true

  • '0'=[]

    这返回false,因为空数组被转换为一个空字符串的基元值。当
    []
    转换为空字符串时,两个操作数的类型(
    '0'=''
    )相同,因此执行严格的相等比较,返回false


  • 有关详细信息,请参见JavaScript中的

    ,double equals并不表示严格等于,而tripple equals则表示严格等于。在前一种情况下,转换是根据所涉及的类型进行的,而在后一种情况下,不存在这种可用的转换(导致半相等)。

    JavaScript就是这样设计的。 在
    0=='0'
    =
    将“0”转换为0,因为右操作数是一个数字 所以它检查0==0,这是真的。 提示使用名为strick equality comparison的
    ==
    进行检查,它将
    0
    视为一个数字,将
    '0'
    视为一个字符串

    0=[]
    在Javascript中,空数组被视为伪数组,而0始终为false,1始终为true

    所以==比较
    false==false
    哪个是真的。再次使用严格的等号
    ==

    '0'=[]

    这里因为[]不是一个数字,所以Javascript不关心将“0”转换为0,这意味着比较是比较字符串和数组,这将不为真。

    。你有3个箱子

  • 写入“0”==0时,utf-8中“0”的值为0,因此
    false==false为真

  • 字符串在python中基本上是一个列表当您编写“0”时,您基本上是在用一个元素创建一个列表 “0”即“0”=['0']而不是[],因此true==false为false

  • 而当您写入0=[]时,每个0值都是false,空列表返回列表中元素数的布尔值,该值对于0为false,因此false==false为true


  • 这已经被问了很多次了,肯定是一个纯粹的复制品。@Hi IloveSO是的,我没有看到它。
    > 0 == '0'
    true
    > 0 == []
    true
    > '0' == []
    false