找出javascript相等运算符

时间:2014-10-30 02:07:32

标签: javascript

在尝试完全理解等于运算符和身份运算符之间的区别的同时,我在MSDN上遇到article来解释他们两者在内部工作方面做了什么,但我仍有一些疑问,决定创建一个流程图,这样我就可以有更好的画面。现在我的问题是,这个流程图是否正确?还是我错过了什么?

我的理解是,身份运算符(===)的工作方式几乎相同,但在第一步中没有尝试将A和B转换为布尔值,数字或字符串。这是对的吗?

您也可以看到图片here

enter image description here

好的,这是真实的,这是一个原则问题;)

enter image description here

2 个答案:

答案 0 :(得分:4)

  

此流程图是否正确?

没有。您应该使用Abstract Equality Comparison Algorithm的ECMAScript规范来创建流程图。 ToBoolean 肯定不是第一步(它没有在任何步骤中使用)。

  

或者我错过了什么?

是的,很多。

  

我的理解是,身份运算符(===)的工作方式几乎相同,但在第一步中没有尝试将A和B转换为布尔值,数字或字符串。这是对的吗?

Strict Equality Comparison Algorithm几乎与Abstract Equality Comparison Algorithm相同,只有在参数类型不同的情况下才有区别,并且在这种情况下,存在一个精确的顺序,其中类型在做了比较。

答案 1 :(得分:-2)

  

此流程图是否正确?

没有。除了被打得很糟糕外,还有误导性和部分错误。

  

我错过了什么吗?

是。第一步," 尝试将A和B转换为布尔值,字符串或数字"是错的 - 这不是equality comparison algorithm的第一步。另外,何时将哪个变量转换为哪种类型?

然后,下一步应该是类型区分,而不是反复询问特定类型的相同值。

" last"步骤" 他们(类型)可以被强制进入最后5种情况中的任何一种吗? - >强制类型"缺乏细节。所有的细节。这是草率平等比较中最相关的部分:

  • 可以强制哪些类型?
  • 哪种类型会被强制使用?
  • 价值观的强制如何运作?

不,在强制之后,算法几乎从一开始就开始,而不是关于字符串的问题。

  

我的理解是,身份运算符(===)的工作方式几乎相同,但在第一步中没有尝试将A和B转换为布尔值,数字或字符串。

第一步在实际算法中并不明显,所以不是。实际上,===的工作方式与相同,除了最后一步,它将值强制转换为其他类型 - 而不是{返回{1}}。


编辑:你的第二张图是准确的(正确的),虽然它仍然有一些奇怪的布局决定。