سلام.
چک کردن نوع داده ای یکی از کارهای پر تکرار در برنامه نویسی میتونه باشه که این کار در جاوا اسکریپت معمولا با اپراتور typeof
انجام میشه که خیلی اوقات اونطوری که ما انتظار داریم کار نمیکنه.
یه مثال میزنم. شما انتظار دارید نتیجه این بررسی چی باشه؟
typeof null;
اگر تا حالا تست نکردید قطعا میگین که خوب معلومه جوابش باید null
باشه. اما جاوا اسکریپت به شما میگه این یه آبجکته! حالا ما کاری نداریم که این یه اشتباه از طرف برنامه نویسای جاوا اسکریپت بوده یا هر چیز دیگه، اینجا میخوام چند روش خوب برای چک کردن نوع داده ای یک متغیر رو بهتون معرفی کنم.
چک کردن string
باید بدونید زمانی که شما از کلمه کلیدی new
برای ساختن یه String
استفاده میکنید دیگه نوع اون در حقیقت یه object
هست. پس typeof
به شما object نشون میده. برای حل این مشکل با instanceof
هم بررسی بشه:
// Returns if a value is a string
function isString (value) {
return typeof value === 'string' || value instanceof String;
};
چک کردن number
برای اعداد ما نیاز داریم تا isFinite رو هم چک کنیم چون احتمال داره عدد +بی نهایت -بی نهایت و یا NaN باشه.
// Returns if a value is really a number
function isNumber (value) {
return typeof value === 'number' && isFinite(value);
};
چک کردن array
تو جاوا اسکریپت آرایه ها در حقیقت نوع خاصی از آبجکت ها هستن پس مطمئن باشید که typeof
به شما array
رو در خروجی برای آرایه ها نشون نمیده. تو این موارد هم میشه از روش پایین استفاده کرد:
// Returns if a value is an array
function isArray (value) {
return value && typeof value === 'object' && value.constructor === Array;
};
البته ES5 یه متد واسه این این کار داره:
// ES5 actually has a method for this (ie9+)
Array.isArray(value);
چک کردن function
هر چند توابع در تو جاوا اسکریپت در حقیقت از نوع object
هستن. اما احتمالا برای راحتی کار برنامه نویس ها تصمیم گرفتن خروجی توابع رو همون function
نشون بدن.
// Returns if a value is a function
function isFunction (value) {
return typeof value === 'function';
};
چک کردن object
بیشتر چیزا تو جاوا اسکریپت یه نوع آبجکت هستند. برای بررسی object
ها از این روش استفاده کنید:
// Returns if a value is an object
function isObject (value) {
return value && typeof value === 'object' && value.constructor === Object;
};
چک کردن null
و undefined
همونطور که در ابتدا توضیح دادم typeof
در مورد null
همیشه اشتباه میکنه. برای این ها هم از این روش استفاده کنید:
// Returns if a value is null
function isNull (value) {
return value === null;
};
// Returns if a value is undefined
function isUndefined (value) {
return typeof value === 'undefined';
};
چک کردن boolean
typeof
با boolean
مشکلی نداره
// Returns if a value is a boolean
function isBoolean (value) {
return typeof value === 'boolean';
};
امیدوارم مفید و کاربردی باشه براتون.
منبع اینجا.