JavaScript Overview

by 1 contributor:

This translation is incomplete. Please help translate this article from English.

บทนี้เป็นการแนะนำจาวาสคริปต์และแนวคิดพื้นฐาน

จาวาสคริปต์คืออะไร ?

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

แกนของจาวาสคริปต์ ประกอบด้วยกลุ่มของอ็อบเจกต์ที่สำคัญ เช่น Array, Date และ Math โดยมีชุดภาษาหลักเช่น Operator, Control Structure, และ Statement ต่างๆ โดยแกนของจาวาสคริปต์นั้นสามารถต่อขยายเพิ่มเติมให้ทำงานได้หลากหลายมากขึ้นด้วยการเสริมอ็อบเจกต์ใหม่เข้าไป ดังตัวอย่างต่อไปนี้: 

  • จาวาสคริปต์ฝั่ง Client ขยายความสามารถของภาษาหลักด้วยการเพิ่มอ็อบเจกต์ที่ควบคุมเบราว์เซอร์ (เนวิเกเตอร์ หรือเว็บเบราว์เซอร์อื่น) และ Document Object Model (DOM) ตัวอย่างเช่น ส่วนขยายฝั่ง Client ทำให้แอปพลิเคชันสามารถจัดวางส่วนประกอบต่างๆลงในหน้าเว็บฟอร์ม และตอบสนองต่อเหตุการณ์ที่ผู้ใช้กระทำเช่น กดเม้าส์, ป้อนข้อมูลลงฟอร์ม, และเปลี่ยนหน้าข้อมูลได้
  • จาวาสคริปต์ฝั่ง Server ขยายความสามารถของภาษาหลักด้วยการเพิ่มอ็อบเจกต์ที่จำเป็นต่อการทำงานของจาวาสคริปต์บน Server ตัวอย่างเช่น ส่วนขยายฝั่ง Server ทำให้แอปพลิเคชันสามารถติดต่อกับระบบฐานข้อมูลได้, เรียกใช้ข้อมูลจากหลายส่วนของแอปพลิเคชันได้, หรือจัดการไฟล์บน Server ได้

ด้วยการทำงานของ LiveScript ในจาวาสคริปต์ คุณสามารถทำให้โปรแกรมจาวาและจาวาสคริปต์ติดต่อสื่อสารระหว่างกันได้ โดยในจาวาสคริปต์ คุณสามารถสร้างอ็อบเจกต์จาวาแล้วเรียกใช้เมธอดและฟิลด์แบบ public ได้ ส่วนในโค้ดจาวาคุณก็สามารถเรียกใช้อ็อบเจกต์จาวาสคริปต์, เมธอด, และคุณสมบัติต่างๆได้เช่นกัน

Netscape เป็นผู้สร้างจาวาสคริปต์และนำจาวาสคริปต์มาใช้ครั้งแรกใน Netscape เบราว์เซอร์

จาวาสคริปต์และจาวา

จาวาสคริปต์และจาวามีความคล้ายคลึงกันในบางเรื่อง แต่แตกต่างกันอย่างชัดเจนในหลายเรื่อง ภาษาจาวาสคริปต์คล้ายกับจาวา แต่ไม่มีการประกาศชนิดข้อมูล และไม่ตรวจสอบการกำหนดค่าข้อมูล จาวาสคริปต์ใช้รูปแบบนิพจน์, การตั้งชื่อ, และ control-flow ตามจาวาเป็นส่วนใหญ่ ซึ่งเป็นเหตุผลว่าทำไมถึงถูกเปลี่ยนชื่อจาก LiveScript มาเป็นจาวาสคริปต์

ไม่เหมือนกับจาวาที่คลาสต่างๆต้องมาจากการคอมไพล์โปรแกรม, ระบบการทำงานของจาวาสคริปต์ใช้ข้อมูลพื้นฐานเพียงไม่กี่ชนิดคือ ตัวเลข, ตรรกะ, และสตริง เท่านั้น โดยจาวาสคริปต์ใช้วิธีสร้าง อ็อบเจกต์แบบโปรโตไทป์ แทนที่จะเป็นแบบคลาสที่นิยมใช้กันมาก ซึ่งวิธีการแบบโปรโตไทป์นี้ช่วยให้อ็อบเจกต์ที่สืบทอดมามีความแตกต่างกันได้ (dynamic inheritance) ทั้งนี้จาวาสคริปต์ยังรองรับการใช้งานฟังก์ชันโดยไม่จำเป็นต้องประกาศไว้ล่วงหน้า และสามารถกำหนดให้ฟังก์ชันเป็นคุณสมบัติของอ็อบเจกต์และทำงานได้โดยไม่ต้องระบุชนิดข้อมูล

