Я изучаю JavaScript уже некоторое время, и я знаю лучше, чем на самом деле полагаться на такое поведение, но мне становится любопытно ... почему пустой массив []
казалось бы, противоречивые логические тождества?JavaScript: weird boolean values for []
Это truthy: [] && true
вычисляет true
... и тем не менее, это неверно: [] == false
вычисляется в true
.
Однако его двойное отрицание верно: !![]
оценивает по: true
. Но это также (используя свободное равенство), равное его собственному отрицанию: ![] == []
оценивает true
.
Его числовое значение является фальшивым: +[] && true
оценивается в 0
.
Его строковое представление является фальшивым: [].toString() && true
оценивает по: ""
.
Есть ли ясная причина, почему []
является такой загадкой?
Но это не объяснение, почему это так. Например, первая из них истинна, потому что каждый объект имеет значение true (логическое преобразование). И второе: да, оно пустое, но что там происходит. Я думаю, что false преобразуется в 0. –
Он специально не спрашивал, как работает интерпретатор, он просто спросил, почему '[]' оценивает странно. Я предлагаю, чтобы это была не «головоломка», и результаты были разумными. – m59