Shi*_*aul 6 javascript set ecmascript-6
我有一套我已经添加了一个列表.
var a = new Set();
a.add([1]);
Run Code Online (Sandbox Code Playgroud)
现在我检查是否[1]
存在于a
:
a.has([1]);
> false
Run Code Online (Sandbox Code Playgroud)
根据规范,这可能会发生,因为如果要比较的两个对象的类型相同:
如果x和y引用同一个对象,则返回true.否则,返回false.
这也发生了:
[1] == [1];
> false
Run Code Online (Sandbox Code Playgroud)
因此,它可能是设置.has()
用==
比较平等的(不知道虽然)..contains()
JS中的Set()有像Java一样的方法吗?
Jos*_*eam 14
您无法比较数组和对象之类的引用是否相等(但您可以比较值).
你正在这样做,你正在检查不同的引用,即使值看起来是相同的.
做这样的事情:
var a = new Set();
var b = [1];
a.add(b);
a.has(b); // => true
Run Code Online (Sandbox Code Playgroud)
所以可能是Set .has()使用==来比较相等(虽然不确定)
不必要.[1] === [1]
(使用严格相等运算符)也返回false
.
JS中的Set()是否有像Java一样的.contains()方法?
不是你想象的方式.您可以进行某种深度比较,如本答案的第一个链接所述.
尽管两者[1]
具有相同的值,但它们是两个不同的数组,指向内存中的两个不同位置,因此它们不相等。
您可以使用基本循环来检查
for (let item of mySet.keys()) {
item.toString() == [1].toString();
//true on match.
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6047 次 |
最近记录: |