可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Why is [] !== []
in JavaScript?
I read through https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness but I could not find anything that explains this.
Edit: I don't think this question is an exact duplicate of mine. It asks about the ==
operator which just behaves crazy. The answer is an answer to my question but it's not the same question.
回答1:
That does a reference check on the two array literals to see if they are the same instance. The fact that you have two literals means that you are constructing two separate arrays, therefore the reference check returns false. This would return true:
var a = [] var b = a //b === a
This is because we have two references to the same array.
回答2:
[]
creates a new (and empty) array each time you write it. You are comparing two arrays, regardless of their content, their pointer (or reference) are being compared.
var array = []; var anotherArray = array; // these two will point to the same array, so they are equal array === anotherArray; // true array === []; // false array.push('something'); anotherArray.length; // 1
回答3:
Because []
is an object, and a comparison of objects only returns true when both sides of the comparison point to the exact same object. You have created two separate objects, so they aren't equal.
var x = [] var y = x var z = [] x == x // true x == y // true x == z // false