JavaScript DataStructure Part 1
ساختمان های داده در جاوا اسکریپت متفاوت از ساختمان های داده در زبان های دیگر است (مثلا php) . این ساختمان داده ها به صورت یک collection است که بر اساس ماهیت هر ساختمان داده یک سری متد برای manipulate کردن این ساختمان داده ایجاد شده است که به صورت یک متد روی آن اجرا می گردد.
سیستم لاراول نیز با الهام گرفتن از این عملکرد ساختمان داده های جدیدی را پیاده سازی کرده است و به صورت یک شئ بر می گرداند و در حقیقت collection های خاص برگشتی لاراول در ازای آرایه و غیره بسیار نزدیک به این ماهیت جاواسکریپت است.
Boolean
ساختمان داده Boolean یکی از دو مقدار true , false است . این ساختمان داده می تواند تبدیل شده ساختمان داده های دیگر مثل number , string است یا یک عبارت همیشه درست یا یک عبارت منطقی حاصل از عملگر های منطقی باشد.
var a = 1==1 var b = 10 > 4 var c = true var d = !!(5+5) var e = Boolean(1+5)
برای تبدیل عبارات به نوع داده Boolean می توان از عملگر !! , ! و یا تابع Boolean()
استفاده کنید.
نوع داده Boolean می تواند حاصل عبارت های زیر باشد:
- Comparisons and Conditions
- Everything With a “Value” is True
- Everything Without a “Value” is False
- The Boolean value of -0 (minus zero) is false
- The Boolean value of “” (empty string) is false
- The Boolean value of undefined is false
- The Boolean value of null is false
- The Boolean value of NaN is false
- JavaScript Booleans as Objects
Typeof متغیر Boolean نوع boolean است مگر این که شئ آن را ساخته باشید.
let x = false; let y = new Boolean(false); // typeof x returns boolean // typeof y returns object
Booleand Methods
Method | Description |
---|---|
toString | برای تبدیل به رشته این عبارست استفاده می شود . برعکس حالت تبدیل رشته به boolean
var a = true console.log(a) true a.toString() "true" |
valueOf | مقدار متغیر را برمی گرداند که همان true, false است . معمولاً توسط جاوا اسکریپت در پشت صحنه فراخوانی می شود و به طور واضح در کد نیست. |
همچنین این ساختار یک سری ویژگی نیز در خود دارد. مهم ترین آن prototype است که به صورت همگانی در تمامی ساختمان داده های جاواسکریپت وجود دارد . این ویژگی این قابلیت را برای ما فراهم می کند که متد اختصاصی خودمان را در این سیستم قرار بدهیم (در نهایت این متد یکی از مقادیر prototype است ).
Boolean.prototype.myColor = function() { if (this.valueOf() == true) { return "green"; } else { return = "red"; } };
حال پس از افزودن این متد در این متغیر قابلیت این را داریم که متد myColor را بیفزاییم .
let a = true; let color = a.myColor();
در اجرای کد بالا چون مقدار برابر با true است green برمی گرداند.
همچنین می توان ویژگی های دیگری برای این سیستم در نظر گرفت. به طور مثال اگر لازم باشد یک ویژگی جدید با مقدار رشته ای به آن اضافه کنید.
Undefined
در جاواسکریپت متغیر بدون مقدار برابر است با undefined اگر مقدار Typeof آن را بگیرید برابر مقدار undefined است .
let name; //type is undefined value is undefined let name = undefined // set value undefined directly
دقت داشته باشید که متغیر با مقدار “” یا همان empty string برابر undefined نیست و برابر string است.
undefined متد (Methods) و ویژگی (Property) ندارد . بیشتر در شرط ها این نوع را چک می کنیم برای این که به متد خطا نخوریم . به طور مثال در یک بلوک کد قرار است یک متد را اجرا کنیم باید حتما چک کنیم که این متغیر مقدار داشته باشد.
const names = getNames(); if(undefined !== Typeof names){ // do something }
Null
عدم وجود از هر مقدار از یک شئ را به صورت عمد Null می نامیم . مقدار null یا به صورت دستی با عبارت null تعیین می گردد و یا حاصل یک پردازش است :
let str = 'hello' const m = str.match(/[aeiou]/gi); //m is null let name = null //name is null
null برابر با متغیر تعریف نشده نیست . اگر متغیری در جاواسکریپت تعریف نشده باشد این موضوع باعث می گردد که به خطا برخورد کنیم:
// foo does not exist. It is not defined and has never been initialized: foo; //ReferenceError: foo is not defined
حال این که تعریف متغیر به صورت null به این شکل است :
// foo is known to exist now but it has no type or value: var foo = null; foo; //null
نکته مهم این که اگر Typeof null را بگیرید مقدار object را برای شما برمی گرداند.
Null vs Undefined
Null و Undefined از نظر مقدار با هم برابر هستند اما از نظر نوع برابر نیستند . null از نظر ماهیت هیچ است (absent) اما مقدار undefined یعنی تعریف نشده .
typeof null // "object" (not "null" for legacy reasons) typeof undefined // "undefined" null === undefined // false null == undefined // true null === null // true null == null // true !null // true isNaN(1 + null) // false isNaN(1 + undefined) // true
برای اطمینان از null بودن یک عبارت می توانید از === استفاده کنید . همچنین کاراکتر ! هم می توانید کمک بگیرید:
if(null === pass){ alert('password is required!') } /---------------------type 2 if(!pass){ alert('password is required') }
برای چک کردن این که یک عبارت null است به هیچ عنوان از null == Typeof variable
استفادپه نکنید چون مقدار این عبارت برابر است با object ! .
دیدگاهتان را بنویسید