ประเภทของตัวแปรเอาตาย ECMAScript
- หน้าก่อนหน้า การเปลี่ยนประเภท ECMAScript
- หน้าต่อไป ประกายเพียงหนึ่งหลักฐาน
คลาสประเภทอ้างอิงมักเรียกว่า 'คลาส' หรือ 'class'
คู่มือนี้จะอธิบายคลาสประเภทอ้างอิงที่ถูกกำหนดโดย ECMAScript มากมาย
คลาสประเภทอ้างอิง
คลาสประเภทอ้างอิงมักเรียกว่า 'คลาส' หรือ 'class' หมายความว่าเมื่อเจอค่าอ้างอิง ก็คือวัตถุที่จะทำการจัดการ
คู่มือนี้จะอธิบายคลาสประเภทอ้างอิงที่ถูกกำหนดโดย ECMAScript มากมาย
จากนี้จะเน้นการอธิบายเกี่ยวกับคลาสประเภทอ้างอิงที่มีความเกี่ยวข้องอย่างใกล้ชิดกับประเภทข้อมูลตัวเลขที่ได้ถูกอธิบายไปแล้ว
แจ้งเตือน:จากทางความหมายที่เก่าแก่ ECMAScript ไม่มีคลาสแท้จริง จริงๆ นอกจากการระบุว่าไม่มีคลาส ใน ECMA-262 ก็ไม่มีคำ 'คลาส' อยู่ โดยที่ ECMAScript ได้มีการเรียก 'การกำหนดวัตถุ' ที่เท่าเทียมต่อคลาสในภาษาอื่นๆ ของการออกแบบโปรแกรม
คำแนะนำ:ตัวอนุสรณ์นี้จะใช้วลี "วัตถุ"
วัตถุสร้างขึ้นโดยการใช้นักแปลงแบบ new กับชื่อของวัตถุที่ต้องการสร้างตัวอย่าง ตัวอย่างรหัสดังนี้สร้างตัวอย่างของวัตถุ Object
var o = new Object();
สัญลักษณ์นี้คล้ายกับภาษา Java อย่างไร แต่เมื่อมีหลายตัวอักษรเพิ่มเติม ECMAScript ต้องการใช้ตัวเปิดบรรทัด ถ้าไม่มีตัวอักษรเพิ่มเติม ตัวเปิดบรรทัดสามารถละเลยได้ ตัวอย่างรหัสดังนี้
var o = new Object;
แจ้งเตือน:ถึงแม้ว่าตัวเลขไม่จำเป็นต้องใช้ตัวเปิดบรรทัด แต่เพื่อหลีกเลี่ยงความสับสน ยังคงควรใช้ตัวเปิดบรรทัดเสมอ
คำแนะนำ:เราจะหมายจะเข้าใจลึกเข้าใจวัตถุและพฤติกรรมของมันในบทนี้
จุดสำคัญของบทนี้คือประเภทของวัตถุที่มีรูปแบบของประเภทแรกที่มีคุณค่าที่เหมือนกัน
Object ตัวนี้
วัตถุ Object ไม่มีประโยชน์มากนัก แต่ก่อนที่จะเข้าใจวัตถุอื่นๆ นั้น ควรเข้าใจวัตถุนี้ไปก่อน เพราะวัตถุ Object ใน ECMAScript คล้ายกับ java.lang.Object ใน Java ทุกวัตถุใน ECMAScript ทุกตัวติดตามมาจากวัตถุนี้ คุณค่าและวิธีที่มีใน Object จะปรากฏขึ้นในวัตถุอื่นๆ ดังนั้น หากเข้าใจวัตถุ Object แล้ว จะเข้าใจวัตถุอื่นๆ ได้ดียิ่งขึ้น
วัตถุ Object มีคุณค่าต่อไปนี้
- constructor
- Reference (pointer) สำหรับฟังก์ชันที่สร้างวัตถุ สำหรับวัตถุ Object นี้นั้นมีทิศทางไปยังฟังก์ชัน Object() ต้นตอน
- Prototype
- Reference สำหรับโปรโตไทป์ของวัตถุ สำหรับวัตถุทุกตัว มันจะกลับค่าโดยเริ่มต้นโดยอ้างอิง Object ตัวนี้
วัตถุ Object ยังมีวิธีที่น่าสนใจเพิ่มเติม
- hasOwnProperty(property)
- ตรวจสอบว่าวัตถุมีคุณค่าของแฟ้มเฉพาะหรือไม่ ต้องใช้ตัวอักษรที่เป็นชื่อของแฟ้ม ตัวอย่าง (เช่น o.hasOwnProperty("name"))
- IsPrototypeOf(object)
- ตรวจสอบว่าวัตถุนี้เป็นโปรโตไทป์ของวัตถุอื่นหรือไม่
- PropertyIsEnumerable
- ตรวจสอบว่าคุณค่าของอาทิตย์นี้สามารถใช้งานด้วยคำสั่ง for...in ได้หรือไม่
- ToString
- คืนค่าสตริงที่เป็นตัวแทนทางสตริงของวัตถุ สำหรับวัตถุ Object ตาม ECMA-262 ไม่ได้ระบุค่านี้ ดังนั้นความแตกต่างของ ECMAScript ที่มีอยู่มีค่าที่แตกต่างกัน
- ValueOf
- คืนค่าที่เหมาะสมที่สุดสำหรับวัตถุนี้
หมายเหตุ:ทุกคุณสมบัติและวิธีที่ระบุไว้ดังนี้จะถูกทดแทนโดยตัวแปรอื่น
ตัวแปร Boolean
ตัวแปร Boolean คือชนิดของอ้างอิงของประเภทตัวเลขตัวเดิม Boolean
ในการสร้างตัวแปร Boolean ต้องการใส่ค่า Boolean ที่เป็นตัวเลขตัวเดิมเป็นพารามิเตอร์:
var oBooleanObject = new Boolean(true);
ตัวแปร Boolean จะทำการเข้ามาทดแทนวิธี ValueOf() ของตัวแปร Object และกลับค่าตัวเลขตัวเดิม คือ true และ false วิธี ToString() ก็จะถูกทดแทนและกลับค่าข้อความ "true" หรือ "false"
น่าเสียดายว่าใน ECMAScript ไม่ใช้ตัวแปร Boolean มากนัก แม้ว่าจะใช้ก็ยากที่จะเข้าใจ
ปัญหาทั่วไปมักปรากฏขณะใช้ตัวแปร Boolean ในการแสดงความเป็นจริง Boolean
var oFalseObject = new Boolean(false); var bResult = oFalseObject && true; // ออกที่แสดงค่า true
ในรหัสดังนี้ สร้างตัวแปร Boolean ด้วยค่า false แล้วใช้ค่านี้ทำการ AND กับค่าตัวเลขตัวเดิม true ในการทำการคำนวณ Boolean ค่า false และ true ทำการ AND กันจะได้ผลลัพธ์ false แต่ในบรรทัดนี้คำนวณที่เกิดขึ้นคือ oFalseObject ไม่ใช่ค่า false ของมัน
เช่นเดียวกับที่ได้กล่าวไปแล้วในบทก่อนหน้า ในการแสดงความเป็นจริง Boolean ทุกตัวแปรจะถูกแปลงเป็น true ดังนั้นค่าของ oFalseObject จึงเป็น true หลังจากนั้น true จะทำการ AND กับ true ผลลัพธ์ที่ได้มากันเป็น true
แจ้งเตือน:แม้ว่าคุณควรรู้ถึงความสามารถใช้งานของตัวแปร Boolean แต่ยังคงดีที่จะใช้ค่าตัวเลขตัวเดิม Boolean เพื่อป้องกันปัญหาที่ได้รับการกล่าวถึงในบทนี้
ดู
ถ้าคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับตัวแปร Boolean โปรดเข้าชม: คู่มือความรู้ JavaScript Boolean Object。
ตัวแปร Number
เช่นเดียวกับที่คุณคาดคิดไว้ Number ตัวแปรเป็นชนิดของอ้างอิงของประเภทตัวเลขตัวเดิม ในการสร้างตัวแปร Number ใช้รหัสดังนี้:
var oNumberObject = new Number(68);
คุณควรจะรู้จักตัวแปร Number ที่ได้เจาะจงกับค่าพิเศษ (เช่น Number.MAX_VALUE) ที่ได้รับการอธิบายในบทที่ก่อนหน้านี้ของคร้ง ทุกค่าพิเศษเป็นคุณสมบัติสถานีตัวแปร Number
เพื่อได้รับค่าตัวเลขตัวเดิมของตัวแปร Number ต้องใช้วิธี valueOf() ดังนี้:
var iNumber = oNumberObject.valueOf();
ต้องการบอกว่า ตัวเลข Number มีวิธี toString() ซึ่งได้รับการอธิบายละเอียดในบทบาทการเปลี่ยนแปลงประเภท
นอกจากวิธีที่สืบทอดมาจาก Object นอกจากนี้ ตัวเลข Number ยังมีวิธีพิเศษหลายวิธีที่ใช้ในการจัดการตัวเลข
toFixed() มีการกลับค่าที่มีเศษทศนิยมที่กำหนดล่วงหน้า
toFixed() มีการกลับค่าที่มีเศษทศนิยมที่กำหนดล่วงหน้าในรูปแบบของตัวเลข ตัวอย่างเช่น:
var oNumberObject = new Number(68); alert(oNumberObject.toFixed(2)); // ออกมาเป็น "68.00"
ในนี้ ตัวแปรของ toFixed() คือ 2 หมายความว่าควรแสดงเศษทศนิยมสองตัว วิธีนี้กลับค่าในรูปแบบ "68.00" โดยใช้ 0 ที่มีช่องว่าง สำหรับใช้ในโปรแกรมเกี่ยวกับการจัดการเงิน วิธีนี้สามารถแสดงตัวเลขที่มีเศษทศนิยมจาก 0 ถึง 20 ตัว ค่าที่เกินนี้จะทำให้เกิดข้อผิดพลาด
toExponential() มีการกลับค่าที่มีรูปแบบกำหนดล่วงหน้าหรือรูปแบบคณิตศาสตร์
มีวิธีอื่นเกี่ยวกับการรูปแบบตัวเลขอีกวิธีหนึ่งคือ toExponential() ซึ่งกลับค่าในรูปแบบของตัวเลขที่แสดงด้วยระบบนับทางวิทยาศาสตร์
เช่นเดียวกับ toFixed() มีตัวแปรหนึ่งที่กำหนดจำนวนหลักที่ต้องการออกมาเป็นตัวเลขเศษ ตัวอย่างเช่น:
var oNumberObject = new Number(68); alert(oNumberObject.toExponential(1)); // ออกมาเป็น "6.8e+1"
ผลลัพธ์ของโค้ดนี้คือ "6.8e+1" ซึ่งได้รับการอธิบายไปแล้ว มันแสดงว่า 6.8x101ปัญหาคือหากไม่ทราบที่จะใช้รูปแบบใด (รูปแบบกำหนดล่วงหน้าหรือรูปแบบคณิตศาสตร์) ในการแสดงตัวเลข ใช้ toPrecision() ได้
toPrecision() มีการกลับค่าที่มีรูปแบบกำหนดล่วงหน้าหรือรูปแบบคณิตศาสตร์
toPrecision() มีการกลับค่าที่มีรูปแบบกำหนดล่วงหน้าหรือรูปแบบคณิตศาสตร์โดยมีเพียงค่าที่มีความหมายสูงสุด มีตัวแปรหนึ่ง คือจำนวนหลักที่ใช้ในการแสดงตัวเลข (ไม่รวมตัวเลขคณิตศาสตร์)
var oNumberObject = new Number(68); alert(oNumberObject.toPrecision(1)); // ออกมาเป็น "7e+1"
งานของโค้ดนี้คือใช้หลักเดียวเพื่อแสดงตัวเลข 68 ผลลัพธ์คือ "7e+1" แสดงในรูปแบบอื่นคือ 70 ยืนยันว่า toPrecision() มีการปรับเปลี่ยนตัวเลข
var oNumberObject = new Number(68); alert(oNumberObject.toPrecision(2)); // ออกมาเป็น "68"
ต้องการบอกว่า ออกมาเป็น "68" นั้นเพราะนั่นเป็นการแสดงค่าที่แน่นอนของตัวเลขนี้ แต่ว่าจะเป็นไรหากจำนวนหลักที่กำหนดมามากกว่าที่จำเป็น?
var oNumberObject = new Number(68); alert(oNumberObject.toPrecision(3)); // ออก "68.0"
ในกรณีนี้ toPrecision(3) คล้ายกับ toFixed(1) ออกมาเป็น "68.0"
toFixed() และ toExponential() และ toPrecision() วิธีจะกระทำการปรับเปลี่ยนเพื่อที่จะแสดงจำนวนด้วยเลขทศนิยมที่ถูกต้องด้วยจำนวนทศนิยมที่กำหนด
คำแนะนำ:เหมือนกับ Boolean ตัวแปร ตัวแปร Number มีความสำคัญมาก แต่ควรใช้น้อยที่สุดเพื่อป้องกันปัญหาที่อาจเกิดขึ้น ใช้ตัวแปรเลขแบบเดิมทุกทีที่เป็นไปได้
ดู
ถ้าต้องการข้อมูลเพิ่มเติมเกี่ยวกับ Number ตัวแปร โปรดเข้าถึง คู่มือความรู้ JavaScript Number Object。
String ตัวแปร
String ตัวแปรเป็นตัวแสดงของประเภทตัวแปร String ซึ่งสร้างด้วยวิธีต่อไปนี้:
var oStringObject = new String("hello world");
valueOf() และ toString() วิธีของ String ตัวแปรจะกลับคืนค่าตัวแปรประเภท String แบบเดิม:
alert(oStringObject.valueOf() == oStringObject.toString()); // ออก "true"
ถ้าปฏิบัติรหัสนี้ ออกคือ "true" แสดงว่าค่าที่กำหนดนี้ตรงแท้
หมายเหตุ:String ตัวแปรเป็นหนึ่งในประเภทของตัวแปรที่ซับซ้อนใน ECMAScript และในบทนี้ จุดสำคัญเพียงแค่ความงามของ String ตัวแปร ความงามที่สูงกว่านี้ อ่านเพิ่มเติมในบทที่เกี่ยวข้องของนี้ หรือดู คู่มือความรู้ JavaScript String Object。
คุณสมบัติ length
String ตัวแปรมีคุณสมบัติ length ซึ่งเป็นจำนวนตัวอักษรในข้อความ:
var oStringObject = new String("hello world"); alert(oStringObject.length); // ออก "11"
ตัวอย่างนี้ออก "11" คือจำนวนตัวอักษรใน "hello world" ในความคิดว่า แม้ว่าข้อความจะมีตัวอักษรสองบิต (เทียบกับ ASCII ตัวอักษรเพียงหนึ่งบิต) แต่ตัวอักษรทุกตัวยังคาดว่าเป็นตัวอักษรเดี่ยว
charAt() และ charCodeAt() วิธี
String ตัวแปรมีวิธีมากมาย
สุดท้ายนี้ charAt() และ charCodeAt() วิธีนี้เข้าถึงตัวอักษรเดี่ยวในข้อความ ทั้งสองวิธีนี้มีตัวแปรค่าหนึ่ง ซึ่งคือตำแหน่งของตัวอักษรที่ต้องการปฏิบัติ
charAt() วิธีนี้กลับคืนข้อความที่มีตัวอักษรที่ตำแหน่งที่กำหนด:
var oStringObject = new String("hello world"); alert(oStringObject.charAt(1)); // ออก "e"
ในตัวอักษร "hello world" ตัวอักษรที่ตำแหน่ง 1 คือ "e" ในบทความ "ECMAScript ประเภทตัวประกอบแรก" เราได้พูดถึงว่าตำแหน่งของตัวอักษรแรกคือ 0 และตำแหน่งของตัวอักษรที่สองคือ 1 ตามลำดับ ดังนั้นการเรียกใช้ charAt(1) จะคืนค่า "e" และไม่ใช่ "e"
ถ้าต้องการหาไม่ใช่ตัวอักษรแต่คือรหัสอักษร สามารถเรียกใช้วิธี charCodeAt() ได้:
var oStringObject = new String("hello world"); alert(oStringObject.charCodeAt(1)); // ออก "101"
ตัวอย่างนี้จะออก "101" ซึ่งคือรหัสอักษรของตัวอักษร "e" ในตัวอักษรต่ำ:
วิธี concat()
ต่อมาคือวิธี concat() ที่ใช้ในการเชื่อมต่อข้อความหนึ่ง หรือหลายตัวอักษรไปกับค่าต้นตัวอักษรของ String โดยไม่เปลี่ยนแปลงตัวองค์ประกอบ String ในตอนนี้:
var oStringObject = new String("hello "); var sResult = oStringObject.concat("world"); alert(sResult); // ออก "hello world" alert(oStringObject); // ออก "hello "
ในบรรยายรหัสของเรานี้ การเรียกใช้วิธี concat() คืนค่า "hello world" แต่ตัวองค์ประกอบ String ยังคงเป็น "hello " อยู่เหมือนเดิมดีเพราะเหตุผลดังกล่าว จึงมักใช้สัญญาณบวก (+) ในการเชื่อมต่อข้อความ เพราะรูปแบบนี้ระบุทางทฤษฎีว่าทำงานอย่างไร:
var oStringObject = new String("hello "); var sResult = oStringObject + "world"; alert(sResult); // ออก "hello world" alert(oStringObject); // ออก "hello "
วิธี indexOf() และ lastIndexOf()
จนถึงที่เราได้หารือวิธีเชื่อมต่อข้อความและวิธีเข้าถึงตัวอักษรเดี่ยวในข้อความ แต่ถ้าเราไม่สามารถระบุได้ว่าในข้อความใด ๆ ว่ามีตัวอักษรนี้มีอยู่หรือไม่ จะเรียกใช้วิธี indexOf() และ lastIndexOf() ในตอนนี้。
วิธี indexOf() และ lastIndexOf() ควรที่จะคืนค่าตำแหน่งของข้อความที่หายในตัวอักษรอื่น ๆ โดยไม่มีค่าเท่ากับ -1 ถ้าไม่พบข้อความ。
จุดแตกต่างของเมธอดเหล่านี้คือ,วิธี indexOf() ดำเนินการค้นหาข้อความในตัวอักษรตั้งแต่ต้นของข้อความ (ตำแหน่ง 0) และวิธี lastIndexOf() ดำเนินการค้นหาข้อความตั้งแต่ท้ายของข้อความ。ตัวอย่าง:
var oStringObject = new String("hello world!"); alert(oStringObject.indexOf("o")); ออก "4" alert(oStringObject.lastIndexOf("o")); ออก "7"
ในที่นี้ ตัวอักษร "o" แรกของซีรีส์ "o" ตั้งอยู่ที่ตำแหน่ง 4 ของ "hello" และตัวอักษร "o" สุดท้ายของซีรีส์ "o" ตั้งอยู่ที่ตำแหน่ง 7 ของ "world" ถ้าซีรีส์ "o" มีตัวอักษร "o" มีเพียงตัวเดียวเท่านั้น จะมีค่าที่คืนมาจาก indexOf() และ lastIndexOf() ที่เหมือนกัน
วิธี localeCompare()
อีกวิธีหนึ่งคือ localeCompare() ที่ใช้เพื่อเรียงลำดับของตัวแปร วิธีนี้มีตัวอย่างเดียวคือ ตัวที่ต้องการเปรียบเทียบ และคืนค่าหนึ่งในสามค่าดังนี้:
- ถ้า String ว่างของคุณมีลำดับตามคำว่าตัวย่ออยู่ก่อนจากตัวแปรที่ใส่ จะคืนค่าลบ
- ถ้า String ว่างของคุณเท่ากับตัวแปรที่ใส่ จะคืนค่า 0
- ถ้า String ว่างของคุณมีลำดับตามคำว่าตัวย่ออยู่หลังจากตัวแปรที่ใส่ จะคืนค่าบวก
หมายเหตุ:ถ้าค่าที่คืนมาเป็นลบ แล้วมักเป็น -1 แต่ค่าที่คืนมาเป็นบวก มักเป็น 1 แต่ค่าที่คืนมาจริงๆ นั้นขึ้นอยู่กับปฏิบัติของสิ่งที่ใช้
ตัวอย่างดังนี้:
var oStringObject = new String("yellow"); alert(oStringObject.localeCompare("brick")); //ออก "1" alert(oStringObject.localeCompare("yellow")); //ออก "0" alert(oStringObject.localeCompare("zoo")); //ออก "-1"
ในบรรยายโค้ดนี้ ตัวแปร string "yellow" ได้เปรียบเทียบกับ 3 ค่า คือ "brick"、"yellow" และ "zoo" สำหรับเรื่องที่มีลำดับตามคำว่าตัวย่อ ตัวแปร "yellow" ตั้งอยู่หลัง "brick" ดังนั้น localeCompare() จะคืนค่า 1; "yellow" เท่ากับ "yellow" ดังนั้น localeCompare() จะคืนค่า 0; "zoo" ตั้งอยู่หลัง "yellow" ดังนั้น localeCompare() จะคืนค่า -1 ใหม่อีกครั้ง localeCompare() จะคืนค่าตามปฏิบัติของสิ่งที่ใช้ ดังนั้นควรเรียกหน้าจอ localeCompare() ในรูปแบบดังนี้:
var oStringObject1 = new String("yellow"); var oStringObject2 = new String("brick"); var iResult = oStringObject1.localeCompare(oStringObject2); if(iResult < 0) { alert(oStringObject1 + " comes before " + oStringObject2); } alert(oStringObject1 + " comes after " + oStringObject2); } alert("The two strings are equal"); }
ด้วยโครงสร้างนี้ สามารถทำให้รหัสเขียนที่นี้ทำงานถูกต้องในทุกประเทศที่มีการรับรอง
ความเฉพาะเจาะจงของวิธี localeCompare() คือ ท้องที่ (locale) ที่เข้าทำงานชี้แจงวิธีที่วิธีนี้ทำงาน ในสหรัฐ ภาษาอังกฤษเป็นภาษามาตรฐานของ ECMAScript วิธี localeCompare() จะแยกในระดับของการเขียนตัวอักษร ตัวอักษรใหญ่จะมีลำดับต่อหลังตัวอักษรเล็ก แต่ในท้องที่อื่น สถานการณ์อาจไม่เหมือนนี้
slice() และ substring()
ECMAScript มีวิธีสองทางเพื่อสร้างค่า String จากส่วนย่อย ก็คือ slice() และ substring() วิธีทั้งสองนี้ที่กลับค่ามาทั้งหมดเป็นส่วนย่อยของ String ที่ต้องการประมวลผล และทั้งสองมีเพียงหนึ่งหรือสองตัวเลขที่เข้าพิสูจน์ ตัวเลขแรกเป็นตำแหน่งของส่วนย่อยที่ต้องการ และตัวเลขที่สอง (ถ้าใช้) เป็นตำแหน่งที่หยุดตัดก่อนตำแหน่งที่กลับค่า (นั่นก็คือ ตำแหน่งที่หยุดตัดไม่ถูกบวกเข้าไปในค่าที่กลับค่า) ถ้าละเลยตัวเลขที่สอง ตำแหน่งหยุดตัดจะเป็นความยาวของ String
เหมือนกับวิธี concat() วิธี slice() และ substring() ไม่เปลี่ยนแปลงค่าของ String ตัวเองเลย พวกเขาเพียงแค่กลับค่า String ตัวเดิม และทำให้ String ตัวเองไม่เปลี่ยนแปลง
var oStringObject = new String("hello world"); alert(oStringObject.slice("3")); //输出 "lo world" alert(oStringObject.substring("3")); //输出 "lo world" alert(oStringObject.slice("3", "7")); //输出 "lo w" alert(oStringObject.substring("3", "7")); //输出 "lo w"
在这个例子中,slice() 和 substring() 的用法相同,返回值也一样。当只有参数 3 时,两个方法返回的都是 "lo world",因为 "hello" 中的第二个 "l" 位于位置 3 上。当有两个参数 "3" 和 "7" 时,两个方法返回的值都是 "lo w"("world" 中的字母 "o" 位于位置 7 上,所以它不包括在结果中)。
ทำไมจะมีสองฟังก์ชันที่มีความทำงานเหมือนกันนี้? ในต้องการเรียล สองฟังก์ชันนี้ไม่ได้เหมือนกัน แต่มีความแตกต่างเล็กน้อยเมื่อตัวเลขเป็นลบ
สำหรับตัวเลขลบ slice() จะใช้ความยาวของตัวอักษรที่เพิ่มกับตัวเลข และ substring() จะจัดการกับมันเป็น 0 (นั่นก็คือจะละเลยมัน) ตัวอย่าง:
var oStringObject = new String("hello world"); alert(oStringObject.slice("-3")); // ออก "rld" alert(oStringObject.substring("-3")); // ออก "hello world" alert(oStringObject.slice("3, -4")); // ออก "lo w" alert(oStringObject.substring("3, -4")); // ออก "hel"
ดังนั้นเราสามารถเห็นความแตกต่างหลักของ slice() และ substring()
เมื่อมีเพียงตัวเลข -3 เท่านั้น slice() จะกลับค่า "rld" substring() ก็จะกลับค่า "hello world" นี้เพราะสำหรับตัวอักษร "hello world" slice("-3") จะถูกเปลี่ยนเป็น slice("8") และ substring("-3") จะถูกเปลี่ยนเป็น substring("0")
ยังเช่นกัน เมื่อใช้ตัวเลข 3 และ -4 ก็จะมีความแตกต่างอย่างชัดเจน ซึ่ง slice() จะถูกแปลงเป็น slice(3, 7) ตามตัวอย่างก่อนหน้านี้ ซึ่งกลับมาเป็น "lo w" และ substring() จะแปลงทั้งสองตัวเลขเป็น substring(3, 0) หรือ substring(0, 3) เพราะ substring() จะมองเลขที่เล็กกว่าเป็นตำแหน่งเริ่มต้น และเลขที่ใหญ่กว่าเป็นตำแหน่งสิ้นสุด ดังนั้น substring("3, -4") จะกลับมาเป็น "hel" และบรรทัดสุดท้ายของรหัสนี้มีเพื่ออธิบายวิธีการใช้วิธีเหล่านี้
toLowerCase()、toLocaleLowerCase()、toUpperCase() และ toLocaleUpperCase()
กลุ่มของวิธีที่จะอธิบายถึงการเปลี่ยนแปลงขนาดตัวอักษรมี 4 วิธี ซึ่งคือ
- toLowerCase()
- toLocaleLowerCase()
- toUpperCase()
- toLocaleUpperCase()
จากชื่อของเรื่องนั้นเอง สามารถเห็นถึงความต้องการของพวกเขาได้ โดยที่สองกฎแรกใช้เพื่อเปลี่ยนข้อความให้เป็นตัวเล็กทั้งหมด และสองกฎที่เหลือใช้เพื่อเปลี่ยนข้อความให้เป็นตัวใหญ่ทั้งหมด
toLowerCase() และ toUpperCase() คือความเดิม ซึ่งมีฐานของ java.lang.String ในเวอร์ชั่นเดียวกัน
toLocaleLowerCase() และ toLocaleUpperCase() มีฐานของโซน (เช่นกับ localeCompare() ด้วย) ซึ่งมีฐานของโซนเฉพาะตัวในหลายๆโซน อย่างไรก็ตาม มีหลายภาษาที่มีกฎการเปลี่ยนแปลงตัวอักษรใหญ่เล็ก Unicode ที่เฉพาะตัว (เช่น ภาษาตุรกี) ดังนั้น จึงต้องใช้กฎของโซนเฉพาะตัวเพื่อที่จะทำการเปลี่ยนแปลงให้ถูกต้อง
var oStringObject = new String("Hello World"); alert(oStringObject.toLocaleUpperCase()); // ออก "HELLO WORLD" alert(oStringObject.toUpperCase()); // ออก "HELLO WORLD" alert(oStringObject.toLocaleLowerCase()); // ออก "hello world" alert(oStringObject.toLowerCase()); // ออก "hello world"
ในรหัสนี้ toUpperCase() และ toLocaleUpperCase() จะออก "HELLO WORLD" และ toLowerCase() และ toLocaleLowerCase() จะออก "hello world" โดยทั่วไปแล้ว ถ้าไม่ทราบว่าลิงก์ประจำประเทศใดที่เริ่มปฏิบัติการ ใช้วิธีที่มีความเป็นเฉพาะทางภาษาในพื้นที่จะปลอดภัยมากขึ้น
คำแนะนำ:จำนับว่า String Object ทุกของยังมีสมบัติและหน้าตาวิธีที่สามารถนำมาใช้กับค่า String ต้นแบบได้ เพราะนั้นมันเป็นพ็อกเก็ตโอบเจกต์
ประกาย instanceof
การใช้ประกาย typeof ในการจัดเก็บค่าด้วยประเภทอ้างอิงมีปัญหาเมื่อไม่กี่ชนิดของตัวแปรจะกลับมาเป็น
ประกาย instanceof มีความคล้ายคลึงกับประกาย typeof ในการตรวจสอบประเภทขององค์ประกอบ แต่ต่างกับวิธี typeof วิธี instanceof ต้องการให้ผู้พัฒนายืนยันโดยตรงว่าองค์ประกอบนั้นเป็นประเภทเฉพาะก้อน ตัวอย่างเช่น:
var oStringObject = new String("hello world"); alert(oStringObject instanceof String); // ออก "true"
รหัสนี้ถามว่า
- หน้าก่อนหน้า การเปลี่ยนประเภท ECMAScript
- หน้าต่อไป ประกายเพียงหนึ่งหลักฐาน