تعداد بازدید: 284

Expressions and operators in JavaScript

غیر از کاراکتر های عدد و رشته یک سری کاراکتر دیگر داریم که در دسته بندی Expressions – operators قرار می گیرند. کاربرد آن ها مقایسه ، عملیات های ریاضی ، مقدار دهی و عملیات های منطقی و … است :

در عملیات هایی که در آن از operator استفاده می شود یک عبارت یا یک statement است . متغیر ها و یا مقدار هایی که در این statement قرار می گیرد به آن عملوند operand و اون کاراکتر یا عبارت که این عملوند ها را درگیر می کند عملگر یا operator می گویند.

به صورت کلی در این بخش قرار است که در رابطه با عملگر های معمول (operator) و عبارات (expression) خاص می پردازیم . مشخصه مشترک این دو مورد قرار گرفتن در میان دو مقدار – value – است . ممکن است این عملگر با یک مقدار در ارتباط باشد که به آن Unary است.

a == b //a,b is operands , = is operator

Assignment Operators

از این دسته عملگرها برای مقدار دهی میان متغیر و مقدار استفاده می کنیم (variable && value). به صورت کلی عملگر هایی که در آن = باشند در دسته عملگر های assignment قرار می گیرند.

Operator Description
= مقدار دهی میان variable , value

Number Operator

سایر عملگر های مقداردهی در ضمره عملیات های ریاضی می باشد که در این مقاله گفته شده است .این دسته عملگر های شامل assignment , arithmetic می باشد.

Strings Operator

این دسته از عملگر ها در ضمره عملگر های ساختمان داده رشته قرار می گیرد و در این مقاله قرار گرفته است. عملگر های assignment , concatenate این موارد می باشد.

Comparison Operators

این دسته از عملگر ها برای مقایسه میان دو عملوند استفاده می شوند. معمولا در این نوع عملگر ما نوع دو عملوند باید یکسان باشد. منطقی است که دو عدد از نظر مقدار با هم مقایسه می شوند و دو رشته از نظر ویژگی های آن ها نظیر طول رشته .

Operator Description
== equal value
=== equal value , equal type

5 == "5" //true
5 === "5" //false
!= not equal value
!== not equal value , not equal value
> قیاس کوچکتری
< قیاس بزرگتری
>= قیاس کوچکتر یا مساوی
=< قیاس بزرگتر یا مساوی . به این شکل است که حتما به همین ترتیب یعنی اول علامت < بعد = قرار بدهید. این یک تمرین خوب است . در برخی زبان ها مثل php این حالت اگر به شکل => باشد خطا خواهیم داشت به دلیل تداخل با علامت assign در آرایه های انجمنی

Conditional (Ternary) Operator

condition ? value : value این یک شرط تک خطی است که در اکثر زبان های C بیس داریم . بخش اول مقدار if است و بخش دوم otherwise است.

(age < 18) ? "Too young":"Old enough";

Logical operators

عملیات های منطقی معمولا به صورت ترکیبی با عملگر های دیگر استفاده می شود.

Operator Description
&& AND
|| OR
! NOT
!!  از این عملگر برای تبدیل به Boolean استفاده می کنیم.

let name = 'edi'
let condition = !! 'edi' //true
let condition2 = ! name  //false

تبدیل به Boolean با عملگر های !! , !

به صورت کل خروجی در عملگر های منطقی (!! و !) به شکل Boolean است .گاهی در کد ها برای برگرداندن یک مقدار به صورت Boolean در صورتی که مقدار حاصل این منطق اجرایی باشد استفاده می کنیم.

  • !! : برای تبدیل کردن به Boolean دقیقا مطابق با خروجی منطق اجرایی
  • ! : به صورت Boolean است عکس منطق اجرایی در متد.

مقدار دهی با عملگر های && , ||

در منطق عملگر && قرار است تا آخرین عملوند را اجرا کند تا به آخرین true و اولین false برسد. به این شکل که اگر اولین false را پیدا کرد دیگر ادامه نمی دهد و اگر در ادامه statement شما خطایی داشته باشید در صورتی که به نتیجه مطلوب یعنی false رسیده باشد دیگر خطا نداریم:

let a = true && false && l; //false . but l variable not define

در مثال بالا ما یک خطا در هنگام اجرا داریم که متغیر l را تعریف نکرده ایم و اگر به صورت عادی این اجرا گردد خطای Uncaught ReferenceError: l is not defined را خواهیم داشت . اما چون به اولین false رسید دیگر ادامه نمی دهد.

let e = true && 3  //3
let l = 2 && 5 && 4 //4
let q = 5 && false && 4 //false

عملگر || یا همان مقدار OR به این شکل است که به دنبال اولین true و به دنبال آخرین false می گردد. به این شکل که اگر در یک statement بلند به اولین true رسید دیگر ادامه نمی دهد و اگر پیدا نشده تا اخر عبارت جلو رفته و در نهایت آخرین false را بر می گردد.

let a = 2 || 3 || 4 || 5 //2
let b = false || false || 4  //4
let c = false || 3 || 4  || l //3 but l variable is undefine

همان طور که در خط سه مثال بالا متغیر l تعریف نشده است و چون مفسر به اولین مقدار همیشه درست رسیده دیگر ادامه را اجرا نمی کند.

یکی دیگر از کاربردهای عملگر || همین است که می توان چک کرد که اگز مقدار یک متغیر برابر با هر یک از موارد false , undefined , null باشد مقدار دوم و اگر برابر با مقدار واقعی باشد همان مقدار باشد (این حالت را به صورت ternary operator هم می توان تشخیص داد) . حالت های مختلف را در مثال زیر می توانید تست کنید:

let a = NaN
//let a = false
//let a = undefined
//let a = null
//let a = 44

let result = a || 23
console.log(result)

Nullish Coalecsing

یک عبارت که Boolean بر می گرداند. به این ترتیب که قرار است که اگر در شرط قرار بدهیم تنها در حالت undefined , null صحت عملکرد را برمی گرداند:

if(undefined ?? true){
    console.log('undefined')
}
/* undefined */

if(NaN ?? true){
    console.log('not a number')
}

if(null ?? true){
    console.log('null')
}
/* null */

if(false ?? true){
    console.log('false')
}

Optional Chaining

در جاوا اسکریپت اگر از یک مقدار undefined یک Property یا یک Array item با کلید اشتباه بگیرید خطای Type Error خواهید داشت که مانع ادامه اجرای یک برنامه خواهد بود.این دسته از خطا برای Object ها و Array اتفاق می افتد. روال به این صورت است که تا عمق یک اگر مقدار undefined باشد خطایی نداریم. به طور مثال اگر کلید یک شئ تعریف شده را اشتباه درخواست بدهیم. اما اگر از سطح دوم به بعد یعنی کلید بعدی را از یک مقدار undefined درخواست بدهیم خطا خواهیم داشت:

person = {
  grades: {
    math: {
      mid: 19,
      final: 20
    },
    sport: {
      mid: 20,
      final: 20
    }
  }
}

person.grades.history.mid
/*Uncaught TypeError: person.grades.history is undefined*/

let rooms = [
  [ 10,29 ],
  [ 11,23 ]
]

let s = rooms[3][2]
/*Uncaught TypeError: rooms[3] is undefined*/

برای مدیریت این خطا می توانید از عملگر های && , ?. استفاده کنید.

console.log(person?.grades?.history?.mid)
console.log(person && person.grades && person.grades.history && person.grades.history.mid)

console.log(rooms[3] && room[3][2])
console.log(rooms[3]?.[2])

Bitwise Operators

همان طور که از نام این دسته عملگر مشخص است به صورت عملوند های آن ها به صورت 32 بیتی باشند . این دسته عملگر ها عملوند ها را به مبنای ۳۲ بیت می برد و بعد از آن عملیات را در همان مبنای ۳۲ بیت انجام می دهد و نهایت خروجی که به شما می دهد در مبنای 10 یعنی همان decimal است.

Unary operators

عملگر ها یا در اینجا می توان گفت عملیات های یگانه دسته ای از عملگر ها هستند که یک عملگر دریافت می کنند. در دسته قبل یک یا چند عملوند قبول می کردند. این عملگر ها از طرفی به تابع ها نزدیک هستند اما به دلیل syntax استفاده از آن ها و این که یک عملوند بیشتر یا کمتر نمی گیرند در دسته عملگر ها قرار می گیرند.

مهم ترین عملگر های Unary :

  • typeof
  • delete
  • in
  • instanceof
  • void
Operator Description
typeof برای برگداندن نوع ساختمان داده متغیر یا مقدار داده شده

 typeof "John"                 // Returns string
typeof 3.14                   // Returns number
typeof NaN                    // Returns number
typeof false                  // Returns boolean
typeof [1, 2, 3, 4]           // Returns object
typeof {name:'John', age:34}  // Returns object
typeof new Date()             // Returns object
typeof function () {}         // Returns function
typeof myCar                  // Returns undefined (if myCar is not declared)
typeof null                   // Returns object
delete برای حذف یک ویژگی property از یک شئ object است

const person = {
  firstName:"John",
  lastName:"Doe",
  age:50,
  eyeColor:"blue"
};
delete person.age;   // or delete person["age"];

این عملگر روی تابع یا متغیر تاثیری ندارد . برای اشیا پیش فرض جاوا اسکریپت کاربرد ندارد و در صورت استفاده برنامه شما crash می کند.

delete Math.PI
Math.PI
3.141592653589793
in این عملگر بررسی می کند که آیا مقدار داده شده در object مورد نظر وجود دارد یا خیر . این جستجو در کلید ها و مقدار ها اتفاق می افتد.

// Arrays
const cars = ["Saab", "Volvo", "BMW"];
"Saab" in cars          // Returns false (specify the index number instead of value)
0 in cars               // Returns true
4 in cars               // Returns false (does not exist)
"length" in cars        // Returns true  (length is an Array property)

// Objects
const person = {firstName:"John", lastName:"Doe", age:50};
"firstName" in person   // Returns true
"age" in person         // Returns true

// Predefined objects
"PI" in Math            // Returns true
"NaN" in Number         // Returns true
"length" in String      // Returns true
instanceof حالت شرطی برای typeof است

const cars = ["Saab", "Volvo", "BMW"];

(cars instanceof Array)   // Returns true
(cars instanceof Object)  // Returns true
(cars instanceof String)  // Returns false
(cars instanceof Number)  // Returns false
void این عملگر undefined برمی گرداند ضمن اجرای منظق پاس داده شده به آن . این عملگر بیشتر برای ارزیابی است . این عملگر به واسطه ورودی های طولانی که به آن پاس داده می شود می تواند داخل یک پرانتز قرار بگیرد . گذاشتن () پرانتز اختیاری است اما یک best practice است. همیشه بگذارید و سوال نپرسید.

سبک استفاده از آن به شکل void (expression) است . expression را اجرا می کند اما undefined بر می گرداند انگار نه انگار.

var a =5 
void a+=5
void (a += 5) // a=5 and return NaN

یکی دیگر از کاربردهای این عملگر این است که در داخلی href قرار می گیرد و لینک را به یک event تبدیل می کند که درخواست به لینک ارسال نمی کند.

<a href="javascript:void(0);">
  Useless link
</a>

در مثال دیگر رنگ زمینه صفحه را قرمز می کنیم بی این که کلیک روی لینک برای ما درخواستی ارسال کند.

<a href="javascript:void(document.body.style.backgroundColor='red');">
  Click me to change the background color of body to red
</a>

اشتباهات رایج در پیدا کردن نوع یک مقدار:

  • NaN is number برای متد جایگزین isNaN
  • array is object برای متد جایگزین Array.isArray
  • date is object برای جایگزین instanceof Date
  • null is object برای عملگر جایگزین ! استفاده کنید
  • undefined variable is undefined

Typeof

برای تعیین نوع ساختمان داده یک متغیر می توان از این تابع پر کاربرد استفاده کرد:

Type Result
Undefined "undefined"
Null "object"
Boolean "boolean"
Number "number"
BigInt "bigint"
String "string"
Symbol "symbol"
Function "function"
Any other object "object"

در ساختار بالا نکته قابل توجه این است که مقادیر ساختمان داده ها یا Object هستند یا Primitive Data Structure . پس می توان گفت که ساختمان داده ها را در جاوا اسکریپت به همین موارد تقسیم بندی می کنیم. مثلا Array نیز در جاوا اسکریپت یک Object است اگر از typeof operator استفاده کنید.

مطالب مشابه

اشیا در زبان جاوا اسکریپت - برنامه نویسی شی گرا

اشیا در زبان جاوا اسکریپت

اشیا در زبان جاوا اسکریپت از اهمیت بالایی برخوردار است به گونه ای که می توان گفت زبان جاوا اسکریپت از المان هایی مبتنی...

Javascript Variable Scope – Mutable

هر statement بر اساس جایگاهی از کد که در آن قرار گرفته است سطح دسترسی به سایر قسمت های کد دارد که به آن Scope می گوییم....

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای Expressions and operators in JavaScript

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *