【问题标题】:Why is new Number("3") === new Number("3") false? [duplicate]为什么 new Number("3") === new Number("3") 是假的? [复制]
【发布时间】:2021-12-31 23:00:10
【问题描述】:

为什么

console.log(new Number("3") === new Number("3"));

返回假?

同样,为什么

console.log(new Number("3") == new Number("3"))

也是假的?

【问题讨论】:

  • 因为它们是不同的对象(因为您使用的是 new 它正在构造数字对象,而不仅仅是将字符串强制转换为数字)请参阅:Creating Number objects 它直接包含在示例中
  • 我明白了 - 所以因为我在比较对象,它不会将对象强制转换为值并返回 true?奇怪的是,在这种情况下,使用 new Number() 创建的对象不会强制...
  • @WanderingDoge 两个操作数具有相同的类型;在这种情况下不会发生强制。
  • 所有对象永远不相等,除非存在相同的对象。您创建 2 个数字对象。 new Number(3) 与原生类型 3 不同..
  • 这到底有什么意义?比较两个int 值根本不应该使用Number

标签: javascript constructor


【解决方案1】:

来自docs

Number() 构造函数创建一个 Number 对象。

这意味着您正在检查两个对象是否相等。要检查原始值,您可以使用Number#valueOf

console.log(
  (new Number("3")).valueOf() === (new Number("3")).valueOf()
);

【讨论】:

  • 这是不正确的。你应该永远不要Number()之前使用newlinterrors.com/js/do-not-use-a-as-a-constructor
  • @HoldOffHunger 这超出了问题的范围,问题与使用构造函数的 OP 有关。
  • 这是合适的解决方案,恕我直言:console.log(Number("3") == Number("3"))
  • 好的,但这并不能澄清 OP 的问题。感谢您分享这个,这也将是有益的。
  • @HoldOffHunger 重点是OP 正在使用构造函数,导致混乱。您的 cmets 最好表达为对 OP 的评论或答案。
猜你喜欢
  • 2020-12-11
  • 1970-01-01
  • 2014-10-22
  • 2011-01-23
  • 1970-01-01
  • 2012-06-02
  • 2018-06-18
  • 1970-01-01
  • 2017-06-18
相关资源
最近更新 更多