আমাকে একটি রুটিন লিখতে হয়েছিল যা ভেরিয়েবলের টাইপ হলে এর মান 1 বৃদ্ধি করে number
এবং 0 না করে ভেরিয়েবলের জন্য নির্ধারিত হয়, যেখানে ভেরিয়েবলটি প্রাথমিকভাবে হয় null
বা হয় undefined
।
প্রথম বাস্তবায়ন ছিল v >= 0 ? v += 1 : v = 0
কারণ আমি ভেবেছিলাম যে কোনও কিছু নয় কিছু গণিতের প্রকাশকে মিথ্যা বানাবে, তবে এটি null >= 0
সত্য ছিল যেহেতু সত্য হিসাবে মূল্যায়ন করা হয়। তারপরে আমি null
0 টির মতো আচরণ শিখেছি এবং নিম্নলিখিত এক্সপ্রেশনগুলি সমস্ত সত্যকে মূল্যায়ন করা হয়।
null >= 0 && null <= 0
!(null < 0 || null > 0)
null + 1 === 1
1 / null === Infinity
Math.pow(42, null) === 1
অবশ্যই, null
0 নয় null == 0
এটি মিথ্যা হিসাবে মূল্যায়ন করা হয়। এটি আপাতদৃষ্টিতে টোটোলজিক্যাল এক্সপ্রেশনটিকে (v >= 0 && v <= 0) === (v == 0)
মিথ্যা করে তোলে ।
null
0 এর মতো কেন , যদিও এটি আসলে 0 নয়?
null
বা বর্ধিত কাউন্টারগুলির জন্য সত্যিই অতি ক্ষুদ্র উপায় রয়েছে undefined
:c = -~c // Results in 1 for null/undefined; increments if already a number
undefined
একটি চলক মান, ভেরিয়েবলের জন্য যা আরম্ভ করা হয়নি for null
অন্যদিকে, এটি একটি খালি অবজেক্ট মান, এবং সংখ্যার সাথে মিশ্রিত করা উচিত নয়। null
সংখ্যার সাথে একত্রিত করা উচিত নয়, সুতরাং নালকে সংখ্যার মতো আচরণ করা উচিত নয়।