1. نوع غير رقمي لقيمة رقمية
عند استخدام التحويل Number() :
عند استخدام parseInt() لتحويل:
var num1 = parseint ("10" ، 2) ؛ // 2 parse var num2 = parseint ("10" ، 8) ؛ // 8 parse var num3 = parseint ("10" ، 10) ؛ // 10 parse var num4 = parseint ("10" ، 16) ؛ // 16 تحليل سداسي عشري عند استخدام تحويل parseFloat() :
الفرق الأول بين Parsefloat و Parseint هو أنه يواجه حرفًا رقميًا غير صالح في نقطة عائمة عند تحليل السلسلة ، وهو أكثر بكثير من Parseint.
يعود 0 عند تحليل القيم السداسية
var num = parsefloat ("0xa") ؛ // 0var num = parseint ("0xa") ؛ // 10لا تحتوي وظيفة parsefloat على معلمة ثانية تحدد العلب ، لذلك يتم تحليل القيم العشرية فقط.
إذا كانت السلسلة عددًا صحيحًا ، فإنها تُرجع عددًا صحيحًا بدلاً من رقم نقطة عائم
var num = parseFloat("2.125e7"); //31250000
2. استخدم tostring () لإخراج قيم في أرقام مختلفة
ينطبق هذا الشريط على الأعداد الصحيحة ، يمكننا استخدام ToString () لإرجاع الأعداد الصحيحة في أي تنسيق ثنائي.
var num = 10 ؛ Alert (num.ToString ()) ؛ //"11salert(num.toString(9)) ؛ //"11"alert(num.toString(16)) ؛ // "أ"
3. انتبه إلى NAN و Infinity عند مشغلي بت
عند استخدام مشغلات البتات لـ NAN و Infinity ، يتم التعامل مع كلتا القيمتين على أنها 0. إذا تم تطبيق مشغل بت على قيمة غير رقمية ، يتم تحويل القيمة إلى قيمة رقمية باستخدام وظيفة الرقم ().
شيء آخر يجب ملاحظة أن التحول الصحيح غير الموقّع للأرقام السلبية ، والتحول الصحيح غير الموقّع هو ملء المساحة الفارغة مع 0 ، على عكس التحول الأيمن الموقّع مع بتات الإشارة ، وبالتالي فإن التحول الأيمن غير الموقّع والتحول الصحيح الموقّع للأرقام الإيجابية هو نفسه ، لكن الرقم السلبي مختلف. ستتعامل عملية التحول اليمنى غير الموقّع مع الكود الثنائي السلبي باعتباره الكود الثنائي الموجب ، ويتم تمثيل الرقم السلبي في النموذج المكملة ، مما سيؤدي إلى أن يكون نتيجة التحول الأيمن غير الموقّع مختلفًا تمامًا.
var oldvalue = -64 ؛ var newvalue = oldvalue >>> 5
4. العمليات العددية الخاصة
بالنسبة للعمليات العددية ، إذا كان هناك معامل نان ، فإن النتيجة هي NAN.
استخدم عملية إضافية أو عملية الطرح (+،-، زائد أو علامة سلبية) للقيم غير الرقمية. إذا كان لا يمكن تحويل القيمة إلى قيمة رقمية (تم تحويلها باستخدام طريقة الرقم ()) ، يتم إرجاع NAN.
var s1 = "01" ، s2 = "1.1" ، s3 = "z" ، b = false ، o = {valueof: function () {return -1 ؛}} ؛ s1 = +s1 ؛ // 1 + التغيير إلى -: -1S2 = + S2 ؛ //1.1 -1.1S3 = +S3 ؛ // nan nanb = +b ؛ // 0 0o = -o ؛ //-1 1إن ضرب اللانهاية و 0 يساوي NAN ، وضرب غير 0 هو اللانهائي والثنائي ، اعتمادًا على علامة المضاعف. مضاعفة اللانهاية والانهائي يساوي اللانهاية.
var num1 = Infinity ، num2 = 0 ، num3 = -2 ، num4 = -infinity ؛ Alert (num1 * num2) ؛ // nanalert (num1 * num3) ؛ //-Infinityalert (num1 * num4) ؛ //-اللانهاية
يتم تقسيم الصفر إلى صفر وهو نان ، وأرقام غير صفرية مقسومة على الصفر هي اللانهاية أو -infinity. إنفينيتي مقسومًا على اللانهاية باسم NAN
لعملية Modulo ، تعقد المعادلة التالية:
Infinity ٪ 2 = nan ؛ 2 ٪ -infinity = 2 ؛ 0 ٪ اللانهاية = 0 ؛ // طالما أن المقسوم هو 0 ، فإن المقسوم ليس نان ، والنتيجة هي 0infinity ٪ 0 = nan ؛ // يمكن أن يكون المقسوم أي رقم ، وطالما كان المقسوم 0 ، والنتيجة هي naninfinity ٪ Infinity = nan
عملية الإضافة: إذا كانت كلتا المعاملتين سلاسل ، فإن + يصبح سلسلة متسلسلة. إذا كان أحدهما عبارة عن سلسلة والآخر عبارة عن قيمة رقمية ، فقم بتحويل القيمة الرقمية إلى سلسلة ، ثم تسلس السلسلة. إذا كان المعامل كائنًا ، فستستدعي القيمة المنطقية أولاً طريقة القيمة الخاصة بهم. إذا لا شيء ، اتصل بالطريقة tostring. بعد ذلك ، بناءً على نوع قيمة الإرجاع ، حدد ما إذا كان يجب توصيل علامة + بالسلسلة أو إضافتها.
Infinity + -infinity = nan ؛ var p = {valueof: function () {return -1 ؛ }} ؛ var num = 1 ؛ var result = num +p ؛ Alert (result) ؛ // 0 أضف var p = {valueof: function () {return "not a num" ؛ }} ؛ var num = 1 ؛ var result = num +p ؛ Alert (result) ؛ // 1NOT A CURT سلسلة متسلسلةعملية الطرح: تشبه عملية الطرح تشغيل الإضافة إلى حد كبير ، ومعالجة الكائنات هي نفسها ، لذلك لن أشرح ذلك بعد الآن.
Infinity - Infinity = nan ؛ -infinity - -infinity = nan ؛
5. استخدام المشغلين العلائقيين
المشغلون العلائقيين أقل من (<) ، أكبر من (>) ، أقل من أو يساوي (<=) وأكبر من أو يساوي (> =)
طالما كانت هناك قيمة واحدة ، سيتم إجراء المقارنة العددية ، والآخر ليس قيمة رقمية ، وسيتم تحويله إلى قيمة عددية. استخدم Valueof أولاً للكائن ، ثم استخدم tostring. في الواقع ، بغض النظر عن العملية التي يؤديها الكائن ، هذا صحيح. إذا كان هناك قيمة ، يتم استخدام ValueOF لإرجاع القيمة ، وإلا يتم استخدام tostring لإرجاع القيمة.
كلاهما سلاسل ، ثم قارن قيمة تشفير الأحرف للسلسلة (قيمة ASCII)
فيما يتعلق بالذات الأولى ، تجدر الإشارة إلى أنه عندما تكون السلسلة قيمة رقمية ، عندما لا يمكن تحويل السلسلة إلى قيمة رقمية ، فإن الموقف التالي سيحدث كـ NAN.
var result = "a" <3 ؛ // false a يتحول a إلى nanvar نتيجة = "a"> = 3 ؛ // خطأ أي رقم مقارنة بالنان هو خطأ
6. == و ===
في JavaScript ، إذا كان لجانبي المعادلة لهما أنواع مختلفة ، أو يتم تضمين كائن واحد فقط ، فسيتم تقسيم المقارنة إلى حالتين ، وتتم مقارنة المقارنة بعد التحول مباشرة مع عدم وجود تحول. == هو تحويل أولاً والمقارنة ، === هو المقارنة مباشرة دون التحويل. بالنسبة إلى === ، فإنه يعود خطأ طالما أن الأنواع ليست متساوية. لـ == ، يتم تقسيمها إلى المواقف التالية:
سيتم تحويل TRUE إلى 1 ، وسيتم تحويل FALSE إلى 0.
مقارنة السلاسل بالقيم الرقمية ، يتم تحويل السلاسل إلى قيم رقمية.
إذا كان هناك كائن واحد فقط على جانبي المعادلة ، فسيقوم هذا الكائن بالاتصال بالقيمة للحصول على النوع الأساسي ، مثل استدعاء طريقة toString بدون طريقة ValueOF. إذا كان كلا الجانبين كائنات ، فلن يتم إجراء أي تحول.
var p = {"name": "a"} ؛ var q = {"name": "a"} var o = p ؛ ALERT (q == p) ؛ // خطأ تختلف عناوين الكائنات التي يشير إليها P و Q ، على الرغم من أن محتوى الكائن هو نفس التنبيه (O == P) ؛ //حقيقيفيما يلي المقارنات الخاصة
null == undefined // truenan! = nan // truenan == nan // false "nan" == nan // falseundefined == 0 // falsenull == 0 // false
7
لا يمكن التنبؤ بترتيب إخراج البيانات إلى المتصفح.
عندما لا يكون المتغير الذي يجب التكراره فارغًا أو غير محدد ، فلن يتم إلقاء الخطأ بموجب ECMASCRIPT 5 ، ولكن لن يتم تنفيذ جسم الحلقة. إذا كنت تريد توافقًا إلى الأمام ، فسوف تحكم على أنه ليس فارغًا أو غير محدد قبل الحلقة.
8. بيان SWETHC
يمكن التبديل استخدام أي نوع بيانات.
يمكن أن تكون قيمة الحالة ثابتة ومتغيرًا وتعبيرًا.
يستخدم عبارة التبديل مشغل المقارنة المتطابقة (===) عند مقارنة القيم.
var num = 25 ؛ switch (true) {case num <0: alert ("less 0") ؛ استراحة؛ case num> = 0: ALERT ("أكثر من 0") ؛ استراحة؛ الافتراضي: تنبيه ("خطأ") ؛}9 استخدام الوظيفة
إذا لم يكن هناك بيان إرجاع في الوظيفة أو الإرجاع ، فلا يوجد أي قيمة إرجاع ، فستتم إرجاع الوظيفة غير المحددة.
تعريف الوظيفة لا يتسق مع معلمات الوظيفة عند تسميتها. وبعبارة أخرى ، فإن المعلمتين (المعلمات الرسمية والمعلمات الفعلية) ليس لهما اتصال. المتغيرات المقدمة عند تحديد وظيفة هي أكثر ملاءمة للاستخدام. حتى لو لم يتم تعريفها ، يمكن الحصول على المعلمات التي تم تمريرها إلى الوظيفة (من خلال الحجج []).
وظيفة howmanyargs () {Alert (edation.length) ؛} Howmanyargs ("a") ؛ // 1Howmanyargs ("A" ، "B") ؛ // 2Howmanyargs () ؛ // 0العلاقة بين المعلمات الرسمية والوسائط [] هي كما يلي ، مع الاهتمام بالفرق بين الوضع الصارم والوضع غير الشامل.
وظيفة howmanyargs (ss) {الوسيطات [0] = "اختبار" ؛ الوسيطات [1] = "Test2" تنبيه (الوسائط [0]) ؛ // تنبيه اختبار (الحجج [1]) ؛ // Test2 Alert (SS) ؛ // test} howmanyargs ("a") ؛ وظيفة howmanyargs (ss) {"استخدم الوسيطات الصارمة" [0] = "test" ؛ الوسائط [1] = "Test2" ALERT (الوسيطات [0]) ؛ // testalert (الحجج [1]) ؛ // test2alert (SS) ؛ // a} howmanyargs ("a") ؛10. استخدام معلمات الوظيفة
عند تحديد وظيفة ما ، سنكتب المعلمات المستخدمة في أقواس الوظيفة ، ولكن سيكون غير مرن بدرجة كافية عندما تكون هناك معلمات اختيارية متعددة. في هذا الوقت ، يمكننا استخدام الكائنات لتغليف معلمات اختيارية متعددة.
دالة displayInfo (args) {var output = "" ؛ if (typeof args.name == "string") {output + = "name:" + args.name + "/n" ؛ } if (typeof args.age == "number") {output + = "Age:" args.age + "/n" ؛ } تنبيه (الإخراج) ؛ } DisplayInfo ({name: "Nicholas" ، العمر: 29}) ؛ DisplayInfo ({name: "Greg"}) ؛