خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

درک نوع تبدیل و اجبار در جاوا اسکریپت

مراقب نوع اجبار باشید: این ویژگی پیشرفته می‌تواند علت بروز اشکالات ظریف باشد، بنابراین مطمئن شوید که چگونه کار می‌کند.

تایپ پویا در جاوا اسکریپت به این معنی است که کد شما می تواند کمی ساده تر باشد، اما همچنان ممکن است اشتباه کنید. برای اجتناب از آنها، دانستن اینکه جاوا اسکریپت چگونه مقادیر را با انواع مختلف حل می کند و آنها را مقایسه می کند مفید است.

درک تبدیل نوع و اجبار در جاوا اسکریپت برای نوشتن برنامه های قابل اعتماد و کارآمد بسیار مهم است. هر مفهوم دارای موارد استفاده خاص و بهترین شیوه هایی است که می تواند بر رفتار کد شما تأثیر بگذارد.

چرا تبدیل تایپ و اجبار در جاوا اسکریپت اتفاق می افتد؟

زبان جاوا اسکریپت به صورت پویا تایپ می شود. این بدان معنی است که برخلاف زبان‌های تایپ‌شده استاتیک، جاوا اسکریپت نیازی به تعریف صریح نوع داده یک متغیر قبل از استفاده از آن ندارد. در عوض، جاوا اسکریپت نوع را در زمان اجرا بسته به مقدار متغیر تعیین می کند.

از آنجایی که انواع داده ها تا زمان اجرا به صراحت اعلام نمی شوند، زمانی که عملیاتی را انجام می دهید که به انواع داده های مختلف نیاز دارد، جاوا اسکریپت به طور خودکار سازگاری آنها را با یکدیگر برای عملیاتی که می خواهید انجام دهید بررسی می کند. اگر آنها با یکدیگر سازگار باشند، عملیات به طور عادی پیش می رود.

با این حال، فرض کنید که آنها با عملیات ناسازگار هستند – برای مثال، تلاش برای اضافه کردن یک رشته و یک عدد. در چنین مواردی، جاوا اسکریپت به‌طور خودکار یکی از انواع را وادار می‌کند تا به جای خطا، از موفقیت آمیز بودن عملیات اطمینان حاصل کند. این فرآیند به عنوان اجبار نوع یا اجبار ضمنی شناخته می شود.

نوع اجبار

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

اما همه انواع داده ها را نمی توان اجبار کرد. رشته، عدد و بولی تنها انواع داده جاوا اسکریپت هستند که زبان آنها را به نوع دیگری وادار می کند. وقتی می‌خواهید عملیات ناسازگاری را با انواع داده‌ای انجام دهید که جاوا اسکریپت نمی‌تواند آنها را وادار کند، با خطا مواجه می‌شود.

مطلب مرتبط:   یک پنجره بازشو با استفاده از HTML، CSS و جاوا اسکریپت ایجاد کنید

جاوا اسکریپت انواع را بر اساس نوع عملیات و اپراتوری که در عملیات استفاده می کنید، اجبار می کند.

اجبار با اپراتور “+”.

در جاوا اسکریپت، عملگر “+” بسته به نوع عملوندهایش دو رفتار متفاوت دارد. می تواند هم جمع عددی و هم الحاق رشته را انجام دهد. هنگامی که یکی از عملوندها از نوع مورد انتظار نباشد، این می تواند منجر به اجبار نوع شود.

اگر هر دو عملوند اعداد باشند، عملگر “+” جمع را انجام می دهد:

let num1 = 42;
let num2 = 10;
let sum = num1 + num2; // Addition
console.log(sum); // 52

اگر هر دو عملوند رشته ای باشند، عملگر “+” الحاق رشته ها را انجام می دهد:

let str1 = "Hello";
let str2 = "world";
let result = str1 + " " + str2; // String concatenation
console.log(result); // "Hello world"

با این حال، اگر یکی از عملوندها یک رشته نباشد، جاوا اسکریپت به طور ضمنی آن را قبل از اجرای الحاق به یک رشته وادار می کند:

// Number and String
let num = 42;
let str = "Hello";

// num is coerced to a string and then concatenated
let result_1 = num + str;
console.log(result_1); // "42Hello"

// String and Boolean
let bool = true;

// bool is coerced to a string and then concatenated
let result_2 = bool + str;
console.log(result_2); // "trueHello"

اجبار با اپراتور “-“.

در جاوا اسکریپت، عملگر “-” در درجه اول برای عملیات تفریق استفاده می شود. هنگامی که یک یا هر دو عملوند در عملیاتی که شامل عملگر “-” است یک عدد نباشد، جاوا اسکریپت سعی می کند آن را به یک عدد وادار کند.

وقتی هر دو عملوند اعداد باشند، جاوا اسکریپت تفریق را انجام می دهد. همچنین زمانی که یک یا هر دو عملوند رشته هایی هستند که یک عدد را نشان می دهند، تفریق را انجام می دهد:

const num1 = 10;
const num2 = 20;
const result_1 = num2 - num1; // Subtraction
console.log(result_1); // 10

const strNum = "10";
const strNum2 = "20";
const result = strNum2 - strNum; // Type coercion to numbers, then subtraction
console.log(result_1); // 10

هنگامی که هیچ یک از عملوندها یک عدد یا رشته ای نیست که یک عدد را نشان می دهد، جاوا اسکریپت سعی می کند نوع داده را به معادل عددی آن وادار کند. اگر نوع داده معادل عددی نداشته باشد، عملیات NaN (عدد نیست) را برمی گرداند:

// true gets coerced to 1, false gets coerced to 0
const boolNum = true;
const boolNum2 = false;
const result_1 = boolNum - boolNum2;
console.log(result_1); // 1

// empty arrays get coerced to 0
const arrNum = [];
const arrNum2 = [];
const result_2 = arrNum - arrNum2;
console.log(result_2); // 0

// empty objects get coerced to NaN
const objNum = {};
const result_3 = arrNum - objNum;
console.log(result_3); // 0 - NaN = NaN

در این مثال، جاوا اسکریپت مقادیر بولی true و false را به ترتیب 1 و 0 به مقادیر معادل عددی آنها وادار می کند. آرایه های خالی به 0 و اشیاء خالی به NaN اجباری می شوند.

مطلب مرتبط:   نحوه ایجاد یک کوتاه کننده URL با استفاده از پایتون و بیتلی

اجبار با اپراتورهای برابر (==)/(===).

در جاوا اسکریپت، عملگرهای برابری (== و ===) مقادیر برابری را با هم مقایسه می کنند. با این حال، آنها به دلیل اجبار نوع رفتار متفاوتی دارند.

عملگر “==” (برابری سست) نوع اجبار را انجام می دهد، به این معنی که سعی می کند عملوندها را قبل از مقایسه به همان نوع تبدیل کند:

"10" == 10; // true

در این مثال، جاوا اسکریپت رشته “10” را به عدد 10 وادار می کند، بنابراین عبارت درست ارزیابی می شود.

با این حال، عملگر “===” (برابری دقیق) اجبار نوع را انجام نمی دهد. برای اینکه مقایسه درست را بازگرداند، باید مقدار و نوع آن یکسان باشد:

"10" === 10; // false

در این مثال، مقایسه false را برمی‌گرداند زیرا عملوندها انواع مختلفی دارند (رشته و عدد).

به طور کلی باید از عملگر === (برابری دقیق) در جاوا اسکریپت برای جلوگیری از رفتار اجباری نوع غیرمنتظره استفاده کنید.

اجبار نوع یا تبدیل ضمنی به دلیل ماهیت خودکار می تواند منجر به رفتار غیرمنتظره شود. در مواردی که نیاز به تبدیل انواع دارید، توصیه می شود که به صراحت انواع را تبدیل کنید. فرآیند تبدیل صریح انواع به عنوان تبدیل نوع شناخته می شود. به آن ریخته گری نوع و تبدیل نوع صریح نیز گفته می شود.

تبدیل نوع

تبدیل نوع، همچنین به عنوان ریخته‌گری نوع نیز شناخته می‌شود، فرآیند صریح تبدیل یک مقدار از یک نوع داده به نوع دیگر در جاوا اسکریپت با استفاده از توابع داخلی مانند Number()، String()، Boolean()، parseInt() و parseFloat. ().

شما می توانید تبدیل نوع را با ارسال مقداری که می خواهید به توابع تبدیل داخلی به عنوان آرگومان تبدیل کنید، انجام دهید. سپس این توابع مقدار شما را به نوع دلخواه شما تبدیل می کنند.

مطلب مرتبط:   دستکاری رشته در Go: نحوه به روز رسانی متن

در اینجا یک مثال با استفاده از تابع Number() آورده شده است:

const numStr = "123";
const num = Number(numStr); // Converts a string to a number
console.log(num); // 123

ارسال رشته ای که یک عدد معتبر است به عنوان آرگومان به تابع Number() یک عدد را برمی گرداند. ارسال رشته ای که یک عدد نامعتبر است، NaN را برمی گرداند.

در اینجا یک مثال با استفاده از تابع String () آورده شده است:

const bool = true;
const str2 = String(bool); // Converts a boolean to a string
console.log(str2); // "true"

ارسال هر نوع داده ای به جز یک Symbol در تابع String() نوع داده را به رشته تبدیل می کند.

در اینجا یک مثال با استفاده از تابع Boolean() آورده شده است:

// Convert a string to a boolean (truthy: true, falsy: false)
const str = "hello";
const bool2 = Boolean(str);
console.log(bool2); // true

ارسال مقادیر truey به تابع Boolean() مقدار بولی “true” را برمی گرداند در حالی که ارسال مقادیر falsy، boolean “false” را برمی گرداند.

در اینجا یک مثال با استفاده از تابع ParseInt () و ParseFloat () آورده شده است:

// Convert a string to an integer
const numStr = "123.00";
const num1 = parseInt(numStr);
console.log(num1); // 123

// Convert a string to a floating-point number
const floatStr = "3.14";
const num2 = parseFloat(floatStr);
console.log(num2); // 3.14

تابع parseInt() یک آرگومان رشته ای را تجزیه می کند و یک عدد صحیح برمی گرداند. تابع parseFloat() یک رشته را به یک عدد ممیز شناور تبدیل می کند.

اعمال نفوذ نوع اجبار و تبدیل

با درک نوع اجبار و تبدیل، می توانید تصمیمات آگاهانه ای در مورد زمان و نحوه استفاده موثر از آنها در کد خود بگیرید. مهم است که تعادل درست را ایجاد کنید، از اجبار نوع به طور عاقلانه برای کد مختصر و راحت و تکیه بر تبدیل نوع صریح برای تبدیل نوع عمدی و قابل پیش بینی استفاده کنید.