آیا میتونم یه رشته که مقدار بولین رو نشون میده (مثل 'true' یا 'false') به نوع اصلی بولین تو جاوااسکریپت تبدیل کنم؟
من یه فرم مخفی تو HTML دارم که بر اساس انتخاب کاربر توی یه لیست آپدیت میشه. این فرم چندتا فیلد داره که مقدار بولین رو نشون میدن و به صورت داینامیک با مقدار بولین واقعی پر میشن. ولی وقتی این مقدار توی فیلد مخفی قرار میگیره، به رشته تبدیل میشه.
تنها راهی که پیدا کردم تا مقدار بولین فیلد رو بعد از تبدیل به رشته بفهمم، این بود که به مقدار رشتهای اون تکیه کنم.
var myValue = document.myForm.IS_TRUE.value;
var isTrueSet = myValue == 'true';
راه بهتری برای انجام این کار وجود داره؟
کار زیر رو انجام بده:
var isTrueSet = (myValue === 'true');
با استفاده از عملگر هویت (===)، که هیچ تبدیل نوع ضمنی رو وقتی متغیرهای مقایسه شده نوعهای مختلفی دارن، انجام نمیده.
این کار باعث میشه که isTrueSet به مقدار بولین true تنظیم بشه اگر رشته "true" باشه و به مقدار بولین false اگر رشته "false" باشه یا اصلاً تنظیم نشه.
برای غیرحساس به حروف بزرگ و کوچک، امتحان کن:
var isTrueSet = /^true$/i.test(myValue);
// or
var isTrueSet = (myValue?.toLowerCase?.() === 'true');
// or
var isTrueSet = (String(myValue).toLowerCase() === 'true');
این کار رو انجام نده:
احتمالاً باید درباره استفاده از این دو روش برای نیازهای خاص خود محتاط باشی:
var myBool = Boolean("false"); // == true
var myBool = !!"false"; // == true
هر رشتهای که خالی نباشه با استفاده از این روشها به true ارزیابی میشه. با اینکه این روشها از نظر تبدیل به بولین تمیزترین راهها هستن، فکر میکنم اینها چیزی نیستن که دنبالش هستی.