จาวาสคริปต์เป็นภาษาที่ค่อนข้างไร้รูปแบบเมื่อเทียบกับจาวา คุณไม่จำเป็นต้องประกาศตัวแปร, คลาส, และเมธอด ไม่ต้องห่วงว่าเมธอดจะเป็นแบบ pubilc, private, หรือ protected ไม่ต้องเขียน interface ไม่ต้องระบุชนิดข้อมูลของ ตัวแปร, พารามิเตอร์, และค่าที่คืนจากฟังก์ชัน

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

ในทางตรงกันข้าม, จาวาสคริปต์ทำให้ง่ายขึ้นโดยใช้แนวทางจากภาษาที่มีขนาดเล็กกว่าและแปรเปลี่ยนชนิดข้อมูลได้เช่น HyperTalk และ dBASE ซึ่งภาษาสคริปต์เหล่านี้ให้เครื่องมือสำหรับเขียนโปรแกรมกับกลุ่มผู้ใช้งานในวงกว้าง เพราะความง่ายของภาษา, ฟังก์ชันพิเศษที่พร้อมใช้งาน, และการสร้างอ็อบเจกต์แบบง่ายๆ

ตาราง 1.1 จาวาสคริปต์เปรียบเทียบกับจาวา
จาวาสคริปต์ จาวา

อิงอ็อบเจกต์, ไม่มีความแตกต่างของชนิดอ็อบเจกต์สืบทอดด้วยวิธีการโปรโตไทป์ , เพิ่ม คุณสมบัติและเมธอดไปที่อ็อบเจกต์ใด้ตลอดเวลา

อิงคลาส, อ็อบเจกต์ถูกแบ่งเป็นคลาสและ instance, สืบทอดผ่านทางลำดับชั้นของคลาส, ไม่สามารถเพิ่ม คุณสมบัติและเมธอดไปที่คลาสและ instance ได้ตลอดเวลา

ไม่จำเป็นต้องประกาศชนิดข้อมูล (dynamic typing)

จำเป็นต้องประกาศชนิดข้อมูล (static typing)

ไม่สามารถเขียนลง hard disk ได้โดยอัตโนมัติ

ไม่สามารถเขียนลง hard disk ได้โดยอัตโนมัติ

ถ้าต้องการข้อมูลเพิ่มเติมเกี่ยวกับข้อแตกต่างระหว่างจาวาสคริปต์กับจาวา, ให้ดูที่บท Details of the Object Model.

จาวาสคริปต์และข้อกำหนด ECMAScript

Netscape คิดค้นจาวาสคริปต์และนำมาใช้เป็นครั้งแรกใน Netscape เบราว์เซอร์ อย่างไรก็ตาม Netscape ทำงานร่วมกับ Ecma International — สมาคมจัดทำมาตรฐานข้อมูลและระบบการสื่อสารแห่งยุโรป (ECMA เดิมย่อมาจาก European Computer Manufactures Association) เพื่อจัดทำภาษาจาวาสคริปต์ให้เป็นมาตรฐานสากล ที่เรียกว่า EcmaScript โดยให้สามารถทำงานได้เหมือนกันในทุกแอปพลิเคชันที่รองรับมาตรฐานนี้ บริษัทใดก็ตามสามารถใช้มาตรฐานเปิดนี้พัฒนาจาวาสคริปต์ของตัวเองได้ โดยมาตรฐาน EcmaScript นี้อยู่ในข้อกำหนด ECMA-262

มาตรฐาน ECMA-262 นี้ถูกรับรองโดย ISO (International Organization for Standardization) ตาม ISO-16262 ซึ่งคุณสามารถค้นหา เอกสาร PDF ของ ECMA-262 (ล้าสมัยแล้ว) ได้จากเว็บไซต์ Mozilla และยังค้นหาได้ที่ เว็บไซต์ของ Ecma International โดยข้อกำหนด ECMAScript นี้ไม่ได้กล่าวถึง Document Object Model (DOM) ที่จัดทำมาตรฐานโดย World Wide Web Consortium (W3C) โดยที่ DOM จะกำหนดวิธีการใช้อ็อบเจกต์เอกสาร HTML ในสคริปต์

ความสัมพันธ์ระหว่างเวอร์ชันจาวาสคริปต์และ ECMAScript รุ่นต่างๆ

Netscape ทำงานอย่างใกล้ชิดกับ Ecma International เพื่อสร้างมาตรฐาน ECMAScript (ECMA-262) โดยข้อมูลในตารางต่อไปนี้กล่าวถึงความสัมพันธ์ระหว่างเวอร์ชันจาวาสคริปต์และ ECMAScript รุ่นต่างๆ

