หลีกเลี่ยงตัวแปรทั่วโลกหลีกเลี่ยงการ new ให้หลีกเลี่ยง == หลีกเลี่ยง eval()
หลีกเลี่ยงตัวแปรทั่วโลก
ลดการใช้ตัวแปรโลก
ซึ่งรวมถึงข้อมูลทุกชนิดวัตถุและฟังก์ชั่น
ตัวแปรทั่วโลกและฟังก์ชั่นสามารถเขียนทับโดยสคริปต์อื่น ๆ
ใช้ตัวแปรท้องถิ่นแทนและเรียนรู้วิธีการใช้ การปิด
มักจะประกาศตัวแปรท้องถิ่น
ตัวแปรทั้งหมดที่ใช้ในการทำงานควรได้รับการประกาศให้เป็นตัวแปรท้องถิ่น
ตัวแปรท้องถิ่นจะต้องประกาศกับ var คำหลักมิฉะนั้นพวกเขาจะกลายเป็นตัวแปรทั่วโลก
โหมดเข้มงวดไม่อนุญาตให้มีตัวแปรที่ไม่ได้ประกาศ
การประกาศบน
มันเป็นวิธีการเข้ารหัสที่ดีที่จะนำการประกาศทั้งหมดที่ด้านบนของสคริปต์หรือฟังก์ชั่นแต่ละ
นี้จะ:
- ให้ทำความสะอาดรหัส
- ให้เป็นสถานที่เดียวที่จะมองหาตัวแปรท้องถิ่น
- ทำให้มันง่ายที่จะหลีกเลี่ยงที่ไม่พึงประสงค์ (นัย) ตัวแปรทั่วโลก
- ลดความเป็นไปได้ของที่ไม่พึงประสงค์อีกครั้งการประกาศ
// Declare at the beginning
var firstName, lastName, price, discount, fullPrice;
// Use later
firstName = "John";
lastName = "Doe";
price = 19.90;
discount = 0.10;
fullPrice = price * 100 / discount;
นอกจากนี้ยังไปสำหรับตัวแปรห่วง:
// Declare at the beginning
var i;
// Use later
for (i = 0; i < 5; i++)
{
โดยค่าเริ่มต้น JavaScript ย้ายประกาศทั้งหมดไปด้านบน (ยกจาวาสคริปต์)
เริ่มต้นตัวแปร
มันเป็นวิธีการเข้ารหัสที่ดีที่จะเริ่มต้นตัวแปรเมื่อคุณประกาศให้
นี้จะ:
- ให้ทำความสะอาดรหัส
- ให้เป็นสถานที่เดียวที่จะเริ่มต้นตัวแปร
- หลีกเลี่ยงไม่ได้กำหนดค่า
// Declare and initiate at the beginning
var firstName = "",
lastName
= "",
price = 0,
discount = 0,
fullPrice
= 0,
myArray = [],
myObject = {};
เริ่มต้นตัวแปรให้ความคิดของวัตถุประสงค์การใช้งาน (และตั้งใจชนิดข้อมูล)
ไม่เคยประกาศตัวเลขสตริงหรือวัตถุบูลีน
มักจะปฏิบัติต่อตัวเลขสตริงหรือ booleans เป็นค่าดั้งเดิม ไม่ได้เป็นวัตถุ
ประกาศประเภทนี้เป็นวัตถุช้าลงความเร็วในการทำงานและผลิตผลข้างเคียงที่น่ารังเกียจ:
ตัวอย่าง
var x = "John";
var y = new String("John");
(x === y) // is false because x is a string and y is an object.
ลองตัวเอง» หรือแม้แต่เลว:
ตัวอย่าง
var x = new String("John");
var y = new String("John");
(x == y) // is false because you cannot compare objects.
ลองตัวเอง» ไม่ใช้ new Object()
- ใช้ {} แทน new Object()
- ใช้ "" แทน new String()
- ใช้ 0 แทน new Number()
- ใช้ false แทน new Boolean()
- ใช้ [] แทน new Array()
- ใช้ /()/ แทน new RegExp()
- ใช้ function (){} แทนการ new Function()
ตัวอย่าง
var x1 = {}; // new object
var x2 = ""; // new primitive string
var x3 = 0; // new primitive number
var x4 = false; // new primitive boolean
var x5 = []; // new array object
var x6 = /()/; // new regexp object
var x7 = function(){}; // new function object
ลองตัวเอง» ระวังของการแปลงชนิดอัตโนมัติ
ระวังว่าตัวเลขสามารถบังเอิญถูกแปลงเป็นสตริงหรือ NaN (ไม่ใช่ตัวเลข)
JavaScript จะพิมพ์อย่างหลวม ๆ ตัวแปรสามารถมีชนิดข้อมูลที่แตกต่างกันและตัวแปรสามารถเปลี่ยนชนิดข้อมูลที่:
เมื่อทำดำเนินการทางคณิตศาสตร์, JavaScript สามารถแปลงตัวเลขเป็นสตริง:
ตัวอย่าง
var x = 5 + 7; // x.valueOf() is 12, typeof x is a number
var x = 5 + "7"; // x.valueOf() is 57, typeof x is a string
var x = "5" + 7; // x.valueOf() is 57, typeof x is a string
var x = 5 - 7; // x.valueOf() is -2, typeof x is a number
var x = 5 - "7"; // x.valueOf() is -2, typeof x is a number
var x = "5" - 7; // x.valueOf() is -2, typeof x is a number
var x = 5 - "x"; // x.valueOf() is NaN, typeof x is a number
ลองตัวเอง» ลบสตริงจากสตริงที่ไม่ก่อให้เกิดข้อผิดพลาด แต่ผลตอบแทนที่ NaN (ไม่ใช่ตัวเลข):
ใช้ === เปรียบเทียบ
== ดำเนินการเปรียบเทียบเสมอแปลง (ประเภทการจับคู่) ก่อนที่จะเปรียบเทียบ
=== เปรียบเทียบกองกำลังผู้ประกอบการของค่าและประเภท:
ตัวอย่าง
0 == ""; // true
1 == "1"; // true
1 == true; // true
0 === ""; // false
1 === "1"; // false
1 === true;
// false
ลองตัวเอง» ใช้ค่าเริ่มต้นพารามิเตอร์
หากฟังก์ชั่นเรียกว่ามีการโต้แย้งที่ขาดหายไปค่าของอาร์กิวเมนต์ที่หายไปมีการตั้งค่า undefined
ค่าไม่ได้กำหนดสามารถทำลายรหัสของคุณ มันเป็นนิสัยที่ดีในการกำหนดค่าเริ่มต้นการขัดแย้ง
อ่านข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์ฟังก์ชั่นและข้อโต้แย้งที่ ค่าฟังก์ชัน
จบสวิทช์ของคุณด้วยค่าเริ่มต้น
มักจะจบงบของคุณด้วยสวิทช์เริ่มต้น แม้ว่าคุณจะคิดว่าจะมีความต้องการมันไม่มี
ตัวอย่าง
switch (new Date().getDay()) {
case 0:
day = "Sunday";
break;
case 1:
day = "Monday";
break;
case 2:
day = "Tuesday";
break;
case 3:
day = "Wednesday";
break;
case 4:
day = "Thursday";
break;
case 5:
day = "Friday";
break;
case 6:
day = "Saturday";
break;
default:
day =
"Unknown";
}
ลองตัวเอง» หลีกเลี่ยงการใช้ eval()
eval() ฟังก์ชั่นที่ใช้ในการเรียกใช้ข้อความเป็นรหัส ในเกือบทุกกรณีก็ไม่ควรมีความจำเป็นที่จะใช้มัน
เพราะจะช่วยให้รหัสที่กำหนดเองจะทำงานก็ยังแสดงให้เห็นถึงปัญหาด้านความปลอดภัย