جافا سكريبت كيفية عمل رقم من سلسلة. كيف يقوم جافا سكريبت بتحويل سلسلة إلى رقم؟ فرز التحويل

JavaScript هي لغة مكتوبة ديناميكيًا. هذا يعني أنه يمكن كتابة قيم من أنواع مختلفة إلى نفس المتغير ، بينما سيتغير نوع المتغير نفسه. يسمح لك هذا السلوك غالبًا بنسيان السلوك المختلف للمتغيرات ذات الأنواع المختلفة ، ولكن لا يزال من الضروري تذكر هذه الميزة. دعونا نظهر هذا بالمثال التالي.

console.log (مجموع (1 ، 2)) ؛ // 3 (كل شيء على ما يرام هنا) console.log (sum (1، "2"))؛ // 12 (ليست جيدة جدًا هنا)

كما ترى من المثال ، الوظيفة مجموعيتصرف بشكل غير صحيح إذا لم يتم تمرير رقم كواحد على الأقل من وسيطاته. والحقيقة هي أنه عند "إضافة" رقم إلى سلسلة ، يتم تحويل الرقم إلى سلسلة ويتم ربطه (يتم إلصاقه) بالمعامل الثاني.

لتجنب مثل هذه التعقيدات ، يمكنك معرفة نوع المتغير أثناء تنفيذ البرنامج النصي وتعديل سلوكه ، أو مراقبة أنواع المتغيرات بعناية.

نوع العامل

يأخذ هذا العامل الأحادي أي قيمة على الإطلاق كمعامل ويعيد نوعه في متغير سلسلة.

توجد أنواع البيانات التالية في JavaScript:

// 1.) object console.log (typeof ()) ؛ // الكائن var p = (x: 1 ، y: 3) ؛ console.log (typeof p) ؛ // object // 2.) الوظيفة sayHello () (console.log ("Hello!") ؛) console.log (typeof sayHello) ؛ // function // 3.) string console.log (typeof "JavaScript") ؛ // سلسلة // 4.) number console.log (typeof 3.1415) ؛ // رقم // 5.) boolean console.log (typeof true) ؛ // boolean // 6.) undefined var notExistsOne ؛ console.log (typeof notExistsOne) ؛ // undefined console.log (typeof notExistsTwo) ؛ // غير معرف

// 1.) object console.log (typeof ()) ؛ // الكائن var p = (x: 1 ، y: 3) ؛ console.log (typeof p) ؛ // object // 2.) الوظيفة sayHello () (console.log ("Hello!") ؛) console.log (typeof sayHello) ؛ // function // 3.) string console.log (typeof "JavaScript") ؛ // سلسلة // 4.) number console.log (typeof 3.1415) ؛ // رقم // 5.) boolean console.log (typeof true) ؛ // boolean // 6.) undefined var notExistsOne ؛ console.log (typeof notExistsOne) ؛ // undefined console.log (typeof notExistsTwo) ؛ // غير معرف

لاحظ أن غير معرفإنه أيضًا نوع بيانات يتكون من قيمة واحدة.

يقذف

في البرمجة ، يُفهم التلبيس على أنه تحويل قيمة متغير من نوع إلى قيمة من نوع آخر.
غالبًا ما يحدث هذا التحويل دون سيطرة المبرمج. يمكن رؤية هذا في المثال مع الوظيفة مجموع... يحدث تغيير النوع عندما تكون نتيجة العملية على متغير من النوع الأصلي غير واضحة. على سبيل المثال ، لا يمكنك الجزم بما سينتج من إضافة سلسلة إلى رقم ، ولكن عملية إضافة رقمين واضحة ، وفي هذه الحالة يكون من المنطقي تحويل الرقم إلى سلسلة.

تحويل سلسلة إلى رقم

في بعض الأحيان يمكن للمبرمج نفسه تغيير نوع المتغير من خلال تطبيق عمليات معينة عليه. على سبيل المثال ، تؤدي زيادة سلسلة أو إنقاصها إلى تحويلها إلى رقم.

var c = "not-a-number" ؛ ++ ج ؛ console.log (typeof c) ؛ // NaN

من الجدير بالذكر أنه ليست هناك حاجة للجوء إلى هذه الطريقة لتحويل سلسلة إلى رقم بسبب ضعف قراءتها وعدم وضوحها. توجد وظائف مضمنة لهذه المهمة في js التحليل اللغويو تحليل عائم... كأول وسيط ، يأخذون سلسلة ليتم تحويلها إلى رقم ، وكالمعامل الثاني اختياري - أساس نظام الأرقام ، حيث يتم كتابة الرقم في السلسلة التي تم تمريرها كأول وسيطة. إذا لم يتم تحديد الوسيطة الثانية ، فسيتم اعتبار أن السلسلة تحتوي على رقم عشري.

وظيفة التحليل اللغويتستخدم لتحويل سلسلة إلى عدد صحيح ، والدالة تحليل عائملتحويلها إلى كسور.

var a = parseInt ("10") ؛ console.log (["a ="، a، "؛ typeof a:"، typeof a] .join (""))؛ // أ = 10 ؛ typeof a: number var pi = parseInt ("3.1415") ؛ console.log ("pi =" + pi) ؛ // pi = 3 pi = parseFloat ("3.1415") ؛ console.log ("pi =" + pi) ؛ // pi = 3.1415

var a = parseInt ("10") ؛ console.log (["a ="، a، "؛ typeof a:"، typeof a] .join (""))؛ // أ = 10 ؛ typeof a: number var pi = parseInt ("3.1415") ؛ console.log ("pi =" + pi) ؛ // pi = 3 pi = parseFloat ("3.1415") ؛ console.log ("pi =" + pi) ؛ // pi = 3.1415

لاحظ أن السلسلة يمكن أن تحتوي على أي قيمة عددية حرفية ، بما في ذلك السداسي العشري أو الثماني أو الأسي.

أ = 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) ؛ // أ = 1e-10 (1e-10 = 1 * 10 ^ -10 = 0.0000000001)

أ = 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) ؛ // أ = 1e-10 (1e-10 = 1 * 10 ^ -10 = 0.0000000001)

كمعامل ثاني للوظائف التحليل اللغويو تحليل عائميمكنك تحديد الجذر.

أ = 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) ؛ // أ = 255

أ = 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) ؛ // أ = 255

إذا كانت القيمة في السلسلة التي تعمل التحليل اللغويو تحليل عائمتعتبر المعلمة الأولى ، ليست حرفية رقمية ، ثم ستكون نتيجة هذه الوظائف هي القيمة ن.

أ = parseInt ("ليس رقمًا") ؛ console.log ("a =" + a) ؛ // a = NaN a = parseFloat ("ليس رقمًا") ؛ console.log ("a =" + a) ؛ // أ = NaN

أ = parseInt ("ليس رقمًا") ؛ console.log ("a =" + a) ؛ // a = NaN a = parseFloat ("ليس رقمًا") ؛ console.log ("a =" + a) ؛ // أ = NaN

سلسلة التحويل

في JavaScript ، يمكن تحويل قيمة من أي نوع إلى سلسلة نصية. سبق أن قيل أعلاه أنه عند ربط سلسلة برقم ، يتم تحويل الرقم إلى سلسلة ، وعندها فقط يحدث التسلسل. سيحدث هذا بقيمة من أي نوع.

var str = "Object:" + () ؛ console.log (str) ؛ // الكائن: str = "Array:" + [1، 2، 3] ؛ console.log (str) ؛ // صفيف: مجموع الدالة 1،2،3 (أ ، ب) (إرجاع أ + ب ؛) str = "الوظيفة:" + sum ؛ console.log (str) ؛ / * الوظيفة: مجموع الوظيفة (أ ، ب) (إرجاع أ + ب ؛) * /

var str = "Object:" + () ؛ console.log (str) ؛ // الكائن: str = "Array:" + ؛ console.log (str) ؛ // Array: 1،2،3 مجموع الدالة (أ ، ب) (إرجاع أ + ب ؛) str = "Function:" + sum ؛ console.log (str) ؛ / * الوظيفة: مجموع الوظيفة (أ ، ب) (إرجاع أ + ب ؛) * /

في الواقع ، عند تحويل كائن إلى سلسلة نصية ، يتم استدعاء الطريقة ضمنيًا إلى سلسلةوالتي يمكن استدعاؤها صراحةً أيضًا.

var p = (x: 2 ، y: 4) ، str ؛ str = p.toString () ، console.log (typeof str) ؛ // سلسلة console.log (str) ؛ // str = [1، 2، 3] .toString () ؛ console.log (typeof str) ؛ // سلسلة console.log (str) ؛ // 1،2،3

var p = (x: 2 ، y: 4) ، str ؛ str = p.toString () ، console.log (typeof str) ؛ // سلسلة console.log (str) ؛ // str = .toString () ؛ console.log (typeof str) ؛ // سلسلة console.log (str) ؛ // 1،2،3

التحويل الرقمي

يحدث التحويل إلى رقم عند إجراء عمليات حسابية وعند إجراء عملية مقارنة مع تحويل النوع (== ،! =) ، بينما القيمة خاطئةويتم تحويل المصفوفة الفارغة إلى قيمة من النوع 0 عدد.

var a = true + true + true ؛ // 1 + 1 + 1 console.log (أ) ؛ // 3

يتم تحويل مصفوفة وكائن ووظيفة غير فارغة إلى سلسلة عند استخدامها في التعبيرات الحسابية.

var arr = [1، 2، 3] ؛ console.log (arr + 4) ؛ // 1،2،34 دالة مجموع (أ ، ب) (إرجاع أ + ب ؛) console.log (مجموع + 5) ؛ // دالة مجموع (أ ، ب) (إرجاع أ + ب ؛) 5

var arr = ؛ console.log (arr + 4) ؛ // 1،2،34 دالة مجموع (أ ، ب) (إرجاع أ + ب ؛) console.log (مجموع + 5) ؛ // دالة مجموع (أ ، ب) (إرجاع أ + ب ؛) 5

كما ترى ، فإن تحويل النوع الضمني في js بعيد كل البعد عن الوضوح دائمًا ، لذلك يجب عليك تجنبه باستخدام وظائف لتحويل النوع الصريح ، مثل التحليل اللغوي, تحليل عائمو إلى سلسلة.

هذا كل شئ. كالعادة ، حظ موفق لك!

آخر تحديث: 1.11.2015

غالبًا ما يكون من الضروري تحويل بيانات إلى أخرى. على سبيل المثال:

Var number1 = "46" ؛ var number2 = "4" ؛ نتيجة var = number1 + number2 ؛ console.log (نتيجة) ؛ // 464

كلا المتغيرين يمثلان سلاسل ، أو بالأحرى تمثيلات سلسلة للأرقام. وفي النهاية ، لم نحصل على الرقم 50 ، بل على السلسلة 464. ولكن سيكون من الجيد أن يتم جمعها وطرحها بشكل عام ، كما هو الحال مع الأرقام العادية.

في هذه الحالة ، يمكننا استخدام عمليات التحويل. لتحويل سلسلة إلى رقم ، استخدم الدالة parseInt ():

Var number1 = "46" ؛ var number2 = "4" ؛ var نتيجة = parseInt (number1) + parseInt (number2) ؛ console.log (نتيجة) ؛ // 50

لتحويل السلاسل إلى أعداد كسرية ، استخدم الدالة parseFloat ():

Var number1 = "46.07" ؛ var number2 = "4.98" ؛ var نتيجة = parseFloat (number1) + parseFloat (number2) ؛ console.log (نتيجة) ؛ //51.05

في هذه الحالة ، يمكن أن تحتوي السلسلة على محتوى مختلط ، على سبيل المثال ، "123hello" ، أي في هذه الحالة توجد أرقام ، ولكن هناك أيضًا أحرف عادية. لكن طريقة parseInt () ستظل تحاول إجراء التحويل:

Var num1 = "123hello" ؛ var num2 = parseInt (num1) ؛ console.log (العدد 2) ؛ // 123

إذا فشلت الطريقة في التحويل ، فإنها تُرجع NaN (ليس رقمًا) ، مما يشير إلى أن السلسلة لا تمثل رقمًا ولا يمكن تحويلها.

مع وظيفة خاصة isNaN ()يمكنك التحقق مما إذا كانت السلسلة تمثل رقمًا. إذا لم تكن السلسلة رقمًا ، فإن الدالة ترجع صوابًا ، إذا كان هذا الرقم خاطئًا:

Var num1 = "جافا سكريبت" ؛ var num2 = "22" ؛ نتيجة var = isNaN (num1) ؛ console.log (نتيجة) ؛ // صحيح - num1 ليس نتيجة رقمية = isNaN (num2) ؛ console.log (نتيجة) ؛ // خطأ - num2 رقم

أعلاه ، نظرنا في تحويل السلاسل إلى أرقام في النظام العشري. ومع ذلك ، يمكننا ترجمة الأرقام إلى أي نظام. بشكل افتراضي ، يخمن مفسر JavaScript نفسه نظام الأرقام الذي نريد تحويل السلسلة إليه (كقاعدة عامة ، يتم اختيار النظام العشري). لكن يمكننا استخدام المعامل الثاني للإشارة صراحة إلى أننا نريد تحويل سلسلة إلى رقم في نظام معين. على سبيل المثال ، التحويل إلى رقم ثنائي:

Var num1 = "110" ؛ var num2 = parseInt (num1، 2) ؛ console.log (العدد 2) ؛ // 6

النتيجة هي 6 ، لأن 110 في النظام الثنائي هي 6 في النظام العشري.

لنكتب الآن برنامجًا صغيرًا نستخدم فيه العمليات ذات المتغيرات:

جافا سكريبت

باستخدام الوظيفة () ، يعرض المستعرض مربع حوار يطالبك بإدخال بعض القيمة. تشير الوسيطة الثانية لهذه الوظيفة إلى القيمة الافتراضية.

ومع ذلك ، تقوم الدالة () بإرجاع سلسلة. لذلك ، نحتاج إلى تحويل هذه السلسلة إلى رقم لإجراء العمليات معها.

بعد فتح الصفحة في المتصفح ، سنرى دعوة لإدخال مبلغ الإيداع:

سيتم بعد ذلك عرض رسالة مماثلة لإدخال النسبة المئوية. وفي النهاية ، سيتلقى البرنامج البيانات ، ويحولها إلى أرقام ، ويقوم بإجراء العد.

ال parseInt ()تقوم دالة بتوزيع وسيطة سلسلة وترجع عددًا صحيحًا من الجذر المحدد (الأساس في أنظمة الأرقام الرياضية).

يتم تخزين مصدر هذا المثال التفاعلي في مستودع GitHub. إذا كنت ترغب في المساهمة في مشروع الأمثلة التفاعلية ، فيرجى استنساخ https://github.com/mdn/interactive-examples وإرسال طلب سحب إلينا.

بناء الجملة

parseInt (سلسلة ، جذر)

العوامل

سلسلة القيمة المطلوب تحليلها. إذا لم تكن هذه الوسيطة سلسلة ، فسيتم تحويلها إلى واحدة باستخدام عملية ToString abstract. يتم تجاهل المسافة البيضاء البادئة في هذه الحجة. Radix Optional عدد صحيح بين 2 و 36 يمثل الجذر (الأساس في أنظمة الأرقام الرياضية) للسلسلة. كن حذرا - هذا هو الحال ليس الافتراضي إلى 10! يشرح بمزيد من التفصيل ما يحدث عندما لا يتم توفير الجذر.

قيمة الإرجاع

عدد صحيح تحليل من السلسلة المحددة.

إذا كان الجذر أصغر من 11 ، ولا يمكن تحويل أول حرف غير مسافة بيضاء إلى رقم ، يتم إرجاع NaN.

وصف

تحوّل الدالة parseInt الوسيطة الأولى إلى سلسلة ، وتوزع هذه السلسلة ، ثم تُرجع عددًا صحيحًا أو NaN.

إذا لم يكن NaN ، فستكون القيمة المعادة هي العدد الصحيح الذي يمثل الوسيطة الأولى المأخوذة كرقم في الجذر المحدد. (على سبيل المثال ، يتم تحويل جذر مكون من 10 من رقم عشري ، و 8 تحويل من رقم ثماني ، و 16 من رقم سداسي عشري ، وما إلى ذلك.)

بالنسبة إلى الإشعاع فوق 10 ، تشير أحرف الأبجدية الإنجليزية إلى أرقام أكبر من 9. على سبيل المثال ، بالنسبة للأرقام السداسية العشرية (الأساس 16) ، يتم استخدام A إلى F.

إذا واجه parseInt حرفًا ليس رقمًا في الجذر المحدد ، فإنه يتجاهله وجميع الأحرف التالية ويعيد قيمة العدد الصحيح التي تم تحليلها حتى تلك النقطة. يقوم parseInt باقتطاع الأرقام إلى قيم صحيحة. مسموح بالمسافات البادئة والزائدة.

لأن بعض الأرقام تستخدم الحرف e في تمثيل السلسلة (على سبيل المثال 6.022e23لـ 6.022 × 10 23) ، سيؤدي استخدام parseInt لاقتطاع الأرقام إلى نتائج غير متوقعة عند استخدامها على أعداد كبيرة جدًا أو صغيرة جدًا. ينبغي تحليل المعلومات ليستستخدم كبديل لـ Math.floor ().

يفهم parseInt علامتين بالضبط: + للإيجابي ، و- للسلبية (منذ ECMAScript 1). يتم إجراؤه كخطوة أولية في التحليل بعد إزالة المسافة البيضاء. إذا لم يتم العثور على علامات ، تنتقل الخوارزمية إلى الخطوة التالية ؛ وإلا فإنه يزيل العلامة ويقوم بتشغيل تحليل الأرقام على بقية السلسلة.

إذا كان الجذر غير محدد أو 0 أو غير محدد ، فإن JavaScript يفترض ما يلي:

  1. إذا بدأت سلسلة الإدخال بـ "0x" أو "0X" (صفر ، متبوعًا بحرف صغير أو حرف كبير X) ، يفترض أن يكون الجذر هو 16 ويتم تحليل بقية السلسلة كرقم سداسي عشري.
  2. إذا بدأت سلسلة الإدخال بـ "0" (صفر) ، يفترض أن يكون الجذر 8 (ثماني) أو 10 (عشري). بالضبط أي أساس يتم اختياره يعتمد على التنفيذ. يوضح ECMAScript 5 أن 10 (عشري) يجبيمكن استخدامها ، ولكن ليست كل المتصفحات تدعم هذا بعد. لهذا السبب، حدد دائمًا أساسًا عند استخدام parseInt.
  3. إذا بدأت سلسلة الإدخال بأي قيمة أخرى ، يكون الجذر هو 10 (عشري).

إذا كان الحرف الأول لا يمكن تحويله إلى رقم ، فإن parseInt تُرجع NaN ما لم يكن الجذر أكبر من 10.

لأغراض حسابية ، فإن قيمة NaN ليست رقمًا في أي جذر. يمكنك استدعاء دالة isNaN لتحديد ما إذا كانت نتيجة parseInt هي NaN. إذا تم تمرير NaN إلى العمليات الحسابية ، فستكون نتيجة العملية أيضًا NaN.

لتحويل رقم إلى سلسلته الحرفية في أصل معين ، استخدم thatNumber .toString (الجذر).

أمثلة

باستخدام parseInt

جميع الأمثلة التالية تعود بـ 15:

ParseInt ("0xF"، 16) parseInt ("F"، 16) parseInt ("17"، 8) parseInt (021، 8) parseInt ("015"، 10) // لكن `parseInt (015، 10)` سوف إرجاع 13 parseInt (15.99، 10) parseInt ("15.123"، 10) parseInt ("FXX123"، 16) parseInt ("1111"، 2) parseInt ("15 * 3"، 10) parseInt ("15e2"، 10) parseInt ("15px"، 10) parseInt ("12"، 13)

جميع الأمثلة التالية تعيد NaN:

ParseInt ("Hello"، 8) // ليس رقمًا على الإطلاق parseInt ("546"، 2) // الأرقام غير 0 أو 1 غير صالحة للجذر الثنائي

جميع الأمثلة التالية تعود -15:

ParseInt ("- F"، 16) parseInt ("- 0F"، 16) parseInt ("- 0XF"، 16) parseInt (-15.1، 10) parseInt ("- 17"، 8) parseInt ("- 15"، 10) parseInt ("- 1111"، 2) parseInt ("- 15e1"، 10) parseInt ("- 12"، 13)

جميع الأمثلة التالية تعود 4:

ParseInt (4.7، 10) parseInt (4.7 * 1e22، 10) // عدد كبير جدًا يصبح 4 بارسيينت (0.00000000000434، 10) // عدد صغير جدًا يصبح 4

يُرجع المثال التالي 224:

ParseInt ("0e0"، 16) parseInt ("123_456") // 123

تفسيرات ثماني بدون أساس

على الرغم من عدم تشجيع ECMAScript 3 وتم منعه بواسطة ECMAScript 5 ، فإن العديد من التطبيقات تفسر سلسلة رقمية تبدأ بـ 0 بادئة على أنها ثماني. قد يكون لما يلي نتيجة ثماني ، أو قد يكون له نتيجة عشرية. حدد دائمًا أساسًا لتجنب هذا السلوك غير الموثوق به.

ParseInt ("0e0") // 0 parseInt ("08") // 0 ، لأن "8" ليس رقمًا ثمانيًا.

يزيل ECMAScript 5 التفسير الثماني

لم تعد مواصفات ECMAScript 5 للوظيفة parseInt تسمح لعمليات التنفيذ بمعالجة السلاسل التي تبدأ بحرف 0 كقيم ثماني. تنص ECMAScript 5 على ما يلي:

تُنتج الدالة parseInt قيمة عدد صحيح يُمليها تفسير محتويات وسيطة السلسلة وفقًا للجذر المحدد. يتم تجاهل المسافة البيضاء البادئة في السلسلة. إذا كان الجذر غير معرّف أو 0 ، فمن المفترض أن يكون 10 إلا عندما يبدأ الرقم بأزواج المحارف 0x أو 0X ، وفي هذه الحالة يُفترض أن أصل 16.

هذا يختلف عن ECMAScript 3 ، الذي لم يشجع لكنه سمح بالتفسير الثماني.

لم تعتمد العديد من عمليات التنفيذ هذا السلوك اعتبارًا من عام 2013 ، ولأن المتصفحات الأقدم يجب أن تكون مدعومة ، حدد دائمًا أساسًا.

وظيفة تحليل أكثر صرامة

من المفيد أحيانًا أن يكون لديك طريقة أكثر صرامة لتحليل الأعداد الصحيحة.

يمكن أن تساعد التعبيرات العادية في:

دالة filterInt (القيمة) (if (/ ^ [- +]؟ (\ d + | Infinity) $ /. test (القيمة)) (إرجاع الرقم (القيمة)) else (إرجاع NaN)) console.log (filterInt ("421 ")) // 421 console.log (filterInt (" - 421 ")) // -421 console.log (filterInt (" + 421 ")) // 421 console.log (filterInt (" Infinity ")) // Infinity console.log (filterInt ("421e + 0")) // NaN console.log (filterInt ("421hop")) // NaN console.log (filterInt ("hop1.61803398875")) // NaN console.log (filterInt ("1.61803398875")) // NaN

تحديد

تخصيص حالة تعليق
الإصدار الأول من ECMAScript (ECMA-262) اساسي التعريف الأولي.
ECMAScript 5.1 (ECMA-262)
اساسي
ECMAScript 2015 (الإصدار السادس ، ECMA-262)
تعريف "parseInt" في تلك المواصفات.
اساسي
أحدث مسودة ECMAScript (ECMA-262)
تعريف "parseInt" في تلك المواصفات.
مشروع

التوافق المتصفح

يتم إنشاء جدول التوافق في هذه الصفحة من البيانات المنظمة. إذا كنت ترغب في المساهمة في البيانات ، يرجى مراجعة https://github.com/mdn/browser-compat-data وإرسال طلب سحب إلينا.

تحديث بيانات التوافق على جيثب

سطح المكتبمتحركالخادم
كرومحافةثعلب النارمتصفح الانترنتأوبراسفاريعرض ويب AndroidChrome لنظام AndroidFirefox لنظام AndroidOpera لنظام AndroidSafari على iOSسامسونج إنترنتNode.js
التحليل اللغويدعم Chrome الكامل 1دعم الحافة الكاملة 12دعم Firefox الكامل 1دعم IE الكامل 3دعم Opera الكامل نعمدعم Safari الكامل نعمدعم WebView Android الكامل 1دعم Chrome Android الكامل 18دعم Firefox Android الكامل 4دعم Safari iOS الكامل نعمدعم Samsung Internet Android الكامل 1.0nodejs الدعم الكامل نعم
التحليلات الصفرية البادئة هي سلاسل عشرية وليست ثمانيدعم كروم الكامل 23دعم الحافة الكاملة 1221- دعم Firefox الكاملدعم IE الكامل 9دعم Opera الكامل نعمدعم Safari الكامل 6دعم WebView Android الكامل 4.4.2دعم Chrome Android الكامل 25دعم Firefox Android الكامل 21دعم Opera Android الكامل نعمدعم Safari iOS الكامل 6دعم Samsung Internet Android الكامل نعمnodejs الدعم الكامل نعم

يحتوي JavaScript على وظيفتين مدمجتين لتحويل السلاسل إلى أرقام: parseFloat () و parseInt ().

تأخذ parseFloat () كوسيطة سلسلة يتم تحويلها إلى نوع رقمي وتعيد عددًا عشريًا. يجب أن يكون الرقم في بداية السطر. إذا كان هناك أي أحرف أخرى بعد الرقم في السلسلة ، فسيتم اقتطاعها. يجب كتابة الجزء الكسري من الرقم مفصولاً بنقطة (لا يُنظر إلى الفاصلة على أنها فاصل). إذا تعذر على parseFloat () تحويل السلسلة ، فإنها ترجع NaN.

أيضًا ، يمكن للوظيفة معالجة "الرقم n مضروبًا في 10 إلى أس x" ، والذي يتم كتابته عادةً في البرمجة من خلال الحرف E ، على سبيل المثال: 0.5E6 أو 0.5E + 6. يمكن أن تكون الدرجة سالبة أيضًا: 0.5E-6 ، والتي تساوي 0.5 * 10 ^ -6 أو 0.5 / 1،000،000.

ParseFloat ("" 3.78kg "") // 3.78 parseFloat ("" kg33 "") // NaN parseFloat ("" 0004.111 "") // 4.111 parseFloat ("" 0x66 "") // 0 parseFloat ("". 5 "") // 0.5 parseFloat ("" -. 5 "") // -0.5 parseFloat ("" 0.5e6 "") // 500000 parseFloat ("" 0.03E + 2 "") // 3 parseFloat (" "3E-4" ") // 0.0003 parseFloat (" "- 3E-4" ") // -0.0003

تأخذ الدالة parseInt (سلسلة [، جذر]) سلسلة أحرف كأول وسيطة لها ، وتوزعها وتعيد عددًا صحيحًا (نوع عدد صحيح). تحاول الوظيفة تحليل نظام الأرقام حيث يتم كتابة الرقم في السلسلة المصدر (على سبيل المثال ، عشري أو ثماني أو سداسي عشري ، ولكن ليس هذه فقط). أيضًا ، يمكن تحديد نظام الأرقام بشكل صريح عن طريق تمريره على أنه أساس المعلمة الثانية. يمكن أن تأخذ معلمة الجذر أي رقم بين 2 و 36 (الأنظمة فوق 10 تستخدم الأبجدية الإنجليزية ، من A إلى Z).

لا تتعامل الوظيفة مع أرقام مثل 1.5e6 بنفس طريقة معالجة parseFloat ().

يرجى قراءة الأمثلة أدناه ، حتى لا تتعثر في المزالق المخبأة في دالة parseInt ().

ParseInt ("" 25 "") // 25 parseInt ("" - 25 "") // -25 parseInt ("" 45.12 "") // 45 parseInt ("" 045 "" ، 10) // 45 parseInt ( "70" ، 8) // 56 (70 في ثماني هي 56 في النظام العشري) parseInt ("070" ") // 56 (هام !!! سوف يتسبب الصفر الأول في قيام الدالة بتحليل السلسلة كرقم ثماني ) parseInt ("" 88 ""، 8) // NaN (لا يوجد 8 في النظام الثماني) parseInt ("" a1 "") // NaN (هام !!! لا تعامل الوظيفة الرقم على أنه ست عشري افتراضي إذا لم تقم بإضافته في سطور البداية 0x) parseInt ("a1" ، 16) // 161 (تم تحديد نظام الأرقام هنا بوضوح) parseInt ("" 0xa1 "") // 161 (تنسيق سداسي عشري صحيح ، يمكنك حذف المعلمة الثانية) parseInt ("" 099 "") // 0 (هام !!! الرقم يتم تفسيره على أنه ثماني ، لكنه يحتوي على أحرف غير صالحة) parseInt ("" 0.5e6 "") // 0 (هام !!! لا يعمل كـ parseFloat) parseInt ("" ZZ ""، 36) // 1295 parseInt ("" - FF "") // NaN parseInt ("" - FF ""، 16) // -255

إذا كنت تقوم بمعالجة البيانات من حقل نصي يدخله المستخدم ، فاستخدم دائمًا parseInt () مع معلمة الجذر الثاني ، فهذا سيبقي الكود الخاص بك في مأمن من النتائج غير المتوقعة.

لا فرق بين نوع المتغير المستخدم في التعبير. إذا كان التعبير رياضيًا ، فسيتم تلقائيًا تفسير جميع متغيراته على أنها رقمية. إذا تمت معالجة السلاسل ، فسيتم التعامل مع جميع "المشاركين" في التعبير كسلاسل. ومع ذلك ، فإن مشكلة تحويل سلسلة إلى رقم جافا سكريبت موجودة في سياق أوسع بكثير.

طرق JavaScript لتحويل السلاسل إلى أرقام

ترسانة طرق تحويل السلاسل إلى أرقام ليست كبيرة ، ولكنها كافية لجميع الحالات البسيطة. هنا JavaScript (خاصة للمبتدئين) هو مسار من البسيط إلى المعقد مع أمثلة عملية.

يصف المثال أربعة أسطر مختلفة. في أول كتلة من الخرج ، نوع كل متغير ، يتم تعريف الدالة typeof على أنها سلسلة. ثم يتم تحويل كل سطر إلى رقم بسهولة بالغة. في الكتلة الثانية من الإخراج ، يمكنك رؤية التغييرات في المتغيرات بعد التحويل ، وأصبح نوعها رقمًا. يظهر مثال تحويل JavaScript parseFloat بشكل خاص: كان "12e + 3" ، والآن "12000".

التغييرات عند تحويل سلسلة إلى رقم يمكن أن تكون مهمة! لكن الأحرف الأولى فقط هي المهمة: يجب أن تكون رقمية. في حالة عدم وجود أحرف رقمية ، تكون النتيجة NaN.

التحويل العكسي للسلسلة التي "أصبحت" رقمًا لا يكون دائمًا نفس السلسلة. يمكن استخدام هذه اللحظة للتحقق من صحة إدخال المعلومات الرقمية.

طرق التحويل التقليدية

هناك أعداد صحيحة وهناك كسور ، على التوالي ، يحول JavaScript سلسلة إلى رقم عن طريق:

  • تحليل.
  • تحليل عائم.

يتم تنفيذ الحالة العامة باستخدام سلسلة في تعبير رياضي بسيط.

يكفي وضع علامة "+" أمام سلسلة الرموز ، وإذا كانت تحتوي على رقم ، فستكون نتيجة التعبير رقمًا. يمكن أن تتغير قيمة المتغير ، لكن النوع سيتغير دائمًا: سيعرض typeof الرقم وليس السلسلة. من المهم أن نفهم أن استخدام متغير محوّل في تعبير سلسلة يمكن أن يؤدي إلى نتائج مختلفة للغاية.

JavaScript للمبتدئين في هذا السياق بسيط للغاية. من الصعب فهم عمل تحويل الأعداد الصحيحة باستخدام طريقة pasrseInt ، لأنها تعمل تلقائيًا في التدوين العشري ، ولكن يمكنها تفسير سلسلة على أنها ثماني أو سداسي عشري. علاوة على ذلك ، لا يعتمد هذا الظرف دائمًا على المعلمة الثانية ، والتي تشير إلى نظام الأرقام.

ستقوم JavaScript دائمًا بتحويل سلسلة إلى رقم ، ولكن إذا لم تحتوي السلسلة على حرف رقمي واحد في بداية السلسلة ، فستكون النتيجة NaN.

من الضروري أن يكون لديك فكرة عن أنظمة الأرقام ، حول كيفية كتابة رقم سداسي عشري (يبدأ الرقم بـ "0x") والأرقام الثمانية (يبدأ الرقم بـ "0").

لفهم الفروق الدقيقة في طريقة JavaScript parseFloat ، يكفي أن يكون لديك فكرة عن ماهية التدوين الرياضي للرقم الحقيقي.

فرز التحويل

JavaScript هي لغة متصفح ، لأنها أكثر من اللغات الأخرى تنتقد الأحرف خارج المجموعة الرئيسية للأبجدية والأرقام اللاتينية. الفرز عملية مطلوبة. ولكن ليس من المنطقي دائمًا إرسال البيانات إلى الخادم لأغراض الفرز ؛ فمن الأسهل والأكثر عملية القيام بالعمل على الفور ، في المتصفح.

لحل هذه المشكلة ، يمكنك تحويل الأحرف في سلسلة إلى رموزها الرقمية ، أو تخصيص أحرف وأرقام لتسلسل أرقام مرتب. تقوم طريقة charCodeAt () المطبقة على السلسلة بتعيين القيمة الرقمية 98 إلى متغير iB ، أي رمز الحرف "b". بالنظر إلى أن قيمة رمز الحرف "a" تساوي 97 ، يمكنك الحصول على أرقام جميع أحرف الأبجدية اللاتينية بترتيب تصاعدي من خلال مجموعات الأحرف الصغيرة والكبيرة. وبالمثل بالنسبة لأحرف الأبجدية الروسية.

يتيح لك المتغير الخاص بالفرز من خلال الأرقام تكوين مجموعات الأحرف المطلوبة. يمكنك ، على سبيل المثال ، "إعادة ترتيب" الأبجدية السيريلية واللاتينية أو مزجها لترك الأحرف الممتازة في الكتابة فقط ، وإضافة حروف الجدولة والمسافات إلى المجموعات.

تشكيل عدد فريد من السلسلة

إذا كان رمز الحرف "a" هو 97 ، فإن الفرق بين الحرف والرقم 97 سيعطي الرقم الفريد للحرف في الأبجدية. من خلال جمع الأرقام الفريدة لكل حرف في سلسلة ، من الصعب الحصول على الرقم الفريد لتلك السلسلة.

إذا تم تعيين وزن لكل موضع لحرف في سلسلة ، على سبيل المثال ، الموضع:

  • 0 الوزن 1؛
  • 1 الوزن 10 ؛
  • 2 وزن 100 ؛

ثم بضرب الرقم الفريد لكل حرف في السلسلة بوزن الموضع الذي يوجد فيه ، وتجميع جميع الأرقام ، يمكنك الحصول على رقم فريد واستخدامه كمطابقة رأس برأس مع الأصل سلسلة.

يمكن عكس هذا التحويل للسلسلة إلى رقم ، أي أنه يمكنك دائمًا الحصول على السلسلة الأصلية من خلال الرقم. يعتبر هذا التحويل مفيدًا ، لأنه يمكن إجراء أي عملية برقم بأمان في سياق الترميز ، والسيريلية والميزات المحلية الأخرى لصفحة الموقع ، والنطاق ، وبلد الزائر.

محددات صفحة الموقع "المتزايدة"

غالبًا ما تنشأ مشكلة إنشاء محددات على صفحات الموقع ، والتي لا يمكن تحديد قيمها مسبقًا ، ولكن مع مرور الوقت يتم استكمالها. في التطبيق الأول ، يتوفر محدد فارغ لأول زائر لإدخال المعلومات.

يتم تحويل كل إدخال جديد لسطر المعلومات في المحدد (بواسطة أي زائر) إلى رقم ، والذي يتم إرساله مع الأصل إلى الخادم للتخزين. عند بدء جلسة جديدة أو وصول زائر جديد ، لم يعد المحدد فارغًا. الصفحة عند تحميلها تأتي إلى المتصفح بمحدد غير فارغ.

لكل قيمة جديدة للمحدد ، يتم إرسالها إلى الخادم للتخزين مرة واحدة فقط ، وبمجرد تعيين رمز رقمي فريد لها فقط.

لا يمكنك استخدام طريقة JavaScript من سلسلة إلى رقم لحل هذه المشكلة. الطرق المعتادة parseInt و parseFloat لها استخدامات مختلفة ، ولكن يمكنك التفكير في خوارزمية لتحويل سلسلة إلى رقم بشكل لا لبس فيه ، وليس بالضرورة عكسها. يكفي أن خوارزمية التحويل لن تتكرر على مجموعات حروف مختلفة في السلسلة.

تحسين حركة المرور والتحليلات

عند تكوين صفحة ، يستخدم المطور قدرًا كبيرًا من المعلومات. يُعد السماح للزائر بإدخال المعلومات طريقة جيدة لتقليل ترتيب الموقع نظرًا لضعف وظائفه وإحباط الزائر.

من خلال تعيين معالج حدث لإجراءات الزائر في شكل دالة JavaScript لكتل ​​معينة من المعلومات ، يمكنك صياغة عامل تصفية يسمح للزائر بتحديد هدف بدقة ، والعثور على المعلومات الضرورية ، والحصول على الحل المطلوب.

يمكن أن يكون تحويل معلومات السلسلة هنا متسعًا بشكل تعسفي في جزء السلسلة وصغير جدًا في جزء الرقم. بمعنى آخر ، يقوم المطور بتحويل سلسلة JavaScript إلى رقم وفقًا للخوارزمية الخاصة به. يعالج الزائر المعلومات المفهومة ، ويتم إرسال الحد الأدنى من البيانات إلى الخادم - رقم.

تسمح ديناميكيات مجموعة من الأرقام لجميع الزوار في سياق المعلومات المعروفة بدقة بوظيفة JavaScript أخرى (وليس معالجًا) ، والتي تتطلب استجابة الخادم عبر آلية AJAX ، لتزويد جميع الزوار على الفور بالمعلومات الضرورية في وقت واحد في الوقت الفعلي . هذه هي الطريقة التي يعمل بها النظام.

هذا الخيار لتحويل سلسلة JavaScript إلى رقم مطلوب بشدة في تطوير الألعاب عبر الإنترنت والمؤتمرات التفاعلية والمراسلة الفورية وما إلى ذلك.

التطبيق الآلي للتحولات

تسمح لك JavaScript و CSS في سياق معالجة المعلومات الرقمية بالتحكم في عرض الصفحة دون مشاركة الخادم. يتم إنشاء قواعد CSS كسلاسل فرعية بشكل متكرر. عادةً ما تكون المعلمة رقمًا متبوعًا بعدة أحرف (على سبيل المثال ، "px" ، "pt" ، "em" ، ...). المعلمة هي سلسلة فرعية في القاعدة ، والقاعدة هي سلسلة فرعية في نمط فئة أو معرف.

العودية في JavaScript.Substring.Substring ... ينتقل إلى الرقم المطلوب ويتحول من سلسلة إلى رقم ويعدله ويعيد الكتابة إلى المكان المطلوب. يتم تغيير القاعدة تلقائيًا. إنه بسيط ومريح ، ولا يوجد تدخل من الخادم.