我想比较两个阵列......理想情况下,有效率.没有什么花哨的,只要true它们是相同的,false如果不相同的话.毫不奇怪,比较运算符似乎不起作用.
var a1 = [1,2,3];
var a2 = [1,2,3];
console.log(a1==a2); // Returns false
console.log(JSON.stringify(a1)==JSON.stringify(a2)); // Returns true
Run Code Online (Sandbox Code Playgroud)
每个数组的JSON编码都有,但有没有更快或更"简单"的方法来简单地比较数组而不必迭代每个值?
var a = [1, 2, 3];
var b = [3, 2, 1];
var c = new Array(1, 2, 3);
alert(a == b + "|" + b == c);
Run Code Online (Sandbox Code Playgroud)
如何检查这些数组是否相等并获得一个方法,true如果它们相等则返回?
jQuery是否提供任何方法?
新的ES 6(Harmony)引入了新的Set对象.Set使用的身份算法类似于===运算符,因此不太适合比较对象:
var set = new Set();
set.add({a:1});
set.add({a:1});
console.log([...set.values()]); // Array [ Object, Object ]
Run Code Online (Sandbox Code Playgroud)
如何自定义Set对象的相等性以进行深层对象比较?有没有像Java这样的东西equals(Object)?
我希望数组的位置也相同,值也相同.
var array1 = [4,8,9,10];
var array2 = [4,8,9,10];
Run Code Online (Sandbox Code Playgroud)
我试过这样的
var array3 = array1 === array2 // returns false
Run Code Online (Sandbox Code Playgroud) 看起来像下面的代码应该返回一个true,但它返回false.
var a = {};
var b = {};
console.log(a==b); //returns false
console.log(a===b); //returns false
Run Code Online (Sandbox Code Playgroud)
这有什么意义?
我今天在Javascript中玩数组并注意到这个小宝石:
alert([1, 2, 3] == [1, 2, 3]); //alerts false
Run Code Online (Sandbox Code Playgroud)
令我感到奇怪的是阵列不等于它自己.
但后来我注意到了这一点,甚至更奇怪了:
alert([1, 2, 3] == "1,2,3"); //alerts true
Run Code Online (Sandbox Code Playgroud)
?!?!?!?!?
世界上为什么[1, 2, 3]不是==自己而是==弦乐?
我认识到,==是不一样的===.即便如此,邪恶可能会导致Javascript先生做出如此奇怪的事情?
我一直在使用JavaScript中的数组,但无法弄清楚为什么会发生这种情况:
console.log(0 == 0)
//true
console.log([] == 0)
//true
console.log(0 == [])
//true
console.log([] == [])
//false
console.log([] == ![])
// trueRun Code Online (Sandbox Code Playgroud)
空数组等于左右都为零,但为什么它不等于它自己呢?
我意识到比较两个对象不会产生true,但是为什么它们被强制0(或者是假的,哪些不应该是这种情况)如果你将它们与它们进行比较0,而如果你将它们与另一个数组进行比较则作为一个对象被威胁?
我以这种方式检查数组是否包含该值:
testArray.includes(value)
Run Code Online (Sandbox Code Playgroud)
如果数组为空或它包含该值,我需要执行相同的操作。所以我有这样的条件:
if (testArray == [] || testArray.includes(value)) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
但typescript正在尝试执行此条件的第二部分,即使testArray == []。所以我收到一个错误testArray.includes is underfined。
我知道我可以这样修复它:
if (testArray == []) {
// do something
} else if (testArray.includes(value)) {
// do the same thing
}
Run Code Online (Sandbox Code Playgroud)
但看起来不太好。有没有办法把它放在一个if中?
testArray是一个 openapi 查询参数,如果它很重要的话。
new Array // outputs []
[] // outputs []
Run Code Online (Sandbox Code Playgroud)
但这new Array === []是错误的.为什么这样?
console.log(new Array === [])Run Code Online (Sandbox Code Playgroud)
我知道这是非常愚蠢的问,但任何人都可以告诉我为什么===和==给予假的跟随.
x=[[1,2]];
console.log(x[0]===[1,2]);
console.log(x[0]==[1,2]);Run Code Online (Sandbox Code Playgroud)
这里typeof(x [0])和typeof([1,2])也是一样的,那么为什么它给出了假?
在js中,伪造的值为0,null,undefined,false,NaN和”,其他一切都是真实的。因此,这意味着[]和{}也是真实值,但是当比较[]=={}or []==[]或{}=={}返回false时,为什么呢?