var cow = {a: 1, b: {}, c: []};
_.isEmpty(cow); // returns false
isEmpty berfungsi dengan baik pada objek yang berisi angka sebagai satu-satunya nilai 'tidak kosong'
_.isEmpty(cow.a); // returns true
Namun individu k, v dari a: 1 dianggap kosong.
Saya memang membaca masalah dan mencatat bahwa awalnya _.isEmpty tidak dimaksudkan untuk string, jadi ini mungkin dimaksudkan. Jika tidak dimaksudkan maka saya memiliki cabang yang dapat saya buat permintaan penarikannya.
Kasus penggunaan yang saya temui adalah melakukan sesuatu seperti ini
_.each(cow, function(v, k) {
if (_.isEmpty(v)) {
// do something with k because of v being empty
}
});
Jadi cow.a akan diperlakukan seperti cow.b dan cow.c. Saya dapat membuat kode di sekitarnya, tetapi saya pikir akan jauh lebih rapi jika saya tidak perlu melakukannya (dan jika itu tidak merusak semangat atau visi garis bawah)
Ya, _.isEmpty
hanya didefinisikan untuk objek array. Anda tidak boleh menggunakannya pada string atau angka.
Anda tidak boleh menggunakannya pada angka. String tidak masalah:
https://github.com/documentcloud/underscore/commit/79f65b440ad5e14ff2c624a836a3eff33465be9f
https://github.com/documentcloud/underscore/blob/322a64135dc3c4a649f102e962054310c2b39c04/underscore.js#L808
Jadi, alternatif apa yang harus kita gunakan pada angka?
@jashkenas atau @michaelficarra: alasan tertentu mengapa _.isNumber
tidak disebut dengan di _.isEmpty
? (cara yang sama _.isArray
dan _.isString
digunakan)
Ada alasan kenapa harus?
Baiklah. Saya senang Anda bertanya :-)
Cara saya telah melihat kebanyakan orang menggunakan _.isEmpty
cukup banyak untuk memeriksa apakah nilai (nilai apa pun) telah ditetapkan ke variabel tertentu. Saya telah melihat banyak pengembang mengalami masalah karena ini.
Bahkan dokumentasi resmi menyatakan "Mengembalikan nilai true jika objek tidak berisi nilai" - dan angka harus memenuhi syarat sebagai nilai.
Jika ada beberapa jenis implikasi yang lebih besar dalam membuat perubahan ini yang saya tidak bisa lihat, maka saran terbaik kedua saya adalah memperbarui dokumentasi untuk menyatakan dengan jelas bahwa itu tidak boleh digunakan untuk angka :-)
Mengapa Anda ingin meneruskan angka menjadi isEmpty
, daripada hanya memeriksa apakah nomor tersebut null?
Bahkan dokumentasi resmi menyatakan "Mengembalikan nilai true jika objek tidak mengandung nilai"
Benar. Dalam JavaScript, angka (sayangnya) bukan objek.
Saya pikir ini bisa diselesaikan dengan tweak _.isEmpty
doc. Yang dicari developer adalah
Masuk akal untuk _.isEmpty(a)
berarti "adalah a
objek kosong?", Seperti jika pernyataan: if obj == {}
bekerja pada nilai dan bukan pada referensi. Oleh karena itu nilai-nilai seperti bilangan akan mengembalikan false dan begitu juga dengan null dan undefined.
contoh implementasi _.isEmpty
mungkin adalah:
_.isEmpty = function(a) {
return _.isEqual(a, {}) || _.isEqual(a, []) || _.isEqual(a, '');
}
@jashkenas Itu mungkin karena dalam beberapa bahasa lain "kosong" menentukan apakah variabel kosong atau tidak :) http://www.php.net/manual/en/function.empty.php
+1 ke @josser - kebanyakan karena saya memiliki latar belakang PHP :-p
Tapi saya pikir hanya mengklarifikasi di dokumentasi juga sudah cukup. Saya benar-benar melihat orang-orang mengalami ini setiap minggu.
Saya mengalami ini hari ini .. Saya menggunakannya dengan _.omit
_.omit(someObject, _.isEmpty);
Komentar yang paling membantu
Baiklah. Saya senang Anda bertanya :-)
Cara saya telah melihat kebanyakan orang menggunakan
_.isEmpty
cukup banyak untuk memeriksa apakah nilai (nilai apa pun) telah ditetapkan ke variabel tertentu. Saya telah melihat banyak pengembang mengalami masalah karena ini.Bahkan dokumentasi resmi menyatakan "Mengembalikan nilai true jika objek tidak berisi nilai" - dan angka harus memenuhi syarat sebagai nilai.
Jika ada beberapa jenis implikasi yang lebih besar dalam membuat perubahan ini yang saya tidak bisa lihat, maka saran terbaik kedua saya adalah memperbarui dokumentasi untuk menyatakan dengan jelas bahwa itu tidak boleh digunakan untuk angka :-)