ตาราง1.2 เวอร์ชันจาวาสคริปต์และ ECMAScript รุ่นต่างๆ
เวอร์ชันจาวาสคริปต์ ความสัมพันธ์กับรุ่น ECMAScript
จาวาสคริปต์ 1.1 ECMA-262, Edition 1 ยึดตาม JavaScript 1.1.
จาวาสคริปต์ 1.2 ECMA-262 ยังไม่เสร็จเมื่อจาวาสคริปต์ 1.2 ถูกเผยแพร่ โดยจาวาสคริปต์ 1.2 ยังเข้ากันได้ไม่สมบูรณ์กับ ECMA-262, Edition 1, ด้วยเหตุผลต่อไปนี้:
  • Netscape ได้พัฒนาคุณสมบัติเพิ่มเติมในจาวาสคริปต์ 1.2 ที่ไม่ได้รวมไว้ใน ECMA-262.
  • ECMA-262 เพิ่มคุณสมบัติใหม่สองอย่าง: การใช้งานหลายภาษาด้วยอักษร Unicode, และปรับให้มีการทำงานที่เหมือนกันในทุกระบบ โดยในจาวาสคริปต์ 1.2 จะมีหลายคุณสมบัติที่ทำงานได้เพียงบางระบบและมีการทำงานที่แตกต่างกัน เช่น อ็อบเจกต์ Date  
จาวาสคริปต์ 1.3

จาวาสคริปต์ 1.3 มีความเข้ากันได้ทั้งหมดกับ ECMA-262, Edition 1
ซึ่งจาวาสคริปต์ 1.3 ได้แก้ไขความไม่เข้ากันระหว่างจาวาสคริปต์ 1.2 กับ ECMA-262 แล้ว โดยยังคงความสามารถเพิ่มเติมที่มีในจาวาสคริปต์ 1.2 ไว้ ยกเว้น == และ != ที่ได้เปลี่ยนตาม ECMA-262 แล้ว

จาวาสคริปต์ 1.4

จาวาสคริปต์ 1.4 มีความเข้ากันได้ทั้งหมดกับ ECMA-262, Edition 1.
โดยที่เวอร์ชัน 3 ของ ECMAScript ยังไม่แล้วเสร็จเมื่อมีการเผยแพร่จาวาสคริปต์ 1.4

จาวาสคริปต์ 1.5 จาวาสคริปต์ 1.5 มีความเข้ากันได้ทั้งหมดกับ ECMA-262, Edition 3.
หมายเหตุ: ECMA-262, Edition 2 ประกอบด้วยการแก้ไขในประเด็นย่อยและแก้ข้อผิดพลาดใน Edition 1 โดย ECMAScript ตัวล่าสุดที่เผยแพร่จากทีมงาน TC39 ของ Ecma International คือ ECMAScript Edition 5.1

โดย JavaScript Reference จะแสดงคุณสมบัติของภาษาที่มีความเข้ากันได้กับ ECMAScript

ทั้งนี้จาวาสคริปต์จะมีคุณสมบัติที่อยู่นอกเหนือข้อกำหนดใน ECMAScript อยู่เสมอ นั่นคือจาวาสคริปต์คงความเข้ากันได้กับ ECMAScript และมีคุณสมบัติเพิ่มเติมให้  

เอกสารจาวาสคริปต์ เทียบกับ ข้อกำหนด ECMAScript

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

เอกสาร ECMAScript ไม่ได้มีไว้เพื่อช่วยโปรแกรมเมอร์ ควรใช้เอกสารจาวาสคริปต์ถ้าต้องการข้อมูลในการเขียนสคริปต์

จาวาสคริปต์ และถ้อยคำใน ECMAScript

ข้อกำหนดใน ECMAScript ใช้ถ้อยคำและไวยากรณ์ที่โปรแกรมเมอร์จาวาสคริปต์อาจดูแล้วไม่คุ้นเคย แม้ว่ารายละเอียดของภาษาอาจแตกต่างไปใน ECMAScript แต่ตัวภาษายังคงเหมือนเดิม โดยจาวาสคริปต์รองรับคุณสมบัติทั้งหมดในข้อกำหนดของ ECMAScript อยู่แล้ว

เอกสารจาวาสคริปต์อธิบายลักษณะของภาษาที่เหมาะสมต่อโปรแกรมเมอร์จาวาสคริปต์ ตัวอย่างเช่น

  • อ็อบเจกต์ส่วนกลางไม่ได้นำมากล่าวในเอกสารจาวาสคริปต์ เพราะคุณไม่ได้ใช้มันโดยตรง ส่วนเมธอดและคุณสมบัติของอ็อบเจกต์ส่วนกลางที่คุณใช้ถูกนำมากล่าวในเอกสารจาวาสคริปต์ แต่เรียกใหม่ว่า ฟังก์ชันและคุณสมบัติขั้นนอกสุด
  • constructor แบบไม่มีพารามิเตอร์ (จำนวน argument เป็นศูนย์) ที่ใช้กับตัวเลขและสตริง ไม่ได้นำมากล่าวในเอกสารจาวาสคริปต์ เพราะผลลัพธ์ที่ได้แทบนำมาใช้อะไรไม่ได้ โดย constructor ที่ไม่มี argument ของตัวเลขจะสร้างค่า +0 ส่วน constructor ที่ไม่มี argument ของสตริงจะสร้างค่าเป็น "" (สตริงว่าง)

Document Tags and Contributors

Contributors to this page: Zarazi
Last updated by: Zarazi,