Javascript平等三重等于,但是大于和小于呢?
Javascript equality triple equals but what about greater than and less than?
我正在向一位同事解释,在比较 JavaScript 中的变量时,您应该使用 ===
和 !==
(当然还有>==
和<==
(,这样它就不会强迫参数并变得愚蠢和混乱,但他们问了我一个我不知道答案的两部分问题,并认为我会问这里的专家, 具体来说,它是:
那么
>
和<
呢 - 当他们比较时,他们是否也强制参数 - 为什么没有某种>>
和<<
运算符(可能需要一些其他语法,因为我猜他们会是位移运算符如果它沿着整个 C 风格进行,但你明白了要点(?
所以我可以写一个测试来找到第一部分的答案,我做到了,这里是:
// Demo the difference between == and ===
alert(5 == "5");
alert(5 === "5");
// Check out what happens with >
alert(5 > "4");
alert(5 > 4);
它返回:
true
false
true
true
因此,看起来>
确实在进行胁迫,因为> "4"
并且> 4
返回相同的结果。 那么第二部分呢...
是否有某种不强制类型的>
和<
运算符(或者如何更改测试以安全地执行测试(?
不,不需要这样的运算符。为这些关系运算符执行的类型检查不同于相等和不相等的类型检查。(编辑 - 也许说"没有必要"有点强烈;这只是因为JavaScript认为是这样:-(
具体来说,>
和<
以及>=
和<=
运算符都对两个数值或两个字符串进行操作,首选数值。也就是说,如果一个值是数字,则另一个值被视为数字。如果一个非数字不能干净地转换为一个数字(也就是说,如果它最终是NaN
(,那么比较的结果是undefined
。 (这有点问题,因为undefined
在if
语句的上下文中看起来像false
。
如果两个值都是字符串,则改为执行排序顺序字符串比较。
如果你仔细想想,这些比较对对象实例没有任何意义;一个对象"大于"另一个对象意味着什么? 我想,也许,这意味着如果你发现自己的变体类型的值被这样比较,这导致了问题,那么是的,你必须自己检测情况。 在我看来,最好在上游工作并考虑导致这种情况的代码是否存在可疑之处。
是否有某种运算符用于不强制类型的>和<</p>
不。
如何更改测试以安全地执行测试
您必须显式测试这些类型:
typeof a === typeof b && a > b
我参考了 Flanagan 的 JavaScript: The Definitive Guide (第 5 版(,似乎没有非强制性比较运算符。
您说<<和>>确实是按位运算符是正确的,因此这是行不通的。
我建议你故意强迫你自己的价值观:
var num_as_string = '4';
var num = +num_as_string;
if (5 > num) { ... }
12 > '100' // false
'12' > 100 // false
'12' > '100' // true
正如其他人所提到的,如果一个是数字,另一个则转换为数字。相同的规则也适用于这些情况:
null > 0 // false
null < 0 // false
null >= 0 // true
但是,在某些情况下,您可能需要null >= 0
给出false
(或上面的任何数字字符串比较情况(,因此确实需要严格的比较>==
或<==
。
例如,我正在为Array.prototype.sort()
编写一个compareFunction
,像x>=0
这样的表达式会将null
值视为 0 并将它们放在一起,而我想将它们放在其他地方。我必须为这些情况编写额外的逻辑。
Javascript说自己处理它(在实践中(。
- Javascript平等三重等于,但是大于和小于呢?
- RegEx接受小于-50.0或大于80.0的数字
- 在选择更改时显示大于/小于的隐藏字段集
- 为什么对象大于/小于或等于不同的对象
- 大于或小于gujarati数的检查
- Javascript 大于或小于
- ASP.NET 如果文本在“大于”和“小于”符号之间给出,则无法保存文本框
- 值大于(小于)变量的 jQuery 过滤器选项
- 大于 0 且小于或等于 100 的百分比的正则表达式
- 如何在 javascript 中对自定义对象执行小于/大于比较
- 当输入类型文本小于 0 或大于 24 时,如何禁用输入类型按钮
- TaffyDB,过滤同一字段 2 次(大于和小于小于)
- 使用“”对字符串进行排序;小于/大于“;比较器中的比较运算符
- 如何使用angularjs检查所选日期和时间是否小于当前日期或大于当前日期和时间
- Jquery或Javascript:如何查找图像大于500px且小于2000px的所有html元素
- Regex检测到大于“>"并且小于“0”<"在字符串中
- Javascript -大于/小于4位数字,可以从0开始
- 大于/小于运算符在Q承诺上的行为与等于运算符不同
- Switch大于/小于语句
- 为什么 JavaScript 没有严格的大于/小于比较运算符