JavaScript คืออะไรจริงๆ


95

ทั้งหมดนี้เริ่มต้นเมื่อผมกำลังมองหาวิธีการทดสอบของฉันหน้าเว็บสำหรับอัจฉริยะ JavaScript เช่นW3C HTML Validator ฉันยังไม่พบ ถ้าอย่างนั้นคุณก็รู้ว่า ...

  1. ผมมองสำหรับหน้า JavaScript อย่างเป็นทางการและหาECMA สคริปต์ คนเหล่านี้มีภาษาสคริปต์ที่ได้มาตรฐาน (ฉันไม่รู้สึกว่าเรียกมันว่า JavaScript อีกต่อไป!) และเรียกมันว่า ECMA-262 ( Wikipedia ) ผลงานล่าสุดของพวกเขาคือรุ่น 5.1

  2. JavaScript ได้รับการพัฒนาโดย Mozilla Corporation และรุ่นเสถียรล่าสุดของพวกเขาคือ 1.8.5 ( ดูที่นี่ ) ซึ่งอิงตามรุ่น 5.1 ของ ECMA

  3. หน้าวิกิพีเดียที่เชื่อมโยงกล่าวถึงภาษาถิ่น JavaScript 1.8.5 ของ Mozilla ถูกระบุว่าเป็นภาษาถิ่นพร้อมกับJScript 9 (IE) และ JavaScript (Chrome ของV8 [ Wiki ]) และอื่น ๆ อีกมากมาย ฉันต้องเข้าใจไหมว่า JavaScript 1.8.5 นั้นมาจาก ECMA-262 และSpiderMonkey [ Wiki ] เป็นเครื่องมือที่ทำงานหรือไม่ และ Chrome มีภาษาของตนเองและเอ็นจิ้น V8 เป็นโปรแกรมที่ทำงานหรือไม่

ด้วยภาษาเหล่านี้ที่อ้างอิงจาก ECMA-262 สิ่งที่ฉันไม่สามารถเข้าใจได้คือ " JavaScriptคืออะไร" มีภาษาสคริปต์ข้ามเบราว์เซอร์อย่างแท้จริงหรือไม่? ผู้ใช้งานหลายคนมารวมกันเพื่อตกลงเรื่องการใช้ข้ามภาษาได้หรือไม่? ความพยายามนี้เป็น ECMA หรือไม่


10
คุณลืมที่จะพูดถึง ActionScript ซึ่งเป็นภาษาถิ่น ECMA ซึ่งไม่เกี่ยวข้องกับสิ่งที่คุณอาจเรียกว่าจาวาสคริปต์
DaveRandom

4
ไม่มากสำหรับความสอดคล้อง (ตามที่คุณเน้นไว้แล้ว) แต่ jslint นั้นค่อนข้างดีสำหรับการตรวจสอบรหัส
ลูกแมวบางคน

2
@MadaraUchiha - ฉันเห็นด้วย "เพียงแค่ใช้ jQuery ทุกอย่างจะโอเค" จะไม่เป็นไร นั่นคือเหตุผลที่ฉันเริ่มค้นคว้าสิ่งนี้ เว็บไซต์ของฉันbharath.lohray.comทำงานได้ดีบน Chrome และ Firefox และเครื่องมือตรวจสอบความถูกต้อง W3C ไม่ได้สร้างข้อผิดพลาดใด ๆ แต่มันดูดครั้งใหญ่ใน IE ใหม่ล่าสุด! นอกจากนี้เท่าที่ฉันชอบความคิดของคนที่anybrowser.org/campaignฉันไม่สามารถข้ามเบราว์เซอร์อย่างแท้จริง!
ลอร์ดโลห์

7
เกี่ยวกับหน้าของคุณการเลื่อนนั้นน่ารำคาญมากและอยู่ด้านบนสุด เพียง IMO และชื่อ "ลอร์ด" นั้นฟังดูโอ้อวดราวกับนรกแม้ว่าคุณจะเป็นลอร์ดจริงๆก็ตาม
NullUserException

11
มันแววโดยไม่จำเป็น คุณไม่เห็นโพสต์ที่เลื่อนขึ้นและลงบน SE หากนั่นหมายถึงเป็นเว็บไซต์ที่ดูเป็นมืออาชีพและคุณยังต้องการการเปลี่ยนผ่านให้ใช้สิ่งที่รอบคอบมากขึ้นเช่นจางหายไปหรือจางหายไป
NullUserException

คำตอบ:


96

ภาษาที่เป็นผู้ใหญ่จะถูกกำหนดโดยสเปคและคอมไพเลอร์หรือล่ามพยายามที่จะปฏิบัติตามมาตรฐานที่กำหนดไว้ในสเปคนั้น แต่พวกเขาไม่ค่อยประสบความสำเร็จเว้นแต่จะมีการกำหนดมาตรฐานโดยผู้เขียนภาษา

คุณสามารถค้นหามาตรฐานC ++ 2003 , ข้อกำหนดC # 4 , ข้อกำหนดJava 7และออนไลน์อื่น ๆ อีกมากมาย หลายคนมีหมายเลขมาตรฐาน ECMA หรือ ISO เหล่านี้เป็นเพียงองค์กรที่คุณสามารถลงทะเบียนมาตรฐานและทำให้เป็นทางการมากขึ้น

ทับทิมได้ทำสิ่งต่าง ๆ ในอดีตที่แตกต่างกันเล็กน้อยมีชุดทดสอบที่ปฏิบัติการได้เป็นสเปค ดังนั้นหากคุณต้องการที่จะเขียนล่ามและเรียกว่ารูบีมาตรฐานคุณเพียงแค่ต้องสร้างล่ามที่ผ่านการทดสอบทั้งหมดเหล่านั้น แต่ถึงอย่างนั้นทับทิมก็ยังมีแนวโน้มที่จะกลายเป็นข้อมูลจำเพาะที่เป็นทางการมากขึ้นในที่สุด

Javascript นั้นไม่แตกต่างกันยกเว้นในทางที่วิวัฒนาการมา

Javascript ถูกสร้างขึ้นครั้งแรกโดย Netscape พวกเขาเรียกมันว่า LiveScript แต่ดูเหมือนว่า Java และพวกเขาได้ตกลงกับ Sun ในชื่อซึ่งได้ประโยชน์ทั้งด้านการตลาดของ Netscape และ Java Microsoft มี VBScript และ (ด้วยเหตุผลที่อาจทำให้สูญเสียการคาดเดา) โดยทั่วไปจะคัดลอก Javascript แต่ชื่อนี้เป็นของ Sun ดังนั้นพวกเขาจึงเรียกมันว่า JScript

แต่ JScript ในขณะที่เป็นคล้ายกับจาวาสคริปต์ในไวยากรณ์ทำมากของการใช้ COM - ตัวอย่างเช่น IE5 และ 6 instantiate วัตถุ XMLHttpRequest new ActiveXObject("Microsoft.XMLHTTP");ใช้

ดังนั้นภาษาถิ่นของ Javascript จึงขนานกันคล้าย ๆ กัน แต่แตกต่างกัน เมื่อเวลาผ่านไปกลุ่มต่างๆที่เป็นเจ้าของเบราว์เซอร์ที่มีส่วนแบ่งตลาดน้อยกว่า IE ได้พยายามสร้างมาตรฐานให้กับภาษา จนถึง V8

V8 เร็วมาก มันกำหนดมาตรฐานการตลาดใหม่ทั้งหมด มันทำให้ทุกอย่างดูไม่ดี

และจากคดีต่อต้านการผูกขาดหลายรายการกับ Microsoft นั้น IE กำลังสูญเสียส่วนแบ่งการตลาด ทันใดนั้นมันเป็นความสนใจของ Microsoft ที่จะสนับสนุนมาตรฐาน เรายังไม่ได้อยู่ที่นั่น แต่มันกำลังถูก

ในขณะเดียวกัน V8 เป็นโอเพนซอร์สซึ่งได้รับอนุญาตให้คนที่จะเริ่มคิดขึ้นมาใช้ใหม่สำหรับ Javascript parser รวดเร็วเช่นNode.js

แต่เพื่อกลับไปที่คำถามของคุณ: Javascript คืออะไร เป็นชื่อสามัญ (และดั้งเดิม) สำหรับ ECMAScript ซึ่งเป็นข้อกำหนดสำหรับภาษาต้นแบบทั่วไป แต่ไม่เพียง แต่ใช้สำหรับการนำทางและจัดการโมเดลวัตถุโดเมนใน broswer

ECMA-262 เป็นเพียงคำจำกัดความมาตรฐานเช่น ECMA-334 เป็นคำจำกัดความมาตรฐานสำหรับ C # ECMAScript เป็นชื่อเดียวที่ทุกฝ่ายที่สนใจสามารถตกลงกันได้ในปี 99 เมื่อมีการเขียน ECMA-262


