在尝试完全理解等于运算符和身份运算符之间的区别的同时,我在MSDN上遇到article来解释他们两者在内部工作方面做了什么,但我仍有一些疑问,决定创建一个流程图,这样我就可以有更好的画面。现在我的问题是,这个流程图是否正确?还是我错过了什么?
我的理解是,身份运算符(===)的工作方式几乎相同,但在第一步中没有尝试将A和B转换为布尔值,数字或字符串。这是对的吗?
您也可以看到图片here:
好的,这是真实的,这是一个原则问题;)
答案 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}}。
编辑:你的第二张图是准确的(正确的),虽然它仍然有一些奇怪的布局决定。