使用函数构造函数创建对象时javascript双重相等比较

标签 javascript

为什么是假的?

因为双相等只比较值所以它应该返回真或者它是比较引用(地址值)?

var a = new Number(3);
var b =new Number(3);

a == b ; // false 
a === b ; // false

如下返回 true :(结果符合预期)

var a = new Number(3);
var b = 3;

a == b ; // true 
a === b; // false 

最佳答案

我认为这更像是一个类型强制问题。因此,您必须了解处理对象和非对象的规则和顺序。

var a = new Number(3);
var b =new Number(3);

a == b ; // false 
a === b ; // false

在您的情况下,您使用 new 关键字导致您将值包装在一个对象中。 var avar b 是两个新的/不同的对象。 Javascript 中的对象是唯一的。所以 ===== 只有在比较同一对象的同一实例时才会为真。 (所以是对该对象的引用)。

这样做的原因:

var a = new Number(3);
var b = 3;

a == b ; // true 
a === b; // false 

是因为管理隐式类型强制的规则:

If Type(x) is either String or Number and Type(y) is Object, return the result of the comparison x == ToPrimitive(y).

If Type(x) is Object and Type(y) is either String or Number, return the result of the comparison ToPrimitive(x) == y.

所以 var a 首先被转换为原始值,然后进行比较,得到一个真值。

深入解释:https://github.com/getify/You-Dont-Know-JS/blob/master/types%20&%20grammar/ch4.md

关于使用函数构造函数创建对象时javascript双重相等比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45431450/

相关文章:

javascript - js中未调用回调函数

javascript - 将对象与数组进行比较

javascript - jQuery DataTables RowReordering 插件 - 关于更改事件?

javascript - 如何在提交时处理 q-input/preventDefault 中的 "enter"?

javascript - 检查节点是否被完全选中

javascript - 带有 javascript 问题的 Razor

javascript - 我正在努力通过每次加载循环视频时使用我的代码来为 youtube api 设置循环。我只循环播放了一个视频

javascript - 在 Meteor 中加载 YouTube 播放器 API

javascript - Bootstrap Modal Jquery 无法正确呈现或显示

javascript - Jquery从单独的数组中获取特定对象的最高值