我解释给同事,你应该使用===和!==(和>==和<==当然的),在JavaScript中比较变量时,所以它不会强制参数,并得到所有froopy和混乱,但他们问了我一个问题的两个部分,我不知道答案并认为我会问专家,特别是:
怎么样
>和<-当他们做比较,他们也强迫的论据与否-为什么没有某种形式的>>和<<运营商(可能需要一些其他的语法,我猜他们会如果沿着去进行位移位运算符整个C风格,但你得到的要点)?
所以我可以写一个测试来找到第一部分的答案,我做了,这里是:
// Demo the difference between == and ===
alert(5 == "5");
alert(5 === "5");
// Check out what happens with >
alert(5 > "4");
alert(5 > 4);
Run Code Online (Sandbox Code Playgroud)
它返回了:
true
false
true
true
Run Code Online (Sandbox Code Playgroud)
所以它看起来像是在>做强制,因为> "4"并> 4返回相同的结果.那么第二部分怎么样......
是否存在某种类型的操作符>并且<不强制该类型(或者如何更改我的测试以安全地执行测试)?
Poi*_*nty 18
不,没有必要这样的运营商.为那些关系运算符进行的类型检查不同于对于相等和不平等的类型检查.(编辑 - 或许它说"没有必要"有点强烈;这只是因为JavaScript认为如此:-)
具体而言,>和<和>=和<=运营商的所有操作或者在两个数值,或两个字符串,宁愿数值.也就是说,如果一个值是数字,则另一个值被视为数字.如果非数字不能干净地转换为数字(即,如果它最终为NaN),那么比较的结果是undefined.(这有点问题,因为它undefined看起来像是false在if声明的上下文中.)
如果两个值都是字符串,则执行整理顺序字符串比较.
如果你考虑一下,这些比较对于对象实例没有任何意义; 对象"大于"另一个对象意味着什么?我想,也许,这意味着,如果你发现自己的变体类型的值被比作这样,并且这会导致问题,那么是的,你必须自己检测这种情况.在我看来,在上游工作并考虑是否存在导致这种情况的代码有些可疑的事情会很好.
是否有某种运算符>和<不强制类型
没有.
如何更改测试以安全地执行测试
您必须明确测试类型:
typeof a === typeof b && a > b
Run Code Online (Sandbox Code Playgroud)