首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript中的胁迫

JavaScript中的胁迫
EN

Stack Overflow用户
提问于 2019-02-07 06:30:48
回答 1查看 1.7K关注 0票数 15

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

当你这样做时:

代码语言:javascript
运行
复制
1 == true // true

哪一个被强迫进入哪一个?是左边的还是右边的?

当你做的时候

代码语言:javascript
运行
复制
undefined == null // true

它到底是怎么工作的?它试着转换它的顺序是什么?例如:

代码语言:javascript
运行
复制
1)    String(undefined) == String(null) // false
2)    Number(undefined) == Number(null) // false
3)    Boolean(undefined) == Boolean(null) // true

它是否首先试图胁迫左边的操作数?那右边呢?那两者都是?

编辑:正如注释中所解释的:“不是重复。虽然这两个问题都是关于类型强制的,但这个问题是问哪些操作数被胁迫到另一个操作数中。另一个问题是在评估胁迫类型时,真相的来源。”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-07 06:35:35

该过程在7.2.12抽象平等比较中描述。

比较x == y,其中x和y是值,产生真或假。这样的比较如下所示:

  1. 如果Type(x)与Type( y )相同,则返回执行严格等式比较x === y的结果。
  2. 如果x是null,y是未定义的,则返回true。
  3. 如果x未定义且y为null,则返回true。
  4. 如果Type(x)是Number,Type(y)是String,则返回比较x == ToNumber(y)的结果。
  5. 如果Type(x)是String,Type( y )是Number,则返回比较ToNumber(x) == y的结果。
  6. 如果类型(X)是布尔型,则返回比较ToNumber(x) == y的结果。
  7. 如果类型(Y)是布尔型,则返回比较x == ToNumber(y)的结果。
  8. 如果Type(x)是字符串、数字或符号,类型(Y)是对象,那么返回比较x == ToPrimitive(y)的结果。
  9. 如果Type(x)是Object,Type( y )是字符串、数字或符号,那么返回比较ToPrimitive(x) == y的结果。
  10. 还假。

因此,与其强迫一方,然后是另一方,或者诸如此类的事情,更重要的是,解释器遍历上面的列表,直到找到匹配的条件,并执行结果命令,这可能只包括胁迫左侧,或者只包括右侧(而且,很少情况下,在达到递归命令的情况下,例如使用true == '1',它将满足条件8,转换为1 == '1',满足条件6,转化为1 == 1,满足条件3并解决为true)。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54567524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档