1. Никогда не используйте ==
оператор
Она не делает то, что вы думаете, и это довольно близко, чтобы быть совершенно бесполезным (например "1" == [[1]]
). Предпочитают вместо этого ===
. Если тип один и тот же для обеих сторон ==
и ===
делают то же самое, но если они не ==
, вы будете сожалеть об этом.
2. ===
для массивов проверок идентичности
И.Э. он вернет true
только в том случае, если обе стороны являются одним и тем же объектом, а не объектом с одним и тем же содержимым (что бы то ни было «должно быть»).
Если вы хотите, чтобы проверить содержание сначала вы должны решить, как сравнить элементы ... например
my_eqtest([1, [2, 3]], [1, [2, 3]])
должен возвращать true
или false
?
x = [1, 2]
y = [1, 2]
y.myextramember = "foo"
my_eqtest(x, y) // should be true or false?
Вы должны описать (документ), что вы имеете в виду равенство, если он не возражает личность, в противном случае, кто читает код не поймет, почему-то не работает (в том числе и себя в течение нескольких недель).
Там массивы не идентичны, хотя они структурно эквивалентны. – rightfold
Вы сравниваете ссылку на массив, который в вашем случае отличается, поскольку они представляют собой два разных массива, которые имеют похожие данные. См. Http://stackoverflow.com/questions/7837456/comparing-two-arrays-in-javascript о том, как сравнить их значения. – ericosg