حقل مفيهوش قيمة وحقل قيمته صفر وحقل فيه نص فاضي ممكن يبانوا متشابهين في الواجهة لكن معناهم في البرنامج مختلف التعامل معاهم بنفس الشرط ممكن يغير قيمة صحيحة أو يخفي بيانات ناقصة

حدد معنى كل حالة في مشروعك

ممكن يكون null معناه إن القيمة مش متحددة والصفر معناه مفيش كمية والنص الفاضي معناه إن المستخدم ساب حقل نصي فاضي وفي JavaScript ال undefined بتظهر مثلا عند قراءة خاصية غير موجودة

المعنى النهائي لازم تحدده أنت حسب الحقل مش حسب اختصار برمجي جاهز

const product = { stock: 0, subtitle: "", discount: null };
console.log(product.stock);
console.log(product.subtitle === "");
console.log(product.discount === null);
console.log(product.rating === undefined);
0
true
true
true

القيمة البديلة ممكن تمسح معنى الصفر

ال || بتختار البديل لما القيمة الأولى Falsy وده يشمل الصفر والنص الفاضي أما ?? فبتختار البديل عند null أو undefined بس

const stock = 0;
console.log(stock || 10);
console.log(stock ?? 10);
console.log("" || "Default");
console.log(("" ?? "Default") === "");
10
0
Default
true

لو المخزون صفر فإظهار 10 بدل منه خطأ حقيقي ال ?? بتحافظ على الصفر لكن ده مش معناه إنها مناسبة لكل حقل لو الاسم الفاضي مرفوض عالجه بقاعدة صريحة

المسافات مش نص فاضي

النص اللي فيه مسافات طوله أكبر من صفر لو الحقل نصي وعندك قاعدة بتسمح بإزالة المسافات من الأطراف استخدم trim ثم افحص النتيجة متطبقش ده عشوائيا على حقول ليها قواعد مختلفة زي كلمات المرور

const name = "   ";
console.log(name.length);
console.log(name === "");
console.log(name.trim() === "");
3
false
true

التحويل لرقم محتاج قرار واضح

بعض التحويلات بتطلع صفر لقيم ممكن تعتبرها ناقصة أنت فافحص الغياب قبل التحويل واستخدم قواعد تمنع NaN والقيم غير المحدودة لما تكون غير مقبولة

function readAmount(value) {
  if (typeof value !== "string" || value.trim() === "") return null;
  const amount = Number(value);
  return Number.isFinite(amount) ? amount : null;
}

console.log(readAmount("0"));
console.log(readAmount(""));
console.log(readAmount("abc"));
0
null
null

الدالة هنا بتوضح الفرق بين مدخل ناقص ورقم محدود لكنها مش تحقق كامل لحقل مالي مثلا الحقل المالي محتاج تحدد الصيغ المسموحة والدقة والمدى وطريقة تخزين الكسور

مترميش نفس المعنى على كل اللغات

في PHP و JavaScript و Python فيه اختلافات في التحويل والمقارنة والقيم اللي بتعتبر غير متحققة في الشرط اقرأ قواعد اللغة واختبر الحالات اللي مشروعك بيقبلها بدل الاعتماد على شكل القيمة

جرب حالات صغيرة قبل اعتماد الشرط

اكتب نتيجة متوقعة للصفر والنص الفاضي والمسافات و null و undefined والقيمة الطبيعية وبعدها جرب الدالة عليهم لو مش عارف النتيجة الصح لحالة معينة فالمطلوب نفسه محتاج يتحدد الأول

مصادر للتوسع