Underscore: _.is السلوك الفارغ على الأرقام

تم إنشاؤها على ١٣ يناير ٢٠١٢  ·  13تعليقات  ·  مصدر: jashkenas/underscore

var cow = {a: 1, b: {}, c: []};
_.isEmpty(cow); // returns false

يعمل الخيار isEmpty بشكل جيد على الكائنات التي تحتوي على أرقام باعتبارها القيم الوحيدة "غير الفارغة"

_.isEmpty(cow.a); // returns true

ومع ذلك ، يعتبر الفرد k ، v لـ a: 1 فارغًا.

لقد قرأت المشكلات ولاحظت أن _.isEmpty في الأصل لم يكن مخصصًا للسلاسل ، لذلك قد يكون هذا مقصودًا. إذا لم يكن ذلك مقصودًا ، فلدي فرع يمكنني تقديم طلب سحب له.

question

التعليق الأكثر فائدة

نعم. أنا سعيد لأنك سألت :-)

لقد رأيت أن معظم الأشخاص يستخدمون _.isEmpty حد كبير للتحقق مما إذا كانت هناك قيمة (أي قيمة) قد تم تخصيصها لمتغير معين. لقد رأيت العديد من المطورين يواجهون مشكلات بسبب هذا.

حتى الوثائق الرسمية تنص على "إرجاع صحيح إذا كان الكائن لا يحتوي على قيم" - ويجب أن يكون الرقم مؤهلاً كقيمة.

إذا كان هناك نوع من التضمين الأكبر في إجراء هذا التغيير الذي لا يمكنني رؤيته ، فسيكون اقتراحي الثاني الأفضل هو تحديث الوثائق لتوضيح أنه لا ينبغي استخدامها للأرقام :-)

ال 13 كومينتر

حالة الاستخدام التي صادفتها كانت أفعل شيئًا كهذا

_.each(cow, function(v, k) {
  if (_.isEmpty(v)) {
    // do something with k because of v being empty
  }
});

لذا ستُعامل البقرة أ مثل البقر ب والبقرة ج. يمكنني كتابة التعليمات البرمجية حوله ، لكنني أعتقد أنه سيكون أكثر إتقانًا إذا لم أضطر إلى ذلك (وإذا لم يكسر روح أو رؤية تسطير أسفل السطر)

نعم ، يتم تعريف _.isEmpty فقط للكائنات والمصفوفات. يجب ألا تستخدمه على السلاسل أو الأرقام.

إذن ، ما البدائل التي يجب أن نستخدمها على الأرقام؟

jashkenas أوmichaelficarra: أي سبب خاص _.isNumber لا يسمى مع في _.isEmpty ؟ (بنفس الطريقة يتم استخدام _.isArray و _.isString )

أي سبب لماذا يجب؟

نعم. أنا سعيد لأنك سألت :-)

لقد رأيت أن معظم الأشخاص يستخدمون _.isEmpty حد كبير للتحقق مما إذا كانت هناك قيمة (أي قيمة) قد تم تخصيصها لمتغير معين. لقد رأيت العديد من المطورين يواجهون مشكلات بسبب هذا.

حتى الوثائق الرسمية تنص على "إرجاع صحيح إذا كان الكائن لا يحتوي على قيم" - ويجب أن يكون الرقم مؤهلاً كقيمة.

إذا كان هناك نوع من التضمين الأكبر في إجراء هذا التغيير الذي لا يمكنني رؤيته ، فسيكون اقتراحي الثاني الأفضل هو تحديث الوثائق لتوضيح أنه لا ينبغي استخدامها للأرقام :-)

لماذا قد ترغب في تمرير رقم إلى isEmpty ، بدلاً من مجرد التحقق مما إذا كان الرقم فارغًا؟

حتى الوثائق الرسمية تنص على "إرجاع صحيح إذا كان الكائن لا يحتوي على قيم"

حق تماما. في JavaScript ، الرقم (للأسف الشديد) ليس كائنًا.

أعتقد أنه يمكن مسح هذا باستخدام تعديلات المستند _.isEmpty . ما يبحث عنه المطورون هو موجود .

من المنطقي أن يعني _.isEmpty(a) "هل a كائن فارغ؟" ، نوعًا ما إذا كانت العبارة: if obj == {} تعمل على القيم وليس على المراجع. لذلك فإن القيم مثل الأرقام ستعيد خطأ وكذلك القيم الخالية وغير المعرفة.

مثال على تنفيذ _.isEmpty قد يكون:

_.isEmpty = function(a) {
  return _.isEqual(a, {}) || _.isEqual(a, []) || _.isEqual(a, '');
}

jashkenas ربما يرجع ذلك إلى أن كلمة "فارغ" في بعض اللغات الأخرى تحدد ما إذا كان المتغير فارغًا أم لا :) http://www.php.net/manual/en/function.empty.php

+1 لـ josser - غالبًا لأن لدي خلفية PHP :-p
لكنني أعتقد أن مجرد توضيح ذلك في الوثائق قد يكون كافياً. أرى بجدية أن الناس يواجهون هذا كل أسبوعين.

واجهت هذا اليوم .. كنت أستخدمه مع _.omit

_.omit(someObject, _.isEmpty);
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات