Underscore: _.isEmpty Behavior pada angka

Dibuat pada 13 Jan 2012  ·  13Komentar  ·  Sumber: jashkenas/underscore

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.

question

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 :-)

Semua 13 komentar

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.

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);
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

jdalton picture jdalton  ·  6Komentar

jdalton picture jdalton  ·  4Komentar

zackschuster picture zackschuster  ·  5Komentar

xiaoliwang picture xiaoliwang  ·  3Komentar

haggholm picture haggholm  ·  8Komentar