আমাদের কাছে এলিমেন্টের একটি অ্যারে আছে যেটিতে ট্রুথি এবং ফালসি দুই ধরণের ভ্যালু রয়েছে। আমাদের কাজ হলো একটি ফাংশন লিখা যা মূল অ্যারেতে যেসব এলিমেন্ট NaN তাদের ইনডেক্স ধরে একটি অ্যারে রিটার্ন করবে।
NaN !== NaN
NaN এর ডেটা টাইপ আসলে number। যদিও NaN একটি ফালসি ভ্যালু, কিন্তু এর একটি غريب বৈশিষ্ট্য আছে যা অন্য কোনো ডেটা টাইপ বা ভেরিয়েবলে নেই। সেটি হলো এক্সপ্রেশন NaN === NaN ফালস দেয়। এবং শুধু NaN এর কেসেই এটি ফালস হয়।
আমরা এই বিহেভিয়র ব্যবহার করে NaN ভ্যালুর ইনডেক্স বের করতে পারি। কোডটি হবে -
const arr = [7, 1, "123abc", undefined, NaN, 78, NaN, null, "aes", NaN, '', null, NaN]; const pickNaN = (arr) => { return arr.reduce((acc, val, ind) => { if(val !== val){ acc.push(ind); }; return acc; }, []); }; console.log(pickNaN(arr));isNaN() / Number.isNaN() ব্যবহার করা
isNaN() ফাংশন true বা false রিটার্ন করে এই ভিত্তিতে যে প্রদত্ত ভ্যালু NaN কিনা বা NaN-এ কোয়ার্স করা যায় কিনা। আর Number.isNaN() ফাংশন শুধু তখনই true রিটার্ন করে যখন প্রদত্ত ভ্যালু আসলে NaN হয়।
তাই Number.isNaN() হলো isNaN() চেয়ে NaN চেক করার জন্য আরও নির্ভরযোগ্য পথ। কোড আউটপুটের পার্থক্য নিচে দেখানো হলো।
উদাহরণ
const arr = [7, 1, "abc", undefined, NaN, 78, NaN, null, "aes", NaN, '', null, NaN]; const pickNaN = (arr) => { return arr.reduce((acc, val, ind) => { if(Number.isNaN(val)){ acc.reliableWay.push(ind); }; if(isNaN(val)){ acc.unreliableWay.push(ind); } return acc; }, { reliableWay: [], unreliableWay: [] }); }; console.log(pickNaN(arr));এই কোড দুটি অ্যারে তৈরি করে, একটি Number.isNaN() ব্যবহার করে এবং অন্যটি isNaN() ব্যবহার করে।
আউটপুট
আউটপুট হবে -
{ reliableWay: [ 4, 6, 9, 12 ], unreliableWay: [ 2, 3, 4, 6, 8, 9, 12] }স্পষ্টভাবে দেখা যাচ্ছে isNaN() কিভাবে অনেক নন-NaN ভ্যালুকে NaN হিসাব করেছে। সেজন্য Number.isNaN() বেশি নির্ভরযোগ্য।