นำมาจากMDN
สตริงลิเทอรัล (แสดงโดยอัญประกาศคู่หรือเดี่ยว) และสตริงที่ส่งคืนจากการเรียกสตริงในบริบทที่ไม่ใช่ตัวสร้าง (กล่าวคือโดยไม่ใช้คีย์เวิร์ดใหม่) เป็นสตริงดั้งเดิม JavaScript จะแปลงวัตถุดั้งเดิมเป็นสตริงโดยอัตโนมัติเพื่อให้สามารถใช้วิธีการอ็อบเจ็กต์ String สำหรับสตริงดั้งเดิมได้ ในบริบทที่ต้องเรียกใช้เมธอดบนสตริงดั้งเดิมหรือการค้นหาคุณสมบัติเกิดขึ้น JavaScript จะตัดสตริงดั้งเดิมโดยอัตโนมัติและเรียกใช้เมธอดหรือดำเนินการค้นหาคุณสมบัติ
ดังนั้นฉันคิดว่าการดำเนินการ (เชิงตรรกะ) (การเรียกใช้เมธอด) บนสตริงดั้งเดิมควรจะช้ากว่าการดำเนินการกับสตริงอ็อบเจกต์เนื่องจากสตริงดั้งเดิมใด ๆ ถูกแปลงเป็นสตริงอ็อบเจ็กต์ (งานพิเศษ) ก่อนที่method
จะนำไปใช้กับสตริง
แต่ในกรณีทดสอบนี้ผลลัพธ์กลับตรงกันข้าม ป้องกันรหัส-1วิ่งเร็วกว่าบล็อก-2 รหัสทั้งบล็อกรหัสจะได้รับดังนี้
รหัสบล็อก -1:
var s = '0123456789';
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
รหัสบล็อก -2:
var s = new String('0123456789');
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
ผลลัพธ์จะแตกต่างกันไปในเบราว์เซอร์ แต่code block-1จะเร็วกว่าเสมอ ใครช่วยอธิบายเรื่องนี้หน่อยได้ไหมว่าทำไมcode block-1 ถึงเร็วกว่าcode block-2
'0123456789'.charAt(i)
ไง?
code block-1
เร็วกว่า?
new String
แนะนำเลเยอร์โปร่งใสอื่นของการตัดวัตถุtypeof new String(); //"object"