当前位置: 首页 > 面试题库 >

为什么`null> = 0 && null <= 0',而不是`null == 0`?

宇文鸿振
2023-03-14
问题内容

我必须编写一个例程,如果变量的类型为number,则将变量的值加1,否则将变量的值分配为0,其中变量的初始值为nullundefined

第一个实现是v >= 0 ? v += 1 : v = 0因为我认为没有数字会使算术表达式为假,但是由于null >= 0计算为真,所以这是错误的。然后,我得知null行为类似于0,并且以下表达式均被评估为true。

  • null >= 0 && null <= 0
  • !(null < 0 || null > 0)
  • null + 1 === 1
  • 1 / null === Infinity
  • Math.pow(42, null) === 1

当然null不是0。null == 0被评估为false。这使看似重言式的表达成为(v >= 0 && v <= 0) === (v == 0)错误。

为什么null实际上不是0,却像0?


问题答案:

您真正的问题似乎是:

为什么:

null >= 0; // true

但:

null == 0; // false

真正发生的是 大于等于运算符(>=)执行类型强制(ToPrimitive),提示类型为Number,实际上所有关系运算符都具有这种行为。

null 等于运算符==)以特殊方式处理。在简短的,它只 强制转换undefined

null == null; // true
null == undefined; // true

值,例如false'''0',和[]被受数字类型强制,它们都强迫到零。

您可以在“抽象相等比较算法”和“抽象关系比较算法”中查看此过程的内部细节。

综上所述:

  • 关系比较:如果两个值都不是String类型,ToNumber则在两个值上都调用。这与+在前面添加a相同,后者将null强制转换为0

  • 平等比较:仅调用ToNumber字符串,数字和布尔值。



 类似资料:
  • 问题内容: 使用整数列时,最好具有或不指定任何值。 例如,如果一个表有一个字段,而一个特定的条目没有父项,您会使用还是? 过去我总是用过,因为我来自Java世界,整数(必须小于1.5)始终必须有一个值。 我主要问的是性能问题,我不太担心哪个是“更正确”的选择。 问题答案: 首选使用,这有两个原因: 用来表示该字段没有值,这正是您要建模的值。 如果您决定将来添加一些参照完整性约束,则必须使用。

  • 本文向大家介绍将MySQL null转换为0?,包括了将MySQL null转换为0?的使用技巧和注意事项,需要的朋友参考一下 使用IFNULL或function以便将MySQL NULL转换为0。 语法如下 让我们首先创建一个表。创建表的查询如下 使用insert命令在表中插入一些记录。 查询如下 使用select语句显示表中的所有记录。 查询如下 以下是输出 这是将MySQL NULL转换为0

  • 问题内容: 我正在阅读本文: 在SQL中获取null == null 共识是,当尝试测试两个(可空)sql列之间的相等性时,正确的方法是: 当A和B为时,(A = B)仍返回FALSE,因为NULL不等于NULL。这就是为什么需要额外检查的原因。 检验不平等情况如何?经过以上讨论,我认为要测试不平等,我需要做一些类似的事情: 但是,我注意到这不是必需的(至少在informix 11.5上没有),我

  • 所以这是我以前在jooq 3.11中工作的查询。 我正在更新一个JSON字段,但是它使用Json绑定映射到我模型中的字符串,我将在下面发布 这在升级到jooq 3.13.2后不再有效。我还不得不将我的sql方言更改为mysql,即使我正在使用mysql 5_7数据库,这可能是问题所在? 我也试过这个,它还是一样的 JsonBinding.class JsonConverter.class 以下是j

  • 问题内容: 我在MySQL中的运算结果中得到了价值。 有没有办法将这些值转换为值0? 问题答案: 是的,使用。 COALESCE遍历您提供的值列表,并返回第一个非空值。

  • 问题内容: 如何在SQL表中将所有0值都设置为NULL? 提前致谢。 问题答案: