اخرین بروزرسانی: 1.11.2015

اغلب نیاز به تبدیل یک داده به دیگری وجود دارد. مثلا:

varnumber1 = "46"; varnumber2 = "4"; varresult = number1 + number2; ورود به سیستم کنسول (نتیجه)؛ //464

هر دو متغیر رشته ها را نشان می دهند، به طور خاص نمایش رشته ای از اعداد. و در نتیجه، ما نه عدد 50، بلکه رشته 464 را به دست خواهیم آورد. اما خوب است که آنها را نیز جمع کنیم، کم کنیم، به طور کلی، مانند اعداد معمولی کار کنند.

در این حالت می توانیم از عملیات تبدیل استفاده کنیم. این تابع برای تبدیل رشته به عدد استفاده می شود. parseInt():

varnumber1 = "46"; varnumber2 = "4"; var result = parseInt(number1) + parseInt(number2); ورود به سیستم کنسول (نتیجه)؛ // پنجاه

برای تبدیل رشته ها به اعداد کسریتابع اعمال شده parseFloat():

varnumber1 = "46.07"; varnumber2 = "4.98"; var result = parseFloat(number1) + parseFloat(number2); ورود به سیستم کنسول (نتیجه)؛ //51.05

در این مورد، رشته می تواند محتوای ترکیبی داشته باشد، به عنوان مثال، "123 hello"، یعنی در این مورد اعداد وجود دارد، اما کاراکترهای معمولی نیز وجود دارد. اما متد parseInt() همچنان سعی می کند تبدیل را انجام دهد:

Varnum1 = "123 سلام"; varnum2 = parseInt(num1); ورود به سیستم کنسول (num2); // 123

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

با عملکرد ویژه isNaN()می توانید بررسی کنید که آیا یک رشته یک عدد را نشان می دهد یا خیر. اگر رشته یک عدد نباشد، تابع true و اگر عدد باشد، false را برمی‌گرداند:

Var num1 = "javascript"; varnum2 = "22"; varresult = isNaN(num1); ورود به سیستم کنسول (نتیجه)؛ // true - num1 عددی نیست نتیجه = isNaN(num2); ورود به سیستم کنسول (نتیجه)؛ // false - num2 یک عدد است

در بالا، ترجمه رشته ها به اعداد را در نظر گرفتیم سیستم اعشاری. با این حال، ما می توانیم اعداد را به هر سیستمی ترجمه کنیم. به طور پیش فرض، خود مفسر جاوا اسکریپت حدس می زند که ما می خواهیم رشته را به کدام سیستم عددی تبدیل کنیم (معمولاً سیستم اعشاری انتخاب می شود). اما می‌توانیم با استفاده از پارامتر دوم به صراحت نشان دهیم که می‌خواهیم یک رشته را در یک سیستم خاص به عدد تبدیل کنیم. به عنوان مثال، تبدیل به یک عدد در سیستم دودویی:

Varnum1 = "110"; varnum2 = parseInt(num1, 2); ورود به سیستم کنسول (num2); // 6

نتیجه 6 خواهد بود، زیرا 110 در دودویی عدد 6 در اعشار است.

حالا بیایید بنویسیم برنامه کوچک، که در آن از عملیات با متغیرها استفاده می کنیم:

جاوا اسکریپت

با کمک تابع prompt() یک کادر محاوره ای در مرورگر نمایش داده می شود که از شما می خواهد مقداری را وارد کنید. آرگومان دوم این تابع مقداری را که باید به طور پیش فرض استفاده شود را مشخص می کند.

با این حال، تابع prompt() یک رشته را برمی گرداند. بنابراین برای انجام عملیات با آن باید این رشته را به عدد تبدیل کنیم.

پس از باز کردن صفحه در مرورگر، یک دعوت نامه برای وارد کردن مبلغ واریز مشاهده خواهیم کرد:

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

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

console.log(sum(1, 2)); // 3 (اینجا همه چیز درست است) console.log(sum(1, "2")); // 12 (و ​​نه خیلی اینجا)

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

برای جلوگیری از چنین عوارضی می توانید در حین اجرای اسکریپت به نوع یک متغیر پی ببرید و رفتار آن را اصلاح کنید یا انواع متغیرها را با دقت زیر نظر بگیرید.

نوع اپراتور

این عملگر یکنواخت مطلقاً هر مقداری را به عنوان عملوند می گیرد و نوع آن را در یک متغیر رشته ای برمی گرداند.

جاوا اسکریپت دارای انواع داده های زیر است:

// 1.) کنسول شی log (نوع ( ) ) ; // شی var p = ( x: 1 , y: 3 ) ; کنسول log (نوع p) ; // شی // 2.) تابع تابع sayHello() ( console.log ("Hello!" ) ; ) console.log (نوع sayHello) ; // تابع // 3.) string console.log (نوع "جاوا اسکریپت" ) ; // رشته // 4.) number console.log (نوع 3.1415 ) ; // number // 5.) boolean console.log (نوع true ) ; // بولی // 6.) undefined var notExistsOne; console.log (نوع notExistsOne) ; // کنسول تعریف نشده log (نوع notExistsTwo) ; // تعریف نشده

// 1.) object console.log(typeof()); // شی var p = (x: 1، y: 3); console.log(typeofp); // شی // 2.) تابع sayHello() ( console.log("Hello!"); ) console.log(typeof sayHello); // تابع // 3.) string console.log(نوع "جاوا اسکریپت"); // string // 4.) number console.log(typeof 3.1415); // number // 5.) boolean console.log(typeof true); // بولی // 6.) undefined var notExistsOne; console.log(نوع notExistsOne); // undefined console.log(typeof notExistsTwo); // تعریف نشده

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

قالب

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

تبدیل رشته به عدد

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

var c = "not-a-number"; ++c; console.log (نوع c); // NaN

شایان ذکر است که به دلیل خوانایی ضعیف و واضح نبودن، نیازی به استفاده از این روش برای تبدیل رشته به عدد ندارید. توابع داخلی در js برای این کار وجود دارد. parseIntو parseFloat. آنها به عنوان اولین آرگومان خود رشته ای را برای تبدیل به عدد در نظر می گیرند و به عنوان آرگومان دوم اختیاری خود، پایه سیستم اعداد را که حاوی عدد در رشته ارسال شده است را به عنوان اولین آرگومان می گیرند. اگر آرگومان دوم مشخص نشده باشد، در نظر گرفته خواهد شد که رشته دارای یک عدد در سیستم اعداد اعشاری است.

عملکرد parseIntبرای تبدیل رشته به عدد صحیح و تابع استفاده می شود parseFloatبرای تبدیل به کسری

var a = parseInt("10"); کنسول. log ([ "a = " , a, "; typeof a:" , typeof a] .join (" " ) ); // a = 10 ; typeof a: عدد var pi = parseInt("3.1415" ); console.log("pi = " + pi) ; // pi = 3 pi = parseFloat("3.1415" ); console.log("pi = " + pi) ; // پی = 3.1415

var a = parseInt("10"); console.log(["a = ", a, "; typeof a:", typeof a].join(" ")); // a = 10 ; typeof a: عدد var pi = parseInt("3.1415"); console.log("pi =" + pi); // pi = 3 pi = parseFloat("3.1415"); console.log("pi =" + pi); // پی = 3.1415

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

a = parseInt("010"); console.log("a = " + a) ; // a = 8 a = parseInt("0xAA" ); console.log("a = " + a) ; // a = 170 a = parseFloat("1e-10" ); console.log("a = " + a) ; // a = 1e-10 (1e-10 = 1 * 10^-10 = 0.0000000001)

a = parseInt("010"); console.log("a =" + a); // a = 8 a = parseInt("0xAA"); console.log("a =" + a); // a = 170 a = parseFloat("1e-10"); console.log("a =" + a); // a = 1e-10 (1e-10 = 1 * 10^-10 = 0.0000000001)

به عنوان دومین پارامتر توابع parseIntو parseFloatمی توانید پایه سیستم اعداد را مشخص کنید.

a = parseInt("10" , 8 ); console.log("a = " + a) ; // a = 8 a = parseInt("010" , 10); console.log("a = " + a) ; // a = 10 a = parseInt("ff" , 16 ); console.log("a = " + a) ; // a = 255

a = parseInt("10"، 8); console.log("a =" + a); // a = 8 a = parseInt("010"، 10); console.log("a =" + a); // a = 10 a = parseInt("ff", 16); console.log("a =" + a); // a = 255

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

a = parseInt("عدد نیست") ; console.log("a = " + a) ; // a = NaN a = parseFloat("عدد نیست" ); console.log("a = " + a) ; // a = NaN

a = parseInt("عدد نیست"); console.log("a =" + a); // a = NaN a = parseFloat("عدد نیست"); console.log("a =" + a); // a = NaN

تبدیل رشته

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

var str = "شیء: " + ( ) ; ورود به سیستم کنسول (str) ; // Object: str = "Array: " + [ 1 , 2 , 3 ] ; ورود به سیستم کنسول (str) ; // آرایه: تابع 1،2،3 sum(a, b) ( return a + b; ) str = "Function: " + sum; ورود به سیستم کنسول (str) ; /* تابع: تابع مجموع (a, b) (بازگرداندن a + b; ) */

var str = "شیء: " + (); ورود به سیستم کنسول (str); // Object: str = "Array: " + ; ورود به سیستم کنسول (str); // آرایه: تابع 1،2،3 sum(a, b) ( return a + b; ) str = "Function: " + sum; ورود به سیستم کنسول (str); /* تابع: تابع مجموع (a, b) (بازگرداندن a + b; ) */

در واقع، هنگام ریختن یک شی به یک رشته، روش به طور ضمنی فراخوانی می شود toString، که می توان آن را به صراحت نیز نامید.

var p = ( x: 2 , y: 4 ) , str; str = p.toString(); ورود به سیستم (نوع خیابان) ; // string console.log (str) ; // str = [ 1 , 2 , 3 ] .toString (); ورود به سیستم (نوع خیابان) ; // string console.log (str) ; // 1،2،3

var p = (x: 2, y: 4), str; str = p.toString(); console.log(typeofstr); // string console.log(str); // str = .toString(); console.log(typeofstr); // string console.log(str); // 1،2،3

تبدیل عددی

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

var a = درست + درست + درست; // 1 + 1 + 1 console.log(a); // 3

یک آرایه، شی و تابع غیر خالی در صورت استفاده در عبارات حسابی به یک رشته ریخته می شود.

var arr = [ 1 , 2 , 3 ] ; console.log (arr + 4 ) ; // تابع 1,2,34 sum(a, b) ( a + b ; ) console. log (sum + 5 ) ; // تابع مجموع (a, b) (بازگشت a + b;) 5

var arr = ; console.log(arr + 4); // 1,2,34 تابع sum(a, b)(return a + b;) console.log(sum + 5); // تابع مجموع (a, b) (بازگشت a + b;) 5

همانطور که می بینید، تبدیل نوع ضمنی در js همیشه واضح نیست، بنابراین باید با استفاده از توابعی برای تبدیل نوع صریح، مانند parseInt, parseFloatو toString.

همین. مثل همیشه، برای شما موفق باشید!

دو روش اصلی برای تبدیل رشته به عدد در جاوا اسکریپت وجود دارد. یک راه این است که آن را تجزیه کنید و یک راه دیگر این است که نوع آن را به عدد تغییر دهید. تمام ترفندهای موجود در پاسخ‌های دیگر (مثلاً به علاوه یکپارچه) به اجبار ضمنی نوع رشته به عدد دلالت دارد. شما همچنین می توانید همین کار را با تابع Number انجام دهید.

نحوی

Var parsed = parseInt("97", 10);

ParseInt و parseFloat دو تابعی هستند که برای تجزیه رشته ها به اعداد استفاده می شوند. اگر به کاراکتری برخورد کند که نمی‌شناسد، تجزیه بی‌صدا متوقف می‌شود، که می‌تواند برای تجزیه رشته‌هایی مانند "92px" مفید باشد، اما تا حدودی خطرناک است زیرا در ورودی بد به شما خطایی نمی‌دهد، در عوض شما "برمی‌گردید". NaN اگر رشته با عدد شروع نشود. فضای ابتدای رشته نادیده گرفته می‌شود. در اینجا نمونه‌ای از کاری است که کار دیگری را انجام می‌دهد که شما می‌خواهید، و هیچ نشانه‌ای از اینکه کارها اشتباه بوده است را نشان نمی‌دهد:

Var widgetsSold = parseInt("97,800", 10); // widgetsSold اکنون 97 است

این تمرین خوب است که همیشه اعشار را به عنوان آرگومان دوم مشخص کنید. در مرورگرهای قدیمی‌تر، اگر رشته‌ای از 0 شروع می‌شد، به صورت هشت‌گانه تفسیر می‌شد، مگر اینکه مقدار ریشه‌ای مشخص شده باشد، که بسیاری از افراد را غافلگیر کرد. رفتار برای شروع هگزا اگر رشته با 0x شروع شود راه اندازی می شود مگر اینکه مقدار ریشه مشخص شده باشد. 0xff. استاندارد در واقع با ecmascript 5 تغییر کرد مرورگرهای مدرندر صورتی که هیچ دلیلی مشخص نشده باشد، دیگر اکتال ها را اجرا نکنید. parseInt رادیکال‌ها را تا پایه 36 درک می‌کند، در این صورت حروف بزرگ و کوچک به عنوان معادل تلقی می‌شوند.

نوع رشته را به عدد تغییر دهید

تمام ترفندهای دیگری که در بالا ذکر شد و از ParseInt استفاده نمی‌کنند، شامل وادار کردن یک رشته به یک عدد است. من ترجیح می دهم این کار را به صراحت انجام دهم

Var cast = Number("97");

این با روش های تجزیه متفاوت است (اگرچه هنوز فضاها را نادیده می گیرد). سخت‌تر است: اگر کل رشته را نفهمد، NaN را برمی‌گرداند، بنابراین نمی‌توانید از آن برای رشته‌هایی مانند 97 پیکسل استفاده کنید. از آنجایی که شما یک عدد اولیه می خواهید، نه یک شیء پوشش شماره، مطمئن شوید که قبل از تابع Number با new قرار ندهید.

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

Varrounded = Math.floor(Number("97.654")); // گزینه های دیگر Math.ceil، Math.round var fixed = Number("97.654").toFixed(0); // var bitwised به جای کوتاه شده = Number("97.654")|0; // برای اعداد بزرگ استفاده نکنید

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

~~"3000000000.654" === -1294967296 // این همان شماره است("30000000000.654")|0 "3000000000.654" >>> 0 === 30000000000. >>> 0 === 30000000000. >> 0 === 3647256576 // اما همچنان با اعداد بزرگتر شکست می خورد

برای کار صحیح با اعداد بزرگ باید از روش های گرد کردن استفاده کنید

Math.floor("3000000000.654") === 3000000000 // این همان Math.floor است(Number("30000000000.654"))

به خاطر داشته باشید که همه این روش ها نماد نمایی را درک می کنند، بنابراین 2e2 200 است، نه NaN. همچنین، Number "Infinity" را درک می کند، در حالی که روش های تجزیه این کار را نمی کنند.

سفارشی

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

همیشه بررسی کنید که خروجی عدد یا یکی از روش های تجزیه از نوع عدد مورد انتظار باشد. تقریباً مطمئناً می خواهید از isNaN استفاده کنید تا مطمئن شوید که عدد NaN نیست (معمولاً تنها راه برای دانستن اینکه آیا تجزیه شکست خورده است).

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

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

زرادخانه روش های تبدیل رشته ها به اعداد زیاد نیست، اما در همه موارد کافی است موارد ساده. در اینجا جاوا اسکریپت (به ویژه برای مبتدیان) راه از ساده به پیچیده با مثال های کاربردی است.

شما علاقه مند خواهید شد:

مثال چهار رشته مختلف را توصیف می کند. در بلوک خروجی اول، نوع هر کدام تابع متغیر typeof به عنوان رشته تعریف می شود. سپس هر رشته بسیار ساده به یک عدد تبدیل می شود. در بلوک خروجی دوم می توانید تغییرات متغیرها را بعد از تبدیل مشاهده کنید که نوع آنها به عدد تبدیل شده است. مثال تبدیل parseFloat جاوا اسکریپت به ویژه آشکار است: "12e+3" بود، اکنون "12000" است.

تغییرات هنگام تبدیل رشته به عدد می تواند قابل توجه باشد! اما فقط اولین کاراکترها مهم هستند: آنها باید عددی باشند. اگر هیچ کاراکتر عددی وجود نداشته باشد، نتیجه NaN خواهد بود.

تبدیل معکوس رشته ای که به عدد تبدیل می شود همیشه همان رشته نیست. از این لحظه می توان برای بررسی صحت وارد کردن اطلاعات عددی استفاده کرد.