2016-12-28 5 views
2

Я играл вокруг с массивами в JavaScript и не могу понять, почему это происходит:Javascript массива равен нулю, но сам не

console.log(0 == 0) 
 
//true 
 

 
console.log([] == 0) 
 
//true 
 

 
console.log(0 == []) 
 
//true 
 

 
console.log([] == []) 
 
//false 
 

 
console.log([] == ![]) 
 
// true

Пустой массив достаточно равен нулю как влево, так и вправо, но почему он не равен самому себе?

Я понимаю, что сравнение двух объектов не приведет true, но почему они принуждают 0 (или falsy, которое не должно быть), если сравнивать их с 0, а threated как объект, если сравнивать их к другому массиву?

+1

http://stackoverflow.com/questions/30820611/javascript-arrays-cannot-equal-each-other – sinisake

+1

Возможный дубликат [Почему два одинаковых объекта не равны друг другу?] (Http: // stackoverflow. com/questions/11704971/why-are-two-same-objects-not-equal-to-each-other) – baao

+0

@sinisake Это объясняет, почему они не соответствуют друг другу, но факт, что они соответствуют '0', смущающий меня полностью – Randy

ответ

7
console.log(0 == []) 
//true 

Вы пытаетесь сравнивать объект с целым числом, поэтому ваш объект неявно typecasted в эквивалентное целое значение 0

console.log([] == []) 
//false 

, как два объекта никогда не равны

1
console.log([] == []) 

Это будет сравнить array1 и array2 ли тот же объект, массив в памяти, который не то, что вы хотите.

Чтобы выполнить то, что вы хотите, вам нужно проверить, имеют ли две массивы одинаковые длины и что каждый член в каждом индексе идентичен.

console.log([].length == [].length) 
// true 
+0

Это имеет смысл, но '[]' definitly - не тот же объект памяти, что и '0'. – Randy

+0

@Randy потому что console.log ([] == 0) он проверяет, присутствует ли объект и возвращает true/false. –

1

Этот вопрос обрабатывается со знанием ссылки на объекты и преобразования типов более правильно. Во-первых, в javascript значение объекта хранится по ссылке. Так что мы можем сказать, что оно отличается от [] и [], bec ause, чтобы два массива соответствовали двум различным addr в памяти. Второе: '==' - это не строгое действие как для левого, так и для правого, [] и 0 оба преобразуются в false.

Смежные вопросы