JavaScript中的强制

JavaScript中的强制,javascript,coercion,Javascript,Coercion,我想知道一些关于强迫的事情 当您这样做时: 1 == true // true 哪一个被强迫进入哪一个?是左边的还是右边的 当你这样做的时候 undefined == null // true 它到底是如何工作的? 它尝试按什么顺序转换它? 举例来说: 1) String(undefined) == String(null) // false 2) Number(undefined) == Number(null) // false 3) Boolean(undefined

我想知道一些关于强迫的事情

当您这样做时:

1 == true // true
哪一个被强迫进入哪一个?是左边的还是右边的

当你这样做的时候

undefined == null // true
它到底是如何工作的? 它尝试按什么顺序转换它? 举例来说:

1)    String(undefined) == String(null) // false
2)    Number(undefined) == Number(null) // false
3)    Boolean(undefined) == Boolean(null) // true
它是否首先尝试强制左侧操作数?那是对的?那么两者都有

编辑: 如评论中所述:
“不是重复的。虽然这两个问题都是关于类型强制的,但这一个问题询问哪一个操作数被强制到另一个操作数中。另一个问题是关于在评估强制类型时真实性的来源”

该过程描述于:

比较x==y,其中x和y是值,生成true或false。这样的比较如下所示:

  • 如果类型(x)与类型(y)相同,则返回执行严格相等比较的结果x==y

  • 如果x为null而y未定义,则返回true

  • 如果x未定义且y为null,则返回true

  • 如果Type(x)是Number,Type(y)是String,则返回比较结果x==ToNumber(y)

  • 如果Type(x)是String,Type(y)是Number,则返回比较结果ToNumber(x)==y

  • 如果类型(x)是布尔值,则返回比较结果tonNumber(x)==y

  • 如果类型(y)是布尔值,则返回比较结果x==ToNumber(y)

  • 如果类型(x)是字符串、数字或符号,而类型(y)是对象,则返回比较结果x==ToPrimitive(y)

  • 如果类型(x)是Object,类型(y)是String、Number或Symbol,则返回比较结果ToPrimitive(x)==y

  • 返回false


  • 因此,与其先强制一方,然后强制另一方,或者诸如此类,解释器更需要遍历上面的列表,直到找到匹配的条件,并执行结果命令,这可能只涉及强制左侧或右侧(并且,在达到递归命令的情况下,如使用满足条件8的
    true=='1'
    ,这两种情况都很少发生,变成
    1=='1'
    ,满足条件6并变成
    1==1
    ,满足条件3并解析为
    true

    @adiga绝对不是重复的。虽然这两个问题都是关于类型强制的,但这一个问题询问哪一个操作数被强制到另一个操作数中。另一个问题是关于在计算被强制的操作数时真理的来源types@adiga这不是重复。标记的链接正在检查相等,这篇文章正在询问相等的过程。这就像为什么1==true是true vs 1==正确的方式true@Rajesh这可能是一个重复的问题。它们是相关的。这对未来的用户(和OP)来说是很有用的,他们来到这个问题时可能会想阅读链接的问题。@adiga:重复的问题是“重复的问题”,而不是“有类似答案的相关问题”。所以它肯定不是一个副本。@SalmanA我可能读错了,但在8中,它不能同时是两个吗?这个算法称自己是对的吗?@kaido在8中,y不是强制的。同样在9中(x不是强制的)。@SalmanA还没有,但是在下一次出现的
    数字(x)的比较中=y.y/<代码>它可能是no .@ SalMaA 8递归调用<代码>=< /COD>进程,所以我确信它是可能的吗?考虑<代码>真= = 1”< /代码>