
بخش ۳: تبدیل نوع و نوع الزامی (Type Conversion & Coercion)
این بخش به یکی از ویژگیهای منحصربهفرد و گاهی گیجکننده جاوااسکریپت میپردازد. درک این مفاهیم به شما کمک میکند کدهای قابل پیشبینیتری بنویسید.
مفاهیم کلیدی:
۱. تبدیل نوع صریح (Explicit Type Conversion):
این زمانی است که شما به عمد یک نوع داده را به نوع دیگر تبدیل میکنید. این کار با استفاده از توابعی مانند String()، Number() و Boolean() انجام میشود.
// تبدیل به رشته
let num = 123;
let str = String(num);
console.log(str); // خروجی: "123"
console.log(typeof str); // خروجی: "string"
// تبدیل به عدد
let str2 = "456";
let num2 = Number(str2);
console.log(num2); // خروجی: 456
console.log(typeof num2); // خروجی: "number"
// تبدیل به بولین
let value = 0;
let bool = Boolean(value);
console.log(bool); // خروجی: false۲. الزام نوع ضمنی (Implicit Type Coercion): این زمانی است که جاوااسکریپت به طور خودکار انواع داده را تبدیل میکند. این معمولاً هنگام استفاده از عملگرهای مختلف اتفاق میافتد.
موقعیتهای رایج:
-
هنگام الحاق رشته (String Concatenation):
let result = 5 + " apples"; // عدد 5 به رشته تبدیل میشود console.log(result); // خروجی: "5 apples" -
در عملیات ریاضی:
let result = "10" - 2; // رشته "10" به عدد تبدیل میشود console.log(result); // خروجی: 8 -
در مقایسهها:
console.log(5 == "5"); // خروجی: true (اجبار نوع اتفاق میافتد) console.log(5 === "5"); // خروجی: false (بدون اجبار نوع)
مقادیر Falsy (نادرستنما):
مقادیری که وقتی به بولین تبدیل میشوند، false میشوند:
false0""(رشته خالی)nullundefinedNaN
ارزیابی بخش ۳:
سؤال ۱: پیشبینی خروجی خروجی هر خط از کد زیر چیست؟
console.log(Number("123"));
console.log(String(true));
console.log(Boolean(""));
console.log(5 + "2");
console.log("10" - 3);
console.log(5 == "5");
console.log(5 === "5");
console.log(Boolean("Hello"));سؤال ۲: تشخیص نوع تبدیل برای هر مورد مشخص کنید که آیا تبدیل صریح اتفاق افتاده است یا اجبار ضمنی:
- الف)
let x = String(25); - ب)
let y = "10" * 2; - ج)
let z = Boolean(0); - د)
let w = 15 + "";
تحلیل پاسخها:
سؤال ۱: پیشبینی خروجی
بیایید با دقت بیشتری کد را بررسی کنیم:
console.log(Number("123")); // ✅ 123 (صحیح)
console.log(String(true)); // ❌ "true" (نادرست) - پاسخ صحیح: "true"
console.log(Boolean("")); // ✅ false (صحیح)
console.log(5 + "2"); // ❌ 7 (نادرست) - پاسخ صحیح: "52"
console.log("10" - 3); // ✅ 7 (صحیح)
console.log(5 == "5"); // ✅ true (صحیح)
console.log(5 === "5"); // ✅ false (صحیح)
console.log(Boolean("Hello")); // ✅ true (صحیح)توضیح خطوط نیازمند بازبینی:
-
خط ۲:
String(true)→ وقتیtrueبه رشته تبدیل میشود، به"true"تبدیل میشود، نه"true" -
خط ۴:
5 + "2"→ وقتی یک عدد با یک رشته با عملگر+جمع میشود، جاوااسکریپت عدد را به رشته تبدیل میکند و الحاق رشته انجام میدهد. بنابراین5به"5"تبدیل شده و با"2"ترکیب میشود →"52"
نکته کلیدی: عملگر + وقتی با رشتهها استفاده شود، الحاق رشته انجام میدهد. اما سایر عملگرهای ریاضی مانند -، *، / رشتهها را به عدد تبدیل میکنند.
سؤال ۲: تشخیص نوع تبدیل
- الف)
let x = String(25);→ تبدیل صریح ✅ (ما عمداً از تابعString()استفاده کردهایم) - ب)
let y = "10" * 2;→ اجبار ضمنی ✅ (جاوااسکریپت به طور خودکار رشته “10” را به عدد تبدیل میکند) - ج)
let z = Boolean(0);→ تبدیل صریح ✅ (ما عمداً از تابعBoolean()استفاده کردهایم) - د)
let w = 15 + "";→ اجبار ضمنی ✅ (جاوااسکریپت به طور خودکار عدد 15 را به رشته تبدیل میکند)
جمعبندی نهایی بخش ۳:
نکات مهم برای توسعهدهنده ارشد:
- همیشه از
===به جای==استفاده کنید تا از اجبار نوع ناخواسته جلوگیری شود - برای تبدیلهای عددی، از
parseInt()وparseFloat()برای رشتههایی که ممکن است حروف داشته باشند استفاده کنید - برای الحاق رشتهها، از template literals (
${}) استفاده کنید که خوانایی بیشتری دارد