يمكن اعتبار JavaScript نفسها لغة بسيطة ، لكننا نحسنها باستمرار مع الحكمة والأنماط المرنة. قمنا بالأمس بتطبيق هذه الأنماط على إطار عمل JavaScript ، واليوم تقود هذه الأطر تطبيقات الويب الخاصة بنا مرة أخرى. ينجذب العديد من المطورين المبتدئين من خلال مختلف أطر عمل JavaScript ، لكنهم يتجاهلون مهارات JavaScript العملية التي تتميز بالاسترداد وراء الإطار. ستمنحك هذه المقالة مقدمة شاملة لنقاط المعرفة.
1. تشغيل أعداد صحيحة JS
استخدم | 0 و ~~ لتحويل نقطة عائمة إلى أعداد صحيحة وهي أسرع من الحاجز المماثل والرياضيات. هذه هي مقارنة الأداء.
var foo = (12.4 / 4.13) | 0 ؛ // النتيجة هي شريط 3VAR = ~~ (12.4/4.13) ؛ // النتيجة هي 3
خدعة صغيرة أخرى! ! 2 علامات تعجب ، يمكنك التحدث عن قيمة وتحويلها بسرعة إلى قيمة منطقية. يمكنك اختباره!
var eeee = "eee" ؛ ALERT (!! eee)
العائد صحيح ، مما يعني أن أي قيمة تسبقها! ! كل شيء يمكن أن يكون مساويا لصالح. ما لم تكن هذه القيمة في الأصل قيمة منطقية ، أو غير محددة ، خالية ، 0 ، خطأ ، نان ، "، لأن غير محدد ، لاغية ، 0 ، خطأ ، نان ،" المذكورة ، هذه هي في الأصل خاطئة ، لذلك تتم إضافة اثنين! ! بعد ذلك ، لا يزال fasle.
2. أعد كتابة التنبيه الأصلي وتسجيل عدد الصناديق المنبثقة
(function () {var oldalert = window.alert ، count = 0 ؛ window.alert = function (a) {count ++ ؛ oldalert (a + "/n قمت بتسمية Alert" + count + "مرات الآن. توقف ، إنه شرير!) ؛} ؛}) () ؛ التنبيه (" Hello haorooms ") ؛3. طرق التبادل الرقمي لا تعلن عن المتغيرات الوسيطة
عند تبادل رقمين ، فإن نهجنا العام هو إعلان متغير وسيط ، لكن نهج اليوم غريب إلى حد ما. لا تحتاج إلى إعلان متغير وسيط ومعرفة كيف يتم تنفيذه!
var a = 1 ، b = 2 ؛ a = [b ، b = a] [0] ؛ console.log ('a:'+a+'، b:'+b) ؛ // الإخراج A: 2 ، B: 1ماذا عن ذلك ، هل هذه الطريقة لها شعور جديد؟
4. كل شيء هو كائن
في عالم JavaScript ، كل شيء هو كائن. بالإضافة إلى الفارغ وغير المحددة ، فإن أنواع الأرقام والسلاسل والملاءات الأخرى لها كائنات غلاف مقابلة. تتمثل إحدى ميزات كائن في أنه يمكنك استدعاء الأساليب مباشرة عليها.
بالنسبة للأنواع الأساسية الرقمية ، سيفشل عند محاولة استدعاء طريقة tostring عليها ، لكنها لن تفشل بعد إرفاقها بين قوسين ثم يتم استدعاؤها. يتمثل التنفيذ الداخلي في تحويل النوع الأساسي إلى كائن مع كائن Wrapper المقابل. لذلك (1) .ToString () يعادل الرقم الجديد (1) .ToString (). لذلك ، يمكنك بالفعل استخدام الأنواع الأساسية من الأرقام والسلاسل والملاءات ، وما إلى ذلك. ككائنات ، فقط انتبه إلى بناء الجملة لتكون مناسبة.
في الوقت نفسه ، لاحظنا أن الأرقام في JavaScript لا تنقسم إلى نقطة عائمة وتشكيل. جميع الأرقام هي في الواقع أنواع النقاط العائمة ، فقط حذف النقطة العشرية. على سبيل المثال ، يمكن كتابة 1 التي تراها على أنها 1. ولهذا السبب يتم الإبلاغ عن خطأ عند محاولة 1. tostring () ، وبالتالي فإن الطريقة الصحيحة للكتابة يجب أن تكون مثل هذا: 1..ToString () ، أو إضافة قوسين كما هو مذكور أعلاه. الغرض من الأقواس هنا هو تصحيح محلل JS ، ولا يعتبر النقطة بعد 1 نقطة عشرية. التنفيذ الداخلي كما هو مذكور أعلاه ، تحويل 1. إلى كائن به كائن غلاف ثم استدعاء الطريقة.
5. تشوه إذا كان البيان
عندما تحتاج إلى كتابة عبارة if ، جرب طريقة أخرى أسهل ، باستخدام العوامل المنطقية في JavaScript بدلاً من ذلك.
var day = (تاريخ جديد) .getday () === 0 ؛ // بيان if If If (day) {Alert ('اليوم هو الأحد!') ؛على سبيل المثال ، يحصل الرمز أعلاه أولاً على تاريخ اليوم ، إذا كان يوم الأحد ، نافذة منبثقة ، وإلا فلن يتم القيام بأي شيء. نحن نعلم أن هناك ماسورة قصيرة في العمليات المنطقية. بالنسبة للمنطق والتعبيرات ، فقط إذا كان كلاهما صحيحًا ، يمكن أن تكون النتيجة صحيحة. إذا تم الحكم على متغير اليوم السابق ليكون خطأ ، فإن النتيجة خاطئة للتعبير بأكمله ، وبالتالي لن يستمر التنبيه اللاحق. إذا كان اليوم السابق صحيحًا ، فيجب استمرار الكود اللاحق في تنفيذ الكود التالي لتحديد صحة التعبير بأكمله. باستخدام هذه النقطة ، فإن تأثير إذا تم تحقيقه.
بالنسبة للبيانات التقليدية ، إذا تجاوز رمز هيئة التنفيذ عبارة واحدة ، تكون الأقواس المجعدة مطلوبة ، واستخدام تعبيرات الفاصلة ، يمكن تنفيذ أي شريط من الكود دون تقويم مجعد.
إذا (conditoin) تنبيه (1) ، التنبيه (2) ، console.log (3) ؛
6. استخدم === ، وليس ==
سيقوم مشغل == (أو! =) بإجراء تحويل النوع تلقائيًا عند الحاجة. عملية === (أو! ==) لا تؤدي أي تحويل. سيقارن القيم والأنواع ، ويعتبر أيضًا أفضل من == من حيث السرعة.
[10] === 10 // خاطئ [10] == 10 // هو true'10 '== 10 // هو true'10' == 10 // هو خطأ [] == 0 //
7. استخدم الإغلاق لتنفيذ المتغيرات الخاصة
وظيفة الشخص (الاسم ، العمر) {this.getName = function () {return name ؛ } ؛ this.setName = function (newName) {name = newName ؛ } ؛ this.getage = function () {return Age ؛ } ؛ this.setage = function (newAge) {Age = newAge ؛ } ؛ // سمات لم تتم تهيئتها في مهنة Varistor. this.getOccupation = function () {return issice ؛ } ؛ this.setOccupation = function (newocc) {agressation = newOCC ؛ } ؛}8. إنشاء مُنشئ كائن
PONGITY PERSON (FirstName ، lastName) {this.firstName = firstName ؛ this.lastname = lastName ؛} var saad = شخص جديد ("Saad" ، "mousliki") ؛9. كن حذرًا لاستخدام typeof و extailof و prognructor
var arr = ["A" ، "B" ، "C"] ؛ typeof arr ؛ // return "object" arr extryof array // truearr.constructor () ؛ // []
10. إنشاء وظيفة معالجة الذات
غالبًا ما يسمى هذا وظيفة مجهولة المصدر ذاتيا أو تعبير وظيفة المكالمة الفورية. هذه وظيفة يتم تنفيذها تلقائيًا مباشرة بعد الإنشاء ، وعادة ما يلي:
(function () {// بعض التعليمات البرمجية الخاصة التي سيتم تنفيذها تلقائيًا})11. احصل على عنصر عشوائي من الصفيف
VAR heads = [12 ، 548 ، 'a' ، 2 ، 5478 ، 'foo' ، 8852 ، 'doe' ، 2145 ، 119] ؛ var randomitem = heads [math.floor (math.random () * items.length)] ؛
12. احصل على رقم عشوائي ضمن نطاق محدد
يعد هذا المقتطف مفيدًا جدًا عندما تريد إنشاء بيانات الاختبار ، مثل قيمة الراتب العشوائي بين الحد الأدنى والحد الأقصى للقيم.
var x = math.floor (math.random () * (max - min + 1)) + min ؛
13. قم بإنشاء مجموعة من الأرقام بين 0 و Set Maximum Value
var numberarray = [] ، max = 100 ؛ for (var i = 1 ؛ numberArray.push (i ++) <max ؛) ؛ // الأرقام = [0،1،2،3 ... 100]
14. إنشاء رقم عشوائي الأبجدية
وظيفة generaterandomalphanum (len) {var rdmstring = "" ؛ لـ (؛ rdmstring.length <len ؛ rdmstring += math.random (). toString (36) .Substr (2)) ؛ return rdmsstring.substr (0 ، len) ؛} // استدعاء الطريقة generaterandomalphanum (15) ؛خمسة عشر. تدافع مجموعة من الأرقام
var numbers = [5 ، 458 ، 120 ، -215 ، 228 ، 400 ، 122205 ، -85411] ؛ الأرقام = الأرقام.
16. وظيفة تقليم السلسلة
string.prototype.trim = function () {return this.replace (/^/s+|/s+$/g ، "") ؛} ؛17. إلحاق (إلحاق) صفيف إلى صفيف آخر
var array1 = [12 ، "foo" ، {name: "Joe"} ، -2458] ؛ var array2 = ["doe" ، 555 ، 100] ؛ array.prototype.push.apply (Array1 ، Array2) ؛18. تحويل الحجج الكائن إلى صفيف
var argarray = array.prototype.slice.call (وسيطات) ؛ [ملاحظة المترجم: كائن الوسائط هو كائن صفيف للفئة ، ولكن ليس صفيفًا حقيقيًا]
19. تحقق مما إذا كانت المعلمات أرقام (رقم)
وظيفة isNumber (n) {return! isnan (parsefloat (n)) && isfinite (n) ؛}20. تحقق مما إذا كانت المعلمات صفائف
دالة isarray (obj) {return object.prototype.toString.call (obj) === '[كائن صفيف]' ؛}ملاحظة: إذا تم تجاوز طريقة ToString () ، فلن تحصل على النتيجة المطلوبة باستخدام هذه التقنية. أو يمكنك استخدام:
Array.Isarray (OBJ) ؛ // هذه طريقة صفيف جديدة
إذا كنت لا تستخدم إطارات متعددة ، فيمكنك أيضًا استخدام طريقة المثيل. ولكن إذا كان لديك سياقات متعددة ، فستحصل على النتيجة الخاطئة.
var myframe = document.createElement ('iframe') ؛ document.body.appendChild (myframe) ؛ var myarray = window.frames [window.length-1] .array ؛ var arr = new myarray (a ، b ، 10) ؛ // [A ، B ، 10] // لم يعمل مثيل MyArray بشكل صحيح ، يفقد Myarray مُنشئه// مُنشئه لم يتم مشاركته بين مثيل FramesArr ؛ // خطأ شنيع[ملاحظة المترجم: هناك العديد من المناقشات حول كيفية الحكم على المصفوفات على الإنترنت ، يمكنك Google. هذا المقال مكتوب بالتفصيل. 】
21. احصل على الحد الأقصى أو الحد الأدنى للقيمة في مجموعة من الأرقام
VAR NUMBERS = [5 ، 458 ، 120 ، -215 ، 228 ، 400 ، 122205 ، -85411] ؛
var maxinnumbers = math.max.apply (الرياضيات ، الأرقام) ؛
var mininnumbers = math.min.apply (الرياضيات ، الأرقام) ؛
[ملاحظة المترجم: فيما يلي مهارة لتمرير المعلمات باستخدام method.prototype.apply.
22. مسح صفيف
var myarray = [12 ، 222 ، 1000] ؛ myarray.length = 0 ؛ // سوف يكون Myarray مساوياً لـ [].
23. لا تستخدم حذف العناصر في صفيف.
استخدم لصق بدلاً من الحذف لحذف عنصر في الصفيف. باستخدام DELETE ، يستبدل فقط العنصر الأصلي مع غير محدد ، ولا يحذفه حقًا من الصفيف.
لا تستخدم هذه الطريقة:
var heads = [12 ، 548 ، 'a' ، 2 ، 5478 ، 'foo' ، 8852 ، 'doe' ، 2154 ، 119] ؛ items.length ؛ // إرجاع 11 ديليت عناصر [3] ؛ // return trueitems.length ؛ // إرجاع 11/ * العناصر ستكون مساوية لـ [12 ، 548 ، "A" ، غير محدد × 1 ، 5478 ، "فو" ، 8852 ، غير محدد × 1 ، "Doe" ، 2154 ، 119] *///
والاستخدام:
var heads = [12 ، 548 ، 'a' ، 2 ، 5478 ، 'foo' ، 8852 ، 'doe' ، 2154 ، 119] ؛ items.length ؛ // return 11items.splice (3،1) ؛ items.length ؛ // إرجاع 10/ * العناصر ستكون مساوية لـ [12 ، 548 ، "A" ، 5478 ، "Foo" ، 8852 ، غير محدد × 1 ، "Doe" ، 2154 ، 119] *///
يجب استخدام طريقة الحذف لحذف خاصية الكائن.
24. استخدم الطول لاقتطاع صفيف
على غرار طريقة مسح الصفيف أعلاه ، نستخدم سمة الطول لاقتطاع صفيف.
var myarray = [12 ، 222 ، 1000 ، 124 ، 98 ، 10] ؛ myarray.length = 4 ؛ // سيكون Myarray مساوياً لـ [12 ، 222 ، 1000 ، 124].
بالإضافة إلى ذلك ، إذا قمت بتعيين طول الصفيف على قيمة أكبر من القيمة الحالية ، فسيتم تغيير طول الصفيف وسيتم إضافة عنصر جديد غير محدد لملئه. طول الصفيف ليس خاصية للقراءة فقط.
myarray.length = 10 ؛ // طول الصفيف الجديد هو 10myarray [myarray.length - 1] ؛ // غير محدد
25. استخدم أحكامًا منطقية و/أو لإصدار أحكام مشروطة
نفس (خمسة) ، إذا كان بيان التشوه!
var foo = 10 ؛ foo == 10 && dosomething () ؛ // يعادل IF (foo == 10) dosomething () ؛ foo == 5 || dosomething () ؛ // يعادل إذا (foo! = 5) dosomething () ؛
منطقي ويمكن استخدامه أيضًا لتعيين القيم الافتراضية لمعلمات الوظيفة
وظيفة dosomething (Arg1) {arg1 = arg1 || 10 ؛ // إذا لم يتم تعيين Arg1 ، فسيتم تعيين Arg1 على 10 افتراضيًا}26. استخدم طريقة الخريطة () لاجتياز العناصر في صفيف
var squares = [1،2،3،4] .map (function (val) {return val * val ؛}) ؛ // ستكون المربعات مساوية لـ [1 ، 4 ، 9 ، 16]27. جولة رقمًا واحتفظ بالأماكن العشرية
var num = 2.443242342 ؛ num = num.tofixed (4) ؛ // num سوف تساوي 2.4432
28. مشكلة رقم النقطة العائمة
0.1 + 0.2 === 0.3 // IS false9007199254740992 + 1 // يساوي 90071992547409929007199254740992 + 2 // يساوي 90071992547409944
لماذا هذا يحدث؟ 0.1+0.2 يساوي 0.300000000000000000000. يجب أن تعلم أن جميع أرقام JavaScript هي أرقام نقطة عائمة داخليًا معبراً عنها في ثنائي 64 بت ، تتوافق مع معيار IEEE 754. لمزيد من المعلومات ، يمكنك قراءة منشور المدونة هذا. يمكنك استخدام طرق Tofixed () و TopRecision () لحل هذه المشكلة.
29. عند استخدام من أجل اجتياز الخصائص الداخلية لكائن ما ، يرجى التحقق من الخصائص.
يمكن لمقتطف الكود التالي تجنب الوصول إلى خصائص النموذج الأولي عند اجتياز خاصية كائن.
لـ (اسم var in Object) {if (object.hasownproperty (name)) {// افعل شيئًا بالاسم}}ثلاثون ، مشغل فاصلة
var a = 0 ؛ var b = (a ++ ، 99) ؛ console.log (a) ؛ // سوف تكون مساوية لـ 1console.log (B) ؛ // B يساوي 99
31. متغيرات ذاكرة التخزين المؤقت التي يجب حسابها والاستعلام عنها (الحساب أو الاستعلام)
بالنسبة لمحددات jQuery ، من الأفضل أن نقوم بتخزين عناصر DOM هذه.
var navright = document.queryselector ('#right') ؛ var navleft = document.queryselector ('#left') ؛ var navup = document.queryselector ('#up') ؛ var navdown = document.queryselector ('#down') ؛ var navdown = document.queryselector (#down ') ؛32. تحقق من المعلمات قبل استدعاء isfinite ()
isfinite (0/0) ؛ // falseisfinite ("foo") ؛ // falseisfinite ("10") ؛ // truefinite (10) ؛ // truefinite (غير محصور) ؛ // falseisfinite () ؛ // falseisfinite (NULL) ؛ // حقيقي !!!33. تجنب الفهارس السلبية في المصفوفات
var numberarray = [1،2،3،4،5] ؛ var from = numberArray.indexof ("foo") ؛ // من يساوي -1numbersarray.splice (من ، 2) ؛ // سيعود [5]تأكد من أن المعلمات عند استدعاء IndexOF ليست سلبية.
34. التسلسل والخروج على أساس JSON
var person = {name: 'saad' ، العمر: 26 ، القسم: {id: 15 ، الاسم: "r & d"}} ؛ var stringfromperson = json.stringify (person) ؛/ * stringfromperson يساوي "{" name ":" Saad "،" Age ": 26 ،" Department ": {" id ": json.parse (stringfromerson) ؛/ * personfromString يساوي كائن الشخص */35. تجنب استخدام eval () ومصمم الوظائف
يعد استخدام مُنشئات Eval و Function مكلفًا للغاية لأنه في كل مرة يتصلون فيها بمحرك البرنامج النصي لتحويل الرمز المصدر إلى رمز قابل للتنفيذ.
var func1 = دالة جديدة (dunctionCode) ؛ var func2 = eval (functionCode) ؛
36. تجنب استخدام ()
باستخدام () سيقوم بإدراج متغير عالمي. لذلك ، سيتم كتابة المتغيرات التي تحمل نفس الاسم وتتسبب في مشكلة غير ضرورية.
37. تجنب استخدام من أجل اجتياز صفيف
تجنب استخدام هذه الطريقة:
var sum = 0 ؛ for (var i in arraynumbers) {sum += arraynumbers [i] ؛}طريقة أفضل هي:
var sum = 0 ؛ for (var i = 0 ، len = arraynumbers.length ؛ i <len ؛ i ++) {sum+= arraynumbers [i] ؛}الفائدة الإضافية هي أن قيم كل من متغيرات I و LEN يتم تنفيذها مرة واحدة فقط ، والتي ستكون أكثر كفاءة من الطريقة التالية:
لـ (var i = 0 ؛ i <arraynumbers.length ؛ i ++)
لماذا؟ لأن ArrayNumbers.length يتم حسابها في كل مرة يتم فيها حلقة الحلقة.
38. تمرير الوظيفة بدلاً من سلسلة عند استدعاء setTimeOut () و setInterval ().
إذا قمت بتمرير سلسلة إلى setTimeOut () أو setInterval () ، فسيتم تحليل السلسلة كما لو كانت تستخدم مع eval ، والتي تستغرق وقتًا طويلاً للغاية.
لا تستخدم:
setInterval ('dosomethingperiodally ()' ، 1000) ؛ setTimeout ('dosomethingAfterFiveSeconds ()' ، 5000)والاستخدام:
setInterval (dosomethingperiodicaly ، 1000) ؛ setTimeout (dosomethingAfterFiveSeconds ، 5000) ؛
39. استخدم عبارات التبديل/الحالة بدلاً من قائمة طويلة من إذا/آخر
عند الحكم على أن الموقف أكبر من 2 ، يكون استخدام التبديل/الحالة أكثر كفاءة وأكثر أناقة (أسهل في تنظيم الكود). ولكن لا تستخدم التبديل/الحالة عندما يكون هناك أكثر من 10 أحكام.
40. استخدم التبديل/الحالة عند الحكم على النطاق العددي
في الموقف التالي ، من المعقول استخدام التبديل/الحالة لتحديد النطاق العددي:
وظيفة getCategory (العمر) {var category = "" ؛ Switch (true) {case isnan (age): category = "not a age" ؛ استراحة؛ الحالة (العمر> = 50): الفئة = "القديم" ؛ استراحة؛ الحالة (العمر <= 20): الفئة = "الطفل" ؛ استراحة؛ الافتراضي: الفئة = "يونغ" ؛ استراحة؛ } ؛ فئة الإرجاع ؛} getCategory (5) ؛ // سيعود "حبيبي"[ملاحظة المترجم: بشكل عام ، إذا كان/آخر سيكون أكثر ملاءمة للحكم على النطاق العددي. التبديل/الحالة أكثر ملاءمة لحكم تحديد القيمة]
41. حدد كائن النموذج الأولي للكائن الذي تم إنشاؤه
من الممكن كتابة وظيفة لإنشاء كائن يحدد المعلمات كنموذج أولي:
دالة استنساخ (كائن) {function oneshotconstructor () {} ؛ oneshotconstructor.prototype = كائن ؛ إرجاع oneshotconstructor () ؛} استنساخ جديد. // []42. وظيفة الهروب HTML
دالة expresshtml (text) {var replacements = {"<": "<" ، ">": ">" ، "&": "&" ، "/": "" "} ؛ إرجاع text.replace (/[<> & "]/g ، الدالة (حرف) {return replacements [character] ؛}) ؛}43. تجنب استخدام المحاولة-داخل الحلقة
في وقت التشغيل ، في كل مرة يتم فيها تنفيذ شرط catch ، سيتم تعيين كائن الاستثناء الذي تم التقاطه إلى متغير ، وفي بنية المحاولة-سيتم إنشاء هذا المتغير في كل مرة.
تجنب الكتابة بهذه الطريقة:
var object = ['foo' ، 'bar'] ، i ؛ for (i = 0 ، len = object.length ؛ i <len ؛ i ++) {try {// افعل شيئًا يلقي استثناءً} catch (e) {// handle}}}والاستخدام:
var object = ['foo' ، 'bar'] ، i ؛ حاول {for (i = 0 ، len = object.length ؛ i <len ؛ i ++) {// افعل شيئًا يلقي استثناءً}} catch (e) {// handle}}44. تعيين مهلة لـ XMLHTTPREQUESTS.
بعد أن يستغرق طلب XHR وقتًا طويلاً (على سبيل المثال ، بسبب مشاكل الشبكة) ، قد تحتاج إلى إحباط الطلب ، حتى تتمكن من استخدام SetTimeOut () لمكالمة XHR.
var xhr = new xmlhttprequest () ؛ xhr.onReadyStateChange = function () {if (this.readyState == 4) {cleartimeout (timeout) ؛ // افعل شيئًا مع بيانات الاستجابة}} var timeout = setTimeOut (function () {xhr.abort () ؛ // call error callback} ، 60*1000/*timeout بعد دقيقة*/) ؛ xhr.open ('get' ، url ، true) ؛ xhr.send () ؛بالإضافة إلى ذلك ، يجب أن تتجنب بشكل عام طلبات AJAX متزامنة تمامًا.
خمسة وأربعون. التعامل مع مهلة WebSocket
عادةً ، بعد إنشاء اتصال WebSocket ، إذا لم تكن نشطًا ، فسيقوم الخادم بفصل (Time Out) اتصالك بعد 30 ثانية. سيتم فصل جدار الحماية أيضًا بعد فترة من عدم النشاط.
لمنع مشكلات المهلة ، قد تحتاج إلى إرسال رسائل فارغة إلى جانب الخادم بشكل متقطع. للقيام بذلك ، يمكنك إضافة وظيفتين التاليتين في الكود الخاص بك: واحدة للحفاظ على الاتصال والآخر لإلغاء الاتصال. مع هذه الخدعة ، يمكنك التحكم في مشكلة المهلة.
استخدم timerid:
var timerid = 0 ؛ function keepalive () {var timeout = 15000 ؛ if (websocket.readyState == WebSocket.open) {websocket.send ('') ؛ } timerId = setTimeOut (keepalive ، timeout) ؛} cancelKeepalive () {if (timerid) {canceltimeout (timerId) ؛ }}يجب إضافة طريقة KeepAlive () في نهاية طريقة OnoPen () لاتصال WebSocket ، ويتم إضافة CancelKeepalive () في نهاية طريقة OnClose ().
46. تذكر أن المشغلين الأصليين دائمًا أكثر كفاءة من مكالمات الوظائف. استخدام الفانيليا.
على سبيل المثال ، لا تستخدم:
var min = math.min (a ، b) ؛ a.push (v) ؛
والاستخدام:
var min = a <b؟ AB ؛ A [A.Length] = V ؛
47. من الأعداد الصحيحة ، حدد قيمة بشكل عشوائي
هناك الصيغة التالية ، وهي مفيدة للغاية ، وتسمح لنا بعرض بعض الاقتباسات أو الأحداث الإخبارية الشهيرة بشكل عشوائي!
القيمة = Math.Floor (Math.Random () *إجمالي عدد القيم المحتملة+ القيمة الأولى المحتملة)
على سبيل المثال: لتحديد قيمة بين 2 و 10 ، يمكننا كتابتها مثل هذا
var num = math.floor (math.random ()*9+2)
يرجى تذكر الصيغة أعلاه! ~
استخدام ووظيفة الشريط الرأسي المفرد لمشغل JS "|" ومعالجة بيانات JS
الآن فقط ، عند تشغيل أعداد صحيحة JS ، فإنه يعادل إزالة النقطة العشرية ، Parseint. عندما يكون الرقم الإيجابي مكافئًا لـ Math.Floor () ، وعندما يكون الرقم السلبي يعادل Math.ceil () ملاحظة:
1. Math.ceil () يستخدم كقوة تصاعدية. 2. Math.floor () يستخدم كقدوى لأسفل. 3. Math.Round () الجولة () شائعة الاستخدام في الرياضيات. console.log (0.6 | 0) // 0console.log (1.1 | 0) // 1console.log (3.65555 | 0) // 3console.log (5.99999 | 0) // 5Console.log (-7.777 | 0) //-7
ملاحظة: بالإضافة إلى الطرق الثلاثة للرياضيات لمعالجة الأرقام ، غالبًا ما نستخدم parseint () و parsefloat () و tofixed () و topRecision () ، إلخ. تفسير موجز:
استخدام طريقة tofixed هو كما يلي:
100.456001.Tofixed (2) ؛ //100.47100.456001.tofixed(3) ؛ //100.456number.prototype.tofixed.call(100.456001،2) ؛ //100.47
العيوب: بعد الاستخدام ، ستصبح سلسلة.
استخدام TopRecision كما يلي:
99.456001.Toprecision (5) ؛ //99.456100.456001.ToPrecision(5) ؛ //100.46number.prototype.toprecision.call(10.456001،5) ؛ //10.456
قواعد التشغيل للأشرطة الرأسية المفردة
بعد النظر إلى المثال أعلاه ، نعلم عمومًا أن الشريط الرأسي الواحد يمكنه إجراء عملية التقريب ، مما يعني أنه يتم الاحتفاظ الجزء الإيجابي فقط وإزالة الجزء العشري. ومع ذلك ، كيف يتم حساب "| 0"؟ لماذا "| 0" تحقيق الغرض من التقريب؟ ماذا سيكون الشريط الرأسي المفرد إذا لم يكن 0؟
مع وضع هذه الأسئلة في الاعتبار ، دعونا نلقي نظرة على المثال التالي:
console.log (3 | 4) ؛ //7console.log(4| 4) ؛ //4console.log(8|3) ؛ //11console.log(5.3|4.1) ؛ //5console.log(9|3455) ؛ // 3455
يبدو أنه لا يوجد نمط يمكن العثور عليه؟ البحث عبر الإنترنت. http://tools.vevb.com/table/priority
هذا يذكر شريط عمودي واحد "|" ولكن لا يوجد جافا سكريبت.
حسنًا ، سأعلن الإجابة هنا. في الواقع ، الشريط الرأسي المفرد "|" هي النتيجة التي تم الحصول عليها عن طريق تحويلها إلى نظام من رقمين. على سبيل المثال ، دعونا نأخذ مثالًا بسيطًا:
يتم تحويل 3 | 4 إلى ثنائي و 011 | 100 إضافة يعطي 111 = 74 | 4 يتم تحويله إلى ثنائي و 100 | 100 إضافة 100 = 48 | 3 يتم تحويل إلى ثنائي و 1000 | 011 إضافة 1011 = 11
وهكذا ، لن أدرجها واحدة تلو الأخرى هنا. الشريط الرأسي المفرد "|" العملية هي النتيجة التي تم الحصول عليها عن طريق تحويلها إلى نظام من رقمين! هل تعلمت كل شيء؟