ฉันอยากจะบอกว่าความแตกต่างนั้นมีสไตล์โวหารล้วนๆ แต่ฉันมีข้อสงสัยจริงๆ ลองพิจารณาตัวอย่างต่อไปนี้:
/*
Add trim() functionality to JavaScript...
1. By extending the String prototype
2. By creating a 'stand-alone' function
This is just to demonstrate results are the same in both cases.
*/
// Extend the String prototype with a trim() method
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
};
// 'Stand-alone' trim() function
function trim(str) {
return str.replace(/^\s+|\s+$/g, '');
};
document.writeln(String.prototype.trim);
document.writeln(trim);
ใน Safari, Chrome, Opera และ Internet Explorer (ทดสอบใน IE7 และ IE8) สิ่งนี้จะส่งคืนสิ่งต่อไปนี้:
function () {
return this.replace(/^\s+|\s+$/g, '');
}
function trim(str) {
return str.replace(/^\s+|\s+$/g, '');
}
อย่างไรก็ตาม Firefox จะให้ผลลัพธ์ที่แตกต่างกันเล็กน้อย:
function () {
return this.replace(/^\s+|\s+$/g, "");
}
function trim(str) {
return str.replace(/^\s+|\s+$/g, "");
}
เครื่องหมายคำพูดเดี่ยวถูกแทนที่ด้วยเครื่องหมายคำพูดคู่ (โปรดทราบว่าการเว้นวรรคเยื้องนั้นถูกแทนที่ด้วยช่องว่างสี่ช่อง) สิ่งนี้ให้ความรู้สึกว่าเบราว์เซอร์อย่างน้อยหนึ่งตัวแยกวิเคราะห์ JavaScript ภายในราวกับว่าทุกอย่างถูกเขียนโดยใช้เครื่องหมายคำพูดคู่ หนึ่งอาจคิดว่ามันใช้เวลาน้อยลงในการแยกวิเคราะห์ JavaScript หากทุกอย่างถูกเขียนแล้วตามมาตรฐานนี้
ซึ่งทำให้ฉันเป็นหมีแพนด้าที่เศร้ามากเพราะฉันคิดว่าคำพูดเดียวดูดีกว่ามากในรหัส นอกจากนี้ในภาษาการเขียนโปรแกรมอื่นพวกเขามักจะใช้งานได้เร็วกว่าคำพูดสองคำดังนั้นมันจะสมเหตุสมผลถ้าใช้กับ JavaScript เท่านั้น
สรุป:ฉันคิดว่าเราต้องทำวิจัยเพิ่มเติมเกี่ยวกับเรื่องนี้
แก้ไข:สิ่งนี้อาจอธิบายผลการทดสอบของ Peter-Paul Kochตั้งแต่หลังในปี 2003
ดูเหมือนว่าบางครั้งราคาจะเร็วกว่าใน Explorer Windows (ประมาณ 1/3 ของการทดสอบของฉันแสดงเวลาตอบสนองที่เร็วขึ้น) แต่ถ้า Mozilla แสดงความแตกต่างเลยก็จัดการได้กับราคาสองเท่าเร็วกว่าเล็กน้อย ฉันไม่พบความแตกต่างเลยใน Opera
แก้ไข 2014: Firefox / Spidermonkey เวอร์ชันทันสมัยไม่ต้องทำสิ่งนี้อีกต่อไป