JavaScript เป็นภาษาการเขียนโปรแกรมระดับโลกที่สามารถใช้สำหรับการพัฒนาเว็บการพัฒนาแอปพลิเคชันมือถือ (PhoneGap, AppCelerator) การพัฒนาฝั่งเซิร์ฟเวอร์ (node.js และ Wakanda) ฯลฯ JavaScript เป็นภาษาแรกสำหรับมือใหม่หลายคนที่เข้าสู่โลกการเขียนโปรแกรม มันสามารถใช้เพื่อแสดงกล่องพรอมต์ง่าย ๆ ในเบราว์เซอร์หรือเพื่อควบคุมหุ่นยนต์ผ่าน nodebot หรือ noderuino นักพัฒนาที่สามารถเขียนรหัส JavaScript ที่มีโครงสร้างที่ดีและมีประสิทธิภาพตอนนี้เป็นที่ต้องการมากที่สุดหลังจากผู้คนในตลาดการสรรหา
ในบทความนี้ฉันจะแบ่งปันเคล็ดลับ JavaScript เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด ยกเว้นไม่กี่คนทั้งสองเป็นเอ็นจิ้น JavaScript ของเบราว์เซอร์และล่าม JavaScript ฝั่งเซิร์ฟเวอร์
รหัสตัวอย่างในบทความนี้ผ่านการทดสอบใน Google Chrome 30 รุ่นล่าสุด (V8 3.20.17.15)
1. ตรวจสอบให้แน่ใจว่าใช้คำหลัก VAR เมื่อกำหนดค่าให้กับตัวแปรเป็นครั้งแรก
หากตัวแปรไม่ได้ประกาศและถูกกำหนดโดยตรงให้กับค่ามันจะถูกใช้เป็นตัวแปรส่วนกลางใหม่โดยค่าเริ่มต้น พยายามหลีกเลี่ยงการใช้ตัวแปรทั่วโลก
2. ใช้ === แทนที่ ==
ตัวดำเนินการ == และ! = จะแปลงชนิดข้อมูลโดยอัตโนมัติหากจำเป็น แต่ === และ! == จะไม่พวกเขาจะเปรียบเทียบค่าและชนิดข้อมูลในเวลาเดียวกันซึ่งทำให้พวกเขาเร็วกว่า == และ! =
การคัดลอกรหัสมีดังนี้:
[10] === 10 // เป็นเท็จ
[10] == 10 // เป็นจริง
'10' == 10 // เป็นจริง
'10' === 10 // เป็นเท็จ
[] == 0 // เป็นจริง
[] === 0 // เป็นเท็จ
'' == false // เป็นจริง แต่จริง == "a" เป็นเท็จ
'' === false // เป็นเท็จ
3. ผลลัพธ์เชิงตรรกะของ underfined, null, 0, false, nan และ strings ที่ว่างเปล่าเป็นเท็จทั้งหมด
4. ใช้เครื่องหมายอัฒภาคที่ส่วนท้ายของบรรทัด
ในทางปฏิบัติมันเป็นการดีที่สุดที่จะใช้เครื่องหมายอัฒภาค ไม่เป็นไรที่จะลืมเขียนพวกเขา ในกรณีส่วนใหญ่ล่าม JavaScript จะถูกเพิ่มโดยอัตโนมัติ สำหรับสาเหตุที่คุณต้องการใช้เครื่องหมายอัฒภาคคุณสามารถอ้างถึงความจริงเกี่ยวกับเครื่องหมายอัฒภาคในบทความ JavaScript
5. ใช้ตัวสร้างวัตถุ
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นบุคคล (ชื่อ FirstName, LastName) {
this.firstName = FirstName;
this.lastName = LastName;
-
var saad = คนใหม่ ("saad", "mousliki");
6. ระวังด้วย typeof, instanceof และ constructor
Typeof: JavaScript Unary Operator ใช้เพื่อส่งคืนประเภทดั้งเดิมของตัวแปรในรูปแบบของสตริง โปรดทราบว่า typeof null จะส่งคืนวัตถุและประเภทวัตถุส่วนใหญ่ (อาร์เรย์วันที่เวลา ฯลฯ ) จะส่งคืนวัตถุ
ตัวสร้าง: คุณสมบัติต้นแบบภายในซึ่งสามารถเขียนใหม่ผ่านรหัส
อินสแตนซ์ของ: ตัวดำเนินการ JavaScript จะค้นหาในคอนสตรัคเตอร์ในห่วงโซ่ต้นแบบ, ส่งคืนจริงถ้าพบมิฉะนั้นจะส่งคืนเท็จถ้าเท็จ
การคัดลอกรหัสมีดังนี้:
var arr = ["a", "b", "c"];
typeof arr; // กลับ "วัตถุ"
arr อินสแตนซ์ของอาร์เรย์ // true
arr.constructor (); -
7. ใช้ฟังก์ชั่นโทรด้วยตนเอง
ฟังก์ชั่นจะถูกดำเนินการโดยอัตโนมัติโดยตรงหลังจากการสร้างซึ่งมักจะเรียกว่าฟังก์ชั่นที่ไม่ระบุชื่อด้วยตนเองหรือนิพจน์ฟังก์ชั่นการโทรโดยตรง (นิพจน์ฟังก์ชั่นที่เรียกทันที) รูปแบบมีดังนี้:
การคัดลอกรหัสมีดังนี้:
(การทำงาน(){
// รหัสที่วางไว้ที่นี่จะดำเนินการโดยอัตโนมัติ
-
(ฟังก์ชั่น (a, b) {
var result = a+b;
ผลการกลับมา;
}) (10,20)
8. สุ่มรับสมาชิกจากอาร์เรย์
การคัดลอกรหัสมีดังนี้:
รายการ var = [12, 548, 'a', 2, 5478, 'foo', 8852 ,, 'doe', 2145, 119];
var randomItem = รายการ [math.floor (math.random () * items.length)];
9. รับตัวเลขสุ่มภายในช่วงที่ระบุ
ฟังก์ชั่นนี้เป็นตัวเลขโดยเฉพาะอย่างยิ่งเมื่อสร้างข้อมูลเท็จสำหรับการทดสอบเช่นจำนวนค่าจ้างภายในช่วงที่ระบุ
การคัดลอกรหัสมีดังนี้:
var x = math.floor (math.random () * (สูงสุด - min + 1)) + min;
10. สร้างอาร์เรย์ของตัวเลขจาก 0 ถึงค่าที่ระบุ
การคัดลอกรหัสมีดังนี้:
var numbersarray = [], สูงสุด = 100;
สำหรับ (var i = 1; numbersarray.push (i ++) <max;); // numbers = [1,2,3 ... 100]
11. สร้างสตริงตัวอักษรและตัวเลขแบบสุ่ม
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น generaterandomalphanum (len) {
var rdmstring = "";
สำหรับ (; rdmstring.length <len; rdmstring += math.random (). toString (36) .substr (2));
ส่งคืน rdmstring.substr (0, len);
12. ขัดขวางลำดับของอาร์เรย์ของตัวเลข
การคัดลอกรหัสมีดังนี้:
หมายเลข var = [5, 458, 120, -215, 228, 400, 122205, -85411];
numbers = numbers.sort (function () {return math.random () - 0.5});
/ * ตัวเลขอาร์เรย์จะคล้ายกับ [120, 5, 228, -215, 400, 458, -85411, 122205] */
ที่นี่เราใช้ฟังก์ชั่นการเรียงลำดับอาร์เรย์ในตัวของ JavaScript วิธีที่ดีกว่าคือการใช้งานด้วยรหัสพิเศษ (เช่นอัลกอริทึม Fisher-Yates) คุณสามารถอ้างถึงการสนทนานี้เกี่ยวกับ Stackoverflow
13. ลบช่องว่างออกจากสตริง
ภาษาเช่น Java, C# และ PHP ทั้งหมดใช้ฟังก์ชั่น Despace String พิเศษ แต่ไม่มีสิ่งเช่น JavaScript คุณสามารถใช้รหัสต่อไปนี้เพื่อสร้างฟังก์ชั่นการตัดแต่งสำหรับฟังก์ชั่นวัตถุสตริง:
การคัดลอกรหัสมีดังนี้:
string.prototype.trim = function () {return this.replace (/^/s+|/s+$/g, "");};
เอ็นจิ้น JavaScript ใหม่มีการใช้งานดั้งเดิมของ TRIM () แล้ว
14. การเพิ่มระหว่างอาร์เรย์
การคัดลอกรหัสมีดังนี้:
var array1 = [12, "foo", {name "joe"}, -2458];
var array2 = ["doe", 555, 100];
array.prototype.push.apply (array1, array2);
/ * ค่า array1 คือ [12, "foo", {name "joe"}, -2458, "doe", 555, 100] *//
15. แปลงวัตถุเป็นอาร์เรย์
การคัดลอกรหัสมีดังนี้:
var argarray = array.prototype.slice.call (อาร์กิวเมนต์);
16. ตรวจสอบว่าเป็นตัวเลขหรือไม่
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น ISNUMBER (n) {
return! isnan (parsefloat (n)) && isfinite (n);
-
17. ตรวจสอบว่าเป็นอาร์เรย์หรือไม่
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น 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.frames.length-1] .Array;
var arr = myarray ใหม่ (a, b, 10); // [A, B, 10]
// ตัวสร้างของ MyArray หายไปแล้วผลลัพธ์ของอินสแตนซ์จะผิดปกติ
// ตัวสร้างไม่สามารถแชร์ได้ในเฟรม
arr อินสแตนซ์ของอาร์เรย์; // เท็จ
18. รับค่าสูงสุดและต่ำสุดในอาร์เรย์
การคัดลอกรหัสมีดังนี้:
หมายเลข var = [5, 458, 120, -215, 228, 400, 122205, -85411];
var maxinnumbers = math.max.apply (คณิตศาสตร์, ตัวเลข);
var mininnumbers = math.min.apply (คณิตศาสตร์, ตัวเลข);
19. ล้างอาร์เรย์
การคัดลอกรหัสมีดังนี้:
var myarray = [12, 222, 1,000];
myArray.length = 0; // myArray จะเท่ากับ []
20. อย่าลบหรือลบองค์ประกอบโดยตรงออกจากอาร์เรย์
หากคุณใช้ลบโดยตรงกับองค์ประกอบอาร์เรย์มันจะไม่ถูกลบจริง แต่เพียงแค่ตั้งค่าองค์ประกอบตามที่ไม่ได้กำหนด การประกบควรใช้สำหรับการลบองค์ประกอบอาร์เรย์
อย่า:
การคัดลอกรหัสมีดังนี้:
รายการ var = [12, 548, 'a', 2, 5478, 'foo', 8852 ,, 'doe', 2154, 119];
items.length; // return 11
ลบรายการ [3]; // return true
items.length; // return 11
/ * รายการผลคือ [12, 548, "A", × 1 ที่ไม่ได้กำหนด× 1, 5478, "foo", 8852, × 1 ที่ไม่ได้กำหนด "DOE", 2154, 119] *//
สำหรับ:
การคัดลอกรหัสมีดังนี้:
รายการ var = [12, 548, 'a', 2, 5478, 'foo', 8852 ,, 'doe', 2154, 119];
items.length; // return 11
items.splice (3,1);
items.length; // return 10
/* รายการผลลัพธ์คือ [12, 548, "A", 5478, "Foo", 8852, × 1 ที่ไม่ได้กำหนด "," DOE ", 2154, 119]
คุณสามารถใช้การลบเมื่อลบคุณสมบัติของวัตถุ
21. ใช้แอตทริบิวต์ความยาวเพื่อตัดทอนอาร์เรย์
ในตัวอย่างก่อนหน้านี้ใช้แอตทริบิวต์ความยาวเพื่อล้างอาร์เรย์และคุณยังสามารถใช้มันเพื่อตัดทอนอาร์เรย์:
การคัดลอกรหัสมีดังนี้:
var myarray = [12, 222, 1,000, 124, 98, 10];
myArray.length = 4; // myArray จะเท่ากับ [12, 222, 1,000, 124]
ในเวลาเดียวกันหากแอตทริบิวต์ความยาวเพิ่มขึ้นค่าความยาวของอาร์เรย์จะเพิ่มขึ้นและไม่ได้กำหนดจะถูกใช้เป็นองค์ประกอบใหม่ในการเติม ความยาวเป็นทรัพย์สินที่เขียนได้
การคัดลอกรหัสมีดังนี้:
myArray.length = 10; // ความยาวอาร์เรย์ใหม่คือ 10
myArray [myArray.length - 1]; // ไม่ได้กำหนด
22. ใช้ตรรกะและหรือในเงื่อนไข
การคัดลอกรหัสมีดังนี้:
var foo = 10;
foo == 10 && dosomething (); // เป็นสิ่งเดียวกับ (foo == 10) dosomething ();
foo == 5 || Dosomething (); // เป็นสิ่งเดียวกับ (foo! = 5) dosomething ();
ตรรกะหรือสามารถใช้เพื่อตั้งค่าเริ่มต้นเช่นค่าเริ่มต้นของพารามิเตอร์ฟังก์ชัน
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น dosomething (arg1) {
arg1 = arg1 || 10; // arg1 จะมี 10 เป็นค่าเริ่มต้นหากยังไม่ได้ตั้งค่า
-
23. ทำแผนที่ () วิธีการลูปข้อมูล
การคัดลอกรหัสมีดังนี้:
var squares = [1,2,3,4] .map (ฟังก์ชั่น (val) {
return val * val;
-
// สี่เหลี่ยมจะเท่ากับ [1, 4, 9, 16]
24. รักษาจำนวนทศนิยมที่ระบุไว้
การคัดลอกรหัสมีดังนี้:
var num = 2.443242342;
num = num.tofixed (4); // num จะเท่ากับ 2.4432
โปรดทราบว่า tofixec () ส่งคืนสตริงไม่ใช่ตัวเลข
25. ปัญหาของการคำนวณจุดลอยตัว
การคัดลอกรหัสมีดังนี้:
0.1 + 0.2 === 0.3 // เป็นเท็จ
9007199254740992 + 1 // เท่ากับ 9007199254740992
9007199254740992 + 2 // เท่ากับ 9007199254740994
ทำไม เนื่องจาก 0.1+0.2 เท่ากับ 0.3000000000000000000004 หมายเลข JavaScript ถูกสร้างขึ้นตามมาตรฐาน IEEE 754 และแสดงภายในด้วยทศนิยมจุดลอยตัว 64 บิต สำหรับรายละเอียดโปรดดูว่าตัวเลขใน JavaScript ถูกเข้ารหัสอย่างไร
ปัญหานี้สามารถแก้ไขได้โดยใช้ tofixed () และ toprecision ()
26. ตรวจสอบคุณสมบัติของวัตถุผ่านการวนรอบ for-in
การใช้งานต่อไปนี้สามารถป้องกันไม่ให้เข้าสู่คุณสมบัติต้นแบบของวัตถุในระหว่างการทำซ้ำ
การคัดลอกรหัสมีดังนี้:
สำหรับ (ชื่อ var ในวัตถุ) {
if (object.hasownproperty (ชื่อ)) {
// ทำอะไรกับชื่อ
-
-
27. คอมม่าผู้ให้บริการ
การคัดลอกรหัสมีดังนี้:
var a = 0;
var b = (a ++, 99);
console.log (a); // a จะเท่ากับ 1
console.log (b); // b เท่ากับ 99
28. การจัดเก็บตัวแปรชั่วคราวที่ใช้สำหรับการคำนวณและการสืบค้น
ในตัวเลือก jQuery องค์ประกอบ DOM ทั้งหมดสามารถจัดเก็บชั่วคราวได้
การคัดลอกรหัสมีดังนี้:
var navright = document.querySelector ('#ขวา');
var navleft = document.querySelector ('#ซ้าย');
var navup = document.querySelector ('#up');
var nanbown = document.querySelector ('#down');
29. ตรวจสอบพารามิเตอร์ที่ส่งผ่านใน isfinite () ล่วงหน้า
การคัดลอกรหัสมีดังนี้:
isfinite (0/0); // เท็จ
isfinite ("foo"); // เท็จ
isfinite ("10"); // จริง
isfinite (10); // จริง
isfinite (ไม่ได้กำหนด); // เท็จ
isfinite (); // เท็จ
isfinite (null); // จริงให้ความสนใจเป็นพิเศษกับสิ่งนี้
30. หลีกเลี่ยงการใช้ตัวเลขติดลบเป็นการจัดทำดัชนีในอาร์เรย์
การคัดลอกรหัสมีดังนี้:
var numbersarray = [1,2,3,4,5];
var จาก = numbersarray.indexof ("foo"); // จากเท่ากับ -1
Numbersarray.splice (จาก, 2); // จะกลับมา [5]
โปรดทราบว่าพารามิเตอร์ดัชนีที่ส่งไปยัง Splice ไม่ใช่จำนวนลบ เมื่อมันเป็นจำนวนลบองค์ประกอบจะถูกลบออกจากจุดสิ้นสุดของอาร์เรย์
31. ใช้ JSON เพื่อทำให้เป็นอนุกรมและ deserialize
การคัดลอกรหัสมีดังนี้:
var person = {ชื่อ: 'saad', อายุ: 26, แผนก: {id: 15, ชื่อ: "r & d"}};
var stringfromperson = json.stringify (บุคคล);
/ * ผลลัพธ์ StringFromperson คือ "{" ชื่อ ":" Saad "," อายุ ": 26," แผนก ": {" id ": 15," ชื่อ ":" r & d "}}" *//
var personfromstring = json.parse (StringFromperson);
/* ค่าของ personfromstring เหมือนกับของวัตถุบุคคล*//
32. อย่าใช้ Eval () หรือตัวสร้างฟังก์ชั่น
ค่าใช้จ่ายของ Eval () และตัวสร้างฟังก์ชั่นสูง ทุกครั้งที่เรียกว่าเอ็นจิ้น JavaScript จำเป็นต้องแปลงซอร์สโค้ดให้เป็นรหัสปฏิบัติการ
การคัดลอกรหัสมีดังนี้:
var func1 = ฟังก์ชั่นใหม่ (functioncode);
var func2 = eval (functioncode);
33. หลีกเลี่ยงการใช้กับ ()
ใช้กับ () เพื่อเพิ่มตัวแปรในขอบเขตทั่วโลก ดังนั้นหากมีตัวแปรอื่น ๆ ที่มีชื่อเดียวกันมันเป็นเรื่องง่ายที่จะสับสนและค่าจะถูกเขียนทับ
34. อย่าใช้สำหรับอาร์เรย์
หลีกเลี่ยง:
การคัดลอกรหัสมีดังนี้:
var sum = 0;
สำหรับ (var i ใน arraynumbers) {
sum += arraynumbers [i];
-
แทน:
การคัดลอกรหัสมีดังนี้:
var sum = 0;
สำหรับ (var i = 0, len = arraynumbers.length; i <len; i ++) {
sum += arraynumbers [i];
-
ข้อได้เปรียบอีกประการหนึ่งคือตัวแปรสองตัวที่ฉันและเลนอยู่ในการประกาศครั้งแรกของการวนรอบและทั้งคู่จะเริ่มต้นเพียงครั้งเดียวซึ่งเร็วกว่าวิธีการเขียนต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
สำหรับ (var i = 0; i <arraynumbers.length; i ++)
35. ใช้ฟังก์ชั่นแทนสตริงเมื่อผ่านไปยัง setInterval () และ settimeout ()
หากคุณผ่านสตริงไปยัง settimeout () และ setInterval () พวกเขาจะแปลงในลักษณะที่คล้ายกันกับการประเมินซึ่งจะช้ากว่าแน่นอนดังนั้นอย่าใช้:
การคัดลอกรหัสมีดังนี้:
setInterval ('dosomethingperiodically ()', 1,000);
settimeout ('dosomethingfterfterfiveSeconds ()', 5000);
ใช้แทน:
การคัดลอกรหัสมีดังนี้:
setInterval (dosomethingperiodically, 1,000);
settimeout (dosomethingfterfterfiveSeconds, 5000);
36. ใช้สวิตช์/เคสแทนสแต็คขนาดใหญ่ของ IF/อื่น ๆ
เมื่อตัดสินว่ามีมากกว่าสองสาขาให้ใช้สวิตช์/เคสเร็วขึ้นและสง่างามมากขึ้นและเอื้อต่อการจัดระเบียบของรหัส แน่นอนถ้ามีมากกว่า 10 สาขาอย่าใช้สวิตช์/เคส
37. ใช้ช่วงเวลาดิจิตอลในสวิตช์/เคส
ในความเป็นจริงเงื่อนไขกรณีในสวิตช์/เคสสามารถเขียนเช่นนี้:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น getCategory (อายุ) {
var category = "";
สลับ (จริง) {
กรณี ISNAN (อายุ):
หมวดหมู่ = "ไม่ใช่อายุ";
หยุดพัก;
กรณี (อายุ> = 50):
หมวดหมู่ = "เก่า";
หยุดพัก;
กรณี (อายุ <= 20):
category = "baby";
หยุดพัก;
ค่าเริ่มต้น:
หมวดหมู่ = "หนุ่ม";
หยุดพัก;
-
หมวดหมู่คืน;
-
GetCategory (5); // จะกลับ "ที่รัก"
38. ใช้วัตถุเป็นต้นแบบ
ด้วยวิธีนี้คุณสามารถสร้างวัตถุใหม่ตามสิ่งนี้เป็นพารามิเตอร์:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นโคลน (วัตถุ) {
ฟังก์ชั่น oneshotConstructor () {};
oneshotConstructor.prototype = วัตถุ;
ส่งคืน oneshotConstructor ใหม่ ();
-
โคลน (อาร์เรย์) .prototype; -
39. ฟังก์ชันการแปลงฟิลด์ HTML
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น Escapehtml (ข้อความ) {
var replacements = {"<": "<", ">": ">", "&": "&", "/": "" "};
ส่งคืน text.replace (/[<> & "]/g, ฟังก์ชัน (อักขระ) {
กลับมาแทนที่ [อักขระ];
-
-
40. อย่าใช้ลอง-จับในรอบแรก
ส่วนที่จับได้ใน Try-Catch-Finally จะกำหนดข้อยกเว้นให้กับตัวแปรเมื่อดำเนินการและตัวแปรนี้จะถูกสร้างเป็นตัวแปรใหม่ภายในขอบเขตรันไทม์
อย่า:
การคัดลอกรหัสมีดังนี้:
var object = ['foo', 'bar'], i;
สำหรับ (i = 0, len = object.length; i <len; i ++) {
พยายาม {
// ทำสิ่งที่ทำให้เกิดข้อยกเว้น
-
จับ (e) {
// จัดการข้อยกเว้น
-
-
แทน:
การคัดลอกรหัสมีดังนี้:
var object = ['foo', 'bar'], i;
พยายาม {
สำหรับ (i = 0, len = object.length; i <len; i ++) {
// ทำสิ่งที่ทำให้เกิดข้อยกเว้น
-
-
จับ (e) {
// จัดการข้อยกเว้น
-
41. ให้ความสนใจกับการตั้งค่าการหมดเวลาเมื่อใช้ XMLHTTPREQUESTS
เมื่อมีการดำเนินการ XMLHTTPREQUESTS เมื่อไม่มีการตอบสนองเป็นเวลานาน (เช่นปัญหาเครือข่าย ฯลฯ ) การเชื่อมต่อควรถูกยกเลิก งานนี้สามารถทำได้โดย setTimeOut ():
การคัดลอกรหัสมีดังนี้:
var xhr = ใหม่ xmlhttprequest ();
xhr.onreadyStateChange = function () {
if (this.readystate == 4) {
ClearTimeout (หมดเวลา);
// ทำอะไรกับข้อมูลการตอบกลับ
-
-
var timeout = settimeout (function () {
xhr.abort (); // การโทรกลับข้อผิดพลาด
}, 60*1000 /*หมดเวลาหลังจากหนึ่งนาที* /);
xhr.open ('get', url, true);
xhr.send ();
ในขณะเดียวกันก็ควรสังเกตว่าไม่ควรเริ่มคำขอ XMLHTTPREQUESTS หลายครั้งในเวลาเดียวกัน
42. จัดการหมดเวลาของ WebSocket
โดยทั่วไปหลังจากสร้างการเชื่อมต่อ WebSocket หากไม่มีกิจกรรมภายใน 30 วินาทีเซิร์ฟเวอร์จะหมดเวลาการเชื่อมต่อและไฟร์วอลล์ยังสามารถหมดเวลาการเชื่อมต่อที่ไม่ทำงานในวงจรหน่วย
เพื่อป้องกันไม่ให้สิ่งนี้เกิดขึ้นข้อความที่ว่างเปล่าสามารถส่งไปยังเซิร์ฟเวอร์ได้ในเวลาหนึ่ง ข้อกำหนดนี้สามารถทำได้ผ่านฟังก์ชั่นสองฟังก์ชั่นต่อไปนี้หนึ่งในนั้นสำหรับการเชื่อมต่อที่ใช้งานอยู่และอื่น ๆ โดยเฉพาะสำหรับการสิ้นสุดสถานะนี้
การคัดลอกรหัสมีดังนี้:
var timerid = 0;
ฟังก์ชั่น keepalive () {
var timeout = 15000;
if (webSocket.readyState == webSocket.Open) {
websocket.send ('');
-
timerid = settimeout (keepalive, หมดเวลา);
-
ฟังก์ชั่น cancelkeepalive () {
ถ้า (timerid) {
CancelTimeOut (Timerid);
-
-
สามารถวางฟังก์ชั่น Keepalive () ที่ส่วนท้ายของวิธี ONOPEN () ของการเชื่อมต่อ WebSocket และ Cancelkeepalive () สามารถวางไว้ที่ส่วนท้ายของวิธี ONCLOSE ()
43. ให้ความสนใจกับเวลาและตัวดำเนินการดั้งเดิมนั้นเร็วกว่าการเรียกใช้ฟังก์ชัน ใช้วานิลลา
ตัวอย่างเช่นโดยทั่วไปไม่ได้เป็นเช่นนี้:
การคัดลอกรหัสมีดังนี้:
var min = math.min (a, b);
A.push (V);
สามารถใช้แทน:
การคัดลอกรหัสมีดังนี้:
var min = a <b? A: B;
A [A.Length] = V;
44. ให้ความสนใจกับโครงสร้างรหัสในระหว่างการพัฒนาตรวจสอบและบีบอัดรหัส JavaScript ก่อนออนไลน์
คุณสามารถใช้เครื่องมือเช่น JSLINT หรือ JSMIN เพื่อตรวจสอบและบีบอัดรหัส