معرفی برخی عملگرها
در مقالات قبلی مقدماتی را جهت ورود به برنامه نویسی شیء گرا در جاوا اسکریپت مطرح کردیم و در اینجا نیز به معرفی برخی عملگرها میپردازیم که در برنامه نویسی شیء گرا نقشی اساسی را ایفا میکنند.
عملگر typeof
از آنجائیکه جاوا اسکریپت دارای نوع دادهای ضعیف یا Loosely Typed میباشد، باید در بکارگیری متغیرها و یا آرگومانهای ورودی توابع، دقت لازم را داشته باشیم تا خطایی در اجرای کد یا محاسبات به وجود نیاید. بنابراین به راهکارهایی نیاز داریم تا بتوانیم نوع دادهای یک متغیر را تشخیص دهیم و قبل از بکارگیری آنها صحت و اعتبار دادههای ورودی را بررسی کنیم. با استفاده از عملگر typeof میتوانیم نوع دادهای یک متغیر را تشخیص دهیم که برای هر نوع دادهای مقادیر زیر را بر میگرداند:
· برای متغیرهایی که شامل مقدار undefined میباشند مقدار "undefined"
· برای متغیرهای منطقی یا Boolean مقدار "boolean"
· برای متغیرهای رشتهای یا String مقدار "string"
· برای متغیرهای عددی و مقادیر NaN و Infinity مقدار "number"
· برای تابع مقدار "function"
· برای اشیا و مقادیر null مقدار "object"
var x; var n = 12; var obj = {}; var fn = function () { }; var a = new Array(); alert(typeof x); // "undefined" alert(typeof n); // "number" alert(typeof obj); // "object" alert(typeof fn); // "function" alert(typeof a); // "object"
عملگر instanceof
عملگر typeof بهترین روش جهت تشخیص نوع دادهای متغیرهایی است که دارای نوع دادهای پایه یا Primitive Type هستند. اما جهت تشخیص نوع دادهای اشیاء و به صورت کلی انواع ارجاعی، این عملگر فقط مقدار "object" را برمیگرداند و اشارهای به ماهیت واقعی آن Object ندارد. برای این منظور میتوانیم از عملگر instanceof استفاده نماییم تا بررسی کنیم یک نوع ارجاعی از جنس چه نوع Object ی میباشد. شکل کلی استفاده از این عملگر به صورت زیر است:
result = variable instanceof constructor
اگر variable ، از جنس نوع ارجاعی تعیین شده در بخش سازنده یا constructor باشد، عملگر instanceof مقدار true را بر میگرداند. به مثال زیر توجه کنید:
var a = new Array(); alert(a instanceof Array); // true alert(a instanceof Object); // true alert(a instanceof Date); // false
عملگر in
همانطور که قبلا اشاره شد، جهت دسترسی به اعضای یک شیء، میتوان با آن شیء همانند یک آرایه رفتار نمود. به عبارتی دیگر میتوان نام یک ویژگی یا تابع را در [] قرار داد تا به مقدار آن دسترسی داشت. بنابراین میتوان همانند یک آرایه و با استفاده از یک حلقهی for-in تمامی اعضای یک شیء را پیمایش نمود. در واقع عملگر in در این حلقه بررسی میکند چه ویژگیها و توابعی در یک شیء وجود دارند و تمامی آنها را بر میگرداند. به مثال زیر توجه کنید:
var person = { name: "Meysam", age: 33, sayInfo: function () { alert(name + ":" + age); } }; for (var i in person) alert(i + " => " + person[i]);
خروجی :
name => Meysam age => 33 sayInfo => function() { alert(name + ":" + age); }
کاربرد دیگر عملگر in بررسی وجود یک ویژگی یا تابع در یک شیء میباشد. اگر ویژگی یا تابع مورد نظر در شیء وجود داشته باشد، مقدار true را بر میگرداند. به مثال زیر توجه کنید:
alert("name" in person); // true alert("sayInfo" in person); // true alert("birth" in person); // false
عملگر delete
از عملگر delete جهت حذف یک ویژگی و یا یک تابع از یک شیء استفاده میشود. به مثال زیر توجه کنید:
var person = { name: "Meysam", age: 33, sayInfo: function () { alert(name + ":" + age); } }; alert("sayInfo" in person); // true delete person.sayInfo; alert("sayInfo" in person); // false
ویژگی constructor
پس از عملگرهای فوق، یکی از پرکاربردترین ویژگیهایی که برای اشیاء وجود دارد، ویژگی constructor میباشد. در واقع این ویژگی نیز یکی از راهکارهای بررسی صحت و اعتبار متغیرها، آرگومانها و اشیا میباشد. ویژگی constructor ، به تابع سازندهی یک شیء اشاره میکند و آن سازنده را به عنوان خروجی بر میگرداند. دقت داشته باشید که خروجی این ویژگی، خود تابع سازنده میباشد و یک مقدار رشتهای نیست. به مثال زیر توجه کنید:
var obj = {}; var a = new Array(); var x = 10; alert(obj.constructor); alert(obj.constructor === Object); alert(typeof obj.constructor); alert(a.constructor); alert(x.constructor);
خروجی :
function Object() { [native code] } true function function Array() { [native code] } function Number() { [native code] }
در اینجا دیگر آمادهی ورود به برنامه نویسی شیء گرا در جاوا اسکریپت میباشیم که در مقالات بعدی به آن خواهیم پرداخت و همچنین با جزئیات بیشتری اشیاء را تشریح مینماییم.