无法获得平等

时间:2018-05-14 18:44:39

标签: javascript javascript-objects

我编写了一个原型方法,我想用以下方法扩展Array对象:



Array.prototype.indicesOf = function(val) {
	var res = [];
	for (var a=0;a<this.length;a++) {
		if (this[a] === val) {
			res.push(a);
		}
	}
	return res;
}
&#13;
&#13;
&#13;

当我去测试时,我希望得到严格的平等,但我不是。

这是测试:

&#13;
&#13;
var res1 = document.getElementById('result_1');
var res2 = document.getElementById('result_2');

Array.prototype.indicesOf = function(val) {
	var res = [];
	for (var a=0;a<this.length;a++) {
		if (this[a] === val) {
			res.push(a);
		}
	}
	return res;
}

var a = ["a", "c", "e", "a", "b", "d", "a", "f"];
res1.innerHTML = a.indicesOf("a").toString();

var b = [{name : "test1"}, {name : "test2"}];
res2.innerHTML = b.indicesOf({name : "test1"});
&#13;
<div id="result_1"></div>
<div id="result_2"></div>
&#13;
&#13;
&#13;

我不确定我做错了什么,我希望有人可以帮助解答为什么我var a的案例按预期工作,但我的案例为{{1}不被认为是平等的。

在比较不同数据类型之间(而不是之间)的平等时,有人可以帮助我理解发生了什么吗?

这已被标记为重复,我非常不同意,但让我解释原因,并尝试以合理的方式执行此操作。我不想冒犯任何人(这根本不是我的意图),我真的很想知道答案。

推理 :提供的链接是为了证明标记为重复,自己链接到其他链接,链接到更多不能帮助我的链接理解为什么用相等运算符var b比较不同数据类型似乎不可能的问题。

他们告诉你,在将Object与Object或Array比较为数组时,它将等于false, 但不能解释为什么

当我遇到问题时:

我们称之为===

我们称之为'Problem A' 1 + 9

我可以检查这两个单独的问题是否相等,答案是肯定的,因为它们等同于相同的答案。

当使用相同的基本逻辑查看具有相同属性的Object时,在我看来,它们应该在逻辑上等同于它们的部分(在这种情况下是属性)的总和。

暗示:

'Problem B' 8 + 2

如果我可以将一个问题与另一个问题进行比较,并将其返回var additionProblem = function(a1, a2) { this.addend1 = a1; this.addend2 = a2; this.answer = this.addend1 + this.addend2; } var problem1 = new additionProblem(1, 9); var problem2 = new additionProblem(8, 2); //When compared via === //(problem1 === problem2) returns false (understandable) //(problem1.answer === problem2.answer) returns true (understandable) //BUT //(9+1 === 8+2) returns true (also understandable) //({name : "problem1"} === {name : "problem1"}) returns false (not understandable using this logic) // ,并同时比较两个对象/数组比两个明显不同的问题有更严格的平等,那么我真的想知道如何正确使用true&amp; / OR ===来达到我的目的。

在所谓的答案和相关理由的评论中给出的理由严重缺乏其他人已经解决的答案,甚至没有接近问我要求的是什么。

我能从这些答案中收集到的最好的只是 解决方案 来解决Javascript的基本问题,它没有内置的处理==平等比较的方法, NOT 内存指针比较。

我想知道,为什么通过设计语言规范,没有内置的运算符来彻底检查对象的一个​​实例的内容(键/值对),并将其与另一个实例的内容进行比较对象的实例。

有人能说清楚这个吗?

是否有任何计划将此类功能合并到未来的语言中,或者这将像Promises一样,每个人都将它的不同实现构建到库中,然后最终使它成为一部分语言标准,一旦它在开源社区被淘汰了吗?

1 个答案:

答案 0 :(得分:-2)

问题是由于数据超出范围,即功能结束。

var res = [] //函数的全局范围

&#13;
&#13;
var res1 = document.getElementById('result_1');
var res2 = document.getElementById('result_2');

var res = [];

Array.prototype.indicesOf = function(val) {
	for (var a=0;a<this.length;a++) {
		if (this[a] === val) {
			res.push(a);
		}
	}
	return res;
}

var a = ["a", "c", "e", "a", "b", "d", "a", "f"];
res1.innerHTML = a.indicesOf("a").toString();

var b = [{name : "test1"}, {name : "test2"}];
res2.innerHTML = b.indicesOf({name : "test1"});
&#13;
<div id="result_1"></div>
<div id="result_2"></div>
enter code here
&#13;
&#13;
&#13;