Saya menemukan banyak bug dalam kode saya karena saya mengharapkan ungkapan ini:
Boolean([]);
untuk mengevaluasi salah.
Tetapi ini tidak terjadi karena dianggap benar.
Oleh karena itu, fungsi yang mungkin dikembalikan []
seperti ini:
// Where myCollection possibly returned [ obj1, obj2, obj3] or []
if(myCollection)
{
// ...
}else
{
// ...
}
tidak melakukan hal-hal yang diharapkan.
Apakah saya salah dalam mengasumsikan bahwa []
array kosong?
Selain itu, Apakah perilaku ini konsisten di semua browser? Atau ada gotcha di sana juga? Saya mengamati perilaku ini di Goolgle Chrome.
javascript
arrays
object
conditional
racl101
sumber
sumber
myCollection.length > 0
?myCollection
kebetulannull
atauundefined
. Anda perlu menggunakanif(myCollection && myCollection.length > 0)
.myCollection.length > 0
menawarkan nilai boolean yaitu melakukan apa yang diminta OP ... dia masih perlu melakukan pekerjaan dari sana.Jawaban:
Dari http://www.sitepoint.com/javascript-truthy-falsy/
Nilai berikut selalu salah:
Semua nilai lainnya adalah benar, termasuk "0" (nol dalam tanda kutip), "salah" (salah dalam tanda kutip), fungsi kosong, larik kosong, dan objek kosong.
Mengenai mengapa demikian, saya menduga itu karena array JavaScript hanyalah jenis objek tertentu. Memperlakukan array secara khusus akan membutuhkan overhead ekstra untuk mengujinya
Array.isArray()
. Juga, mungkin akan membingungkan jika array sebenarnya berperilaku berbeda dari objek serupa array lainnya dalam konteks ini, sementara membuat semua objek seperti array berperilaku sama akan lebih mahal.sumber
[] == false
yang dievaluasitrue
.==
pembanding di tautan yang Anda posting. Saya berkomentar hanya untuk berhati-hati ketika mengharapkan evaluasi benar atau salah.Anda harus memeriksa
.length
array itu untuk melihat apakah itu berisi elemen apa pun.if (myCollection) // always true if (myCollection.length) // always true when array has elements if (myCollection.length === 0) // same as is_empty(myCollection)
sumber