7
ถ้าฉันสามารถโหวตคำตอบของคุณมากกว่าหนึ่งครั้งฉันจะทำอย่างนั้น :-) นี่จะช่วยทำให้บางอย่างชัดเจนยิ่งขึ้น การเปรียบเทียบคอมไพเลอร์ C ทำให้สถานการณ์เป็นเพียงเล็กน้อยที่เข้าใจได้ :-) ยกเว้น JavaScript จะไม่ถูกรวบรวมไปยังไบนารีและผู้ใช้จะเห็นสคริปต์ที่ไม่ใช่ / กึ่งหน้าที่ ดังนั้นฉันต้องเข้าใจว่าฉันไม่สามารถสร้างหน้าเว็บให้เป็นมาตรฐานและหวังว่าจะสามารถใช้งานได้กับเบราว์เซอร์ทั้งหมดเหมือนกันหรือไม่ (ยังเป็นคำผ่าตัด)
ลอร์ดโลห์

1
@LordLoh ถูกต้อง. แต่คุณสามารถอนุญาตให้ไลบรารีอย่าง jQuery และ Prototype แยกความแตกต่างออกไปให้คุณได้
pdr

โพสต์นี้และการวิจัยเริ่มต้นขึ้นเมื่อแอนิเมชั่น jQuery ไม่ทำงานบน IE9 และฉันโกหกความคิดของแคมเปญ anybrowser.org และหวังว่าฉันจะสามารถติดอยู่กับมาตรฐานได้ HTML5 / CSS3 / JS JS ลงเอยด้วยการเป็นบั๊กในฝากระโปรงของฉัน
ลอร์ดโลห์

1
@LordLoh ฉันจะไม่แน่ใจว่านั่นเป็นความผิดของ jQuery เพียงแค่เหลือบมองอย่างรวดเร็วแสดงให้เห็นถึงปัญหาเกี่ยวกับ HTML ของคุณ (เช่นคำพูดที่ขาดหายไป) และเมื่อคุณย่อขนาดจาวาสคริปต์ของคุณให้สั้นลงอาจมีผลลัพธ์แปลก ๆ ถ้าคุณไม่ได้แม่นยำมากนัก ฉันจำปัญหาเมื่อนานมาแล้วที่ฉันพลาดเซมิโคลอนและมันล้มเหลวหลังจากการบีบอัดในเบราว์เซอร์หลัก ๆ jQuery ค่อนข้างเสถียรและควรทำงานได้ดีกับ IE9
pdr

5
@LordLoh console.log เป็นปัญหาของคุณ มันไม่ทำงานจนกว่าคุณจะเปิดแถบเครื่องมือผู้พัฒนา (และสร้างวัตถุ "คอนโซล")
pdr

23

Javascript เป็นการใช้งานทั่วไปของ ECMAScript มันเป็นสถานการณ์ที่คล้ายกันมากกับครอบครัวของโครงการ ใน Scheme คุณมีข้อกำหนดอย่างเป็นทางการสูง รุ่นปัจจุบันคือ R6RS แม้ว่า R5RS จะเป็นมาตรฐานที่นำมาใช้บ่อยกว่าของโพสต์นี้ การใช้งานจะกระจัดกระจายกว่า ECMAScript เนื่องจากอายุของโครงการและปรัชญาทั่วไป

จาวาสคริปต์ที่เกิดขึ้นเป็นเรื่องธรรมดาในขณะนี้ส่วนใหญ่เนื่องจากการเติบโตอย่างมากในส่วนแบ่งการตลาดของ Mozilla Firefox และ Google Chrome มันได้รับการตั้งหลักกับ Netscape Navigator ซึ่งในที่สุดก็เปลี่ยนเป็นเบราว์เซอร์ Mozilla และจากนั้นเป็น Firefox (และ Iceweasel ถ้าคุณทำงานกับฝูงชน Scheme)

ตอนนี้ที่นี่เป็นสถานที่ที่จะได้รับเล็ก ๆ น้อย ๆ ประสิทธิภาพของ Javascript ส่วนใหญ่มาจากตัวแยกวิเคราะห์และเอ็นจิ้นที่รัน นี่คือสิ่งที่เห็นความแตกต่างที่แท้จริงระหว่างเบราว์เซอร์ Spidermonkey ใช้งาน Javascript ต่างจาก V8 Javascript ยังคงมีจุดหยาบเช่นการขาดไลบรารีทั่วไปอย่างสมบูรณ์แม้ว่าจะใช้งานได้

ดังนั้นหาก Javascript เป็น C ++ ดังนั้น ECMAScript จะเป็น C ++ 11 โดยที่ UNIX และ G ++ จะใกล้เคียงกับ "มาตรฐาน" มากที่สุดในขณะที่ C ++ สำหรับ. NET และ Objective C ++ นั้นอยู่ไกลจาก Actionscript จาก ECMAScript

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.