1. การแปลงประเภท
1. แปลงเป็นสตริง
สิ่งที่น่าสนใจเกี่ยวกับค่าบูลีน ตัวเลข และสตริงดั้งเดิมของ ECMAScript ก็คือ สิ่งเหล่านี้เป็นวัตถุหลอก ซึ่งหมายความว่าพวกมันมีคุณสมบัติและวิธีการจริงๆ
ชอบ:
คัดลอกรหัสรหัสดังต่อไปนี้:
var sColor = "สีน้ำเงิน";
การแจ้งเตือน (sColor.length); // เอาต์พุต "4"
โดยสรุป ค่าพื้นฐานหลักสามค่า ได้แก่ ค่าบูลีน ตัวเลข และสตริง ล้วนมีเมธอด toString() ออบเจ็กต์ทั้งหมดที่กำหนดโดย ECMAScript มีเมธอด toString() ไม่ว่าจะเป็นออบเจ็กต์หลอกหรือออบเจ็กต์จริง
วิธีการบูลีน toString() เพียงส่งออก "true" หรือ "false" และผลลัพธ์จะถูกกำหนดโดยค่าของตัวแปร:
คัดลอกรหัสรหัสดังต่อไปนี้:
var bFound = เท็จ;
alert(bFound.toString());// เอาท์พุต "เท็จ"
เมธอด toString() ของประเภท Number มีสองโหมด ได้แก่ โหมดเริ่มต้นและโหมดฐาน เมื่อใช้โหมดเริ่มต้น เมธอด toString() จะใช้เฉพาะสตริงที่เกี่ยวข้องในการส่งออกค่าตัวเลข (ไม่ว่าจะเป็นหรือไม่ก็ตาม) จำนวนเต็ม เลขทศนิยม หรือสัญกรณ์วิทยาศาสตร์)
คัดลอกรหัสรหัสดังต่อไปนี้:
var iNum1 = 10;
var fNum2 = 10.0;
การแจ้งเตือน (iNum1.toString()); // เอาต์พุต "10"
การแจ้งเตือน (fNum2.toString()); // เอาต์พุต "10"
การใช้โหมดฐานของเมธอด toString() ของประเภท Number จะทำให้ตัวเลขสามารถส่งออกเป็นฐาน (ฐาน) ที่แตกต่างกันได้
คัดลอกรหัสรหัสดังต่อไปนี้:
var iNum = 10;
alert(iNum.toString(2)); //เอาท์พุต "1010"
alert(iNum.toString(8)); //เอาท์พุต "12"
การแจ้งเตือน (iNum.toString (16)); // เอาต์พุต "A"
2. แปลงเป็นตัวเลข
ECMAScript มีสองวิธีในการแปลงค่าดั้งเดิมที่ไม่ใช่ตัวเลขให้เป็นตัวเลข ได้แก่ parseInt() และ parseFloat()
หมายเหตุ: เมื่อเรียกใช้เมธอดเหล่านี้ในประเภท String (ยกเว้น Number) เท่านั้นจึงจะสามารถทำงานได้อย่างถูกต้อง ประเภทอื่นๆ ทั้งหมดจะส่งคืน NaN
ตัวอย่างเช่น:
คัดลอกรหัสรหัสดังต่อไปนี้:
var iNum1 = parseInt("1234blue");//ส่งคืน 1234
var iNum2 = parseInt("oxA"); // ส่งคืน 10
var iNum3 = parseInt("22.5"); // ส่งคืน 22
var iNum4 = parseInt("blue"); // ส่งคืน NaN
เมธอด parseInt() ยังมีโหมดพื้นฐาน ซึ่งสามารถแปลงเลขฐานสอง ฐานแปด เลขฐานสิบหก หรือสตริงฐานอื่นๆ ให้เป็นจำนวนเต็มฐานสิบได้ พารามิเตอร์ที่สองระบุฐานที่จะแยกวิเคราะห์
คัดลอกรหัสรหัสดังต่อไปนี้:
var iNum1 = parseInt("AF",16);// คืนค่า 175
var iNum2 = parseInt("10",2); // ส่งกลับ 2
var iNum3 = parseInt("10",8); // ส่งคืน 8
var iNum4 = parseInt("10",10); // ส่งคืน 10
หมายเหตุ: หากเลขฐานสิบมี 0 นำหน้า ควรใช้ฐาน 10 ไม่เช่นนั้นคุณจะได้ค่าฐานแปด
คัดลอกรหัสรหัสดังต่อไปนี้:
var iNum1 = parseInt("010"); // ส่งกลับ 8
var iNum2 = parseInt("010",8); // ส่งคืน 8
var iNum3 = parseInt("010",10);//ส่งคืน 10
วิธีการ parseFloat() คล้ายกับวิธีการ parseInt() โดยจะดูอักขระแต่ละตัวโดยเริ่มจากตำแหน่ง 0 จนกระทั่งพบอักขระที่ไม่ถูกต้องตัวแรก จากนั้นจึงแปลงสตริงที่อยู่หน้าอักขระให้เป็นตัวเลข สำหรับวิธีนี้ จุดทศนิยมตำแหน่งแรกเป็นอักขระที่ถูกต้อง หากใช้ทศนิยมสองตำแหน่ง ทศนิยมตำแหน่งที่สองจะถือว่าไม่ถูกต้อง ข้อแตกต่างในการใช้วิธีนี้ก็คือ สตริงต้องแสดงตัวเลขทศนิยมในรูปแบบทศนิยม
คัดลอกรหัสรหัสดังต่อไปนี้:
var fNum1 = parseFloat("1234blue"); // ส่งคืน 1234.0
var fNum2 = parseFloat("0xA"); // คืนค่า NaN
var fNum3 = parseFloat("22.5"); // ส่งคืน 22.5
var fNum4 = parseFloat("22.34.5");//ส่งคืน 22.34
var fNum5 = parseFloat("0908");//ส่งคืน NaN
var fNum6 = parseFloat("blue");//ส่งคืน NaN
3. การแปลงประเภทบังคับ
การแคสต์ 3 ประเภทที่มีอยู่ใน ECMAScript มีดังนี้:
(1).บูลีน(ค่า)
แปลงค่าที่กำหนดให้เป็นประเภทบูลีน
ฟังก์ชัน Boolean() จะคืนค่าเป็นจริงเมื่อค่าที่จะแปลงเป็นสตริง ตัวเลขที่ไม่ใช่ศูนย์ หรือวัตถุที่มีอักขระอย่างน้อยหนึ่งตัว หากค่าเป็นสตริงว่าง ตัวเลข 0 ไม่ได้กำหนดหรือเป็นโมฆะ ก็จะส่งกลับค่าเท็จ
ชอบ:
คัดลอกรหัสรหัสดังต่อไปนี้:
var b1 = บูลีน(""); // false;
var b2 = บูลีน("สวัสดี");//true
var b3 = บูลีน (100);//true
var b4 = บูลีน (null);//false
var b5 = บูลีน (0); //false
var b6 = บูลีน(วัตถุใหม่());//true
(2).จำนวน(ค่า)
แปลงค่าที่กำหนดให้เป็นตัวเลข (อาจเป็นจำนวนเต็มหรือจำนวนจุดลอยตัว)
นอกจากนี้ โปรดจำไว้ว่าเมธอด parseInt() และ parseFloat() จะแปลงเฉพาะสตริงก่อนอักขระตัวแรกที่ไม่ถูกต้อง ดังนั้น "4.5.6" จะถูกแปลงเป็น "4.5" การแคสต์ด้วย Number() "4.5.6" จะส่งคืนค่า NaN เนื่องจากค่าสตริงทั้งหมดไม่สามารถแปลงเป็นตัวเลขได้ หากสามารถแปลงสตริงได้อย่างสมบูรณ์ Number() จะกำหนดว่าจะเรียกเมธอด parseInt() หรือเมธอด parseFloat()
ชอบ:
คัดลอกรหัสรหัสดังต่อไปนี้:
ตัวเลข(เท็จ);//0
ตัวเลข(จริง);//1
หมายเลข(ไม่ได้กำหนด);//NaN
หมายเลข(null);//0
หมายเลข("5.5");//5.5
หมายเลข("56");//56
หมายเลข("5.6.7");//น่าน
Number(วัตถุใหม่());//NaN
หมายเลข(100);//100
(3).สตริง(ค่า)
แปลงค่าที่กำหนดให้เป็นสตริง
ข้อแตกต่างเพียงอย่างเดียวจากการเรียกเมธอด toString() ก็คือการส่งค่า null หรือค่าที่ไม่ได้กำหนดจะสร้างสตริงโดยไม่ทำให้เกิดข้อผิดพลาด:
คัดลอกรหัสรหัสดังต่อไปนี้:
var s1 = สตริง (null);//"null"
var oNull = null;
var s2 = oNull.toString();//ทำให้เกิดข้อผิดพลาด
2. ประเภทอ้างอิง
ประเภทการอ้างอิงมักเรียกว่าคลาส ซึ่งหมายความว่าเมื่อพบค่าอ้างอิง อ็อบเจ็กต์จะถูกประมวลผล ECMAScript กำหนด "คำจำกัดความของวัตถุ" ที่เทียบเท่ากับคลาสในภาษาการเขียนโปรแกรมอื่นในทางตรรกะ
1.คลาสอ็อบเจ็กต์
คลาสทั้งหมดใน ECMAScript สืบทอดมาจากคลาสนี้ และคุณสมบัติและวิธีการทั้งหมดในคลาส Object จะปรากฏในคลาสอื่น (แทนที่)
คุณสมบัติของคลาสวัตถุ:
(1) ตัวสร้าง ---- การอ้างอิง (ตัวชี้) ไปยังฟังก์ชันที่สร้างวัตถุ สำหรับคลาส Object ตัวชี้นี้ชี้ไปที่ฟังก์ชัน object() ดั้งเดิม
(2) ต้นแบบ ---- การอ้างอิงถึงต้นแบบวัตถุของวัตถุ สำหรับทุกคลาส มันจะส่งคืนอินสแตนซ์ของวัตถุ Object ตามค่าเริ่มต้น
วิธีการเรียนวัตถุ:
(1).HasOwnProperty(property)---- ตรวจสอบว่าวัตถุมีคุณลักษณะเฉพาะหรือไม่ ต้องระบุคุณสมบัติเป็นสตริง (เช่น o.hasOwnProperty("name"))
(2).IsPrototypeOf(object)---- ตรวจสอบว่าวัตถุนั้นเป็นต้นแบบของวัตถุอื่นหรือไม่
(3).PropertyIsEnumerable(property)---- พิจารณาว่าคุณสมบัติที่กำหนดสามารถแจกแจงได้หรือไม่โดยใช้คำสั่ง for..in
(4).ToString()---- ส่งคืนการแสดงสตริงดั้งเดิมของวัตถุ การใช้งาน ECMAScript ที่แตกต่างกันมีค่าที่แตกต่างกัน
(5).ValueOf()---- ส่งกลับค่าเดิมที่เหมาะสมกับวัตถุมากที่สุด สำหรับหลายคลาส ค่าที่ส่งคืนโดยวิธีนี้จะเหมือนกับค่าที่ส่งคืนของ toString()
2.คลาสบูลีน
วัตถุบูลีนไม่ค่อยถูกใช้ใน ECMAScript และถึงแม้จะเป็นเช่นนั้น แต่ก็ไม่ใช่เรื่องง่ายที่จะเข้าใจ
ตัวอย่างเช่น:
คัดลอกรหัสรหัสดังต่อไปนี้:
var oFalseObject = บูลีนใหม่ (false);
var bResult = oFalseObject && true;//เอาต์พุตจริง;
เหตุผล: ในนิพจน์บูลีน วัตถุทั้งหมดจะถูกแปลงเป็นจริงโดยอัตโนมัติ
3.คลาสตัวเลข
ค่าพิเศษ เช่น Number.MAX_VALUE เป็นคุณสมบัติคงที่ของคลาส Number หากต้องการรับค่าเดิมของ Number of a object เพียงใช้เมธอด valueOf():
var iNumber = oNumberObject.valueOf();
นอกเหนือจากวิธีการมาตรฐานที่สืบทอดมาจากคลาส Object แล้ว คลาส Number ยังมีวิธีการพิเศษหลายวิธีในการจัดการค่าตัวเลข
toFixed() วิธีการ:
ส่งกลับการแสดงสตริงของตัวเลขที่มีจำนวนตำแหน่งทศนิยมที่ระบุ วิธีนี้สามารถแสดงตัวเลขที่มีทศนิยม 0 ถึง 20 ตำแหน่ง หากอยู่นอกช่วงนี้จะทำให้เกิดข้อผิดพลาด
ชอบ:
คัดลอกรหัสรหัสดังต่อไปนี้:
var oNumberObject = หมายเลขใหม่ (99);
aler (oNumberObject.toFixed (2)); // เอาต์พุต "99.00"
toExponential() วิธีการ:
ส่งกลับการแสดงสตริงของตัวเลขในรูปแบบทางวิทยาศาสตร์ วิธีนี้ยังใช้พารามิเตอร์ที่ระบุจำนวนตำแหน่งทศนิยมที่จะส่งออก ตัวอย่างเช่น:
คัดลอกรหัสรหัสดังต่อไปนี้:
var oNumberObj = หมายเลขใหม่ (99);
การแจ้งเตือน (oNumberObj.toExponential(1));//เอาต์พุต "9.9e+1"
toPrecision() วิธีการ:
ส่งกลับรูปแบบที่กำหนดไว้ล่วงหน้าหรือแบบเลขชี้กำลังของตัวเลข ขึ้นอยู่กับรูปแบบที่เหมาะสมที่สุด มีอาร์กิวเมนต์หนึ่งตัว ซึ่งเป็นจำนวนหลักทั้งหมดที่ใช้แทนตัวเลข (ไม่รวมเลขชี้กำลัง)
คัดลอกรหัสรหัสดังต่อไปนี้:
var oNumberObj = หมายเลขใหม่ (99);
การแจ้งเตือน (oNumberObj.toPrecision (1)); // เอาต์พุต "1e + 2" == 100
ดังที่เห็นแล้วว่าเมธอด toPrecision() จะปัดเศษตัวเลขเพื่อให้ได้ตัวเลขที่ใกล้เคียงกับค่าจริงมากที่สุด
ชอบ:
คัดลอกรหัสรหัสดังต่อไปนี้:
var oNumberObj = หมายเลขใหม่ (99);
การแจ้งเตือน (oNumberObj.toPrecision (2)); // เอาต์พุต "99"
การแจ้งเตือน (oNumberObj.toPrecision (3)); // เอาต์พุต "99.0"
วิธีการ toFixed(), toExponential() และ toPrecision() ทั้งหมดดำเนินการปัดเศษเพื่อแสดงตัวเลขอย่างถูกต้องด้วยจำนวนตำแหน่งทศนิยมที่ถูกต้อง
toLocaleString() วิธีการ:
สามารถแสดงผลในรูปแบบบนเพจได้ เช่น 5210.50 จะแสดงเป็น 5,210.50 แต่ถ้ามีการใช้ค่าก็ควรแทนที่ในรูปแบบ parseFloat($("N_YJJE").value.replace(// ,/g, "")); ลบเครื่องหมายจุลภาคและรับค่าของมัน
หมายเหตุ: เช่นเดียวกับวัตถุบูลีน วัตถุ Number ก็มีความสำคัญเช่นกัน แต่ควรใช้เท่าที่จำเป็นเพื่อหลีกเลี่ยงปัญหาที่อาจเกิดขึ้น เมื่อใดก็ตามที่เป็นไปได้ ให้ใช้การแสดงตัวเลขแบบดิบ
4.คลาสสตริง
เมธอด valueOf() และเมธอด toString() ของวัตถุ String ทั้งคู่ส่งคืนค่าดั้งเดิมของประเภท String:
คัดลอกรหัสรหัสดังต่อไปนี้:
alert(oStringObj.valueOf() == oStringObj.toString());//เอาท์พุต "จริง"
คลาส String มีความยาวแอตทริบิวต์ซึ่งเป็นจำนวนอักขระในสตริง:
คัดลอกรหัสรหัสดังต่อไปนี้:
var oStringObj = สตริงใหม่ ("สวัสดีชาวโลก");
การแจ้งเตือน (oStringObj.length); เอาต์พุต "11"
หมายเหตุ: แม้ว่าสตริงจะมีอักขระแบบไบต์คู่ อักขระแต่ละตัวจะนับเป็นอักขระเพียงตัวเดียว
charAt() วิธีการ:
ส่งกลับสตริงที่มีอักขระในตำแหน่งที่ระบุ:
คัดลอกรหัสรหัสดังต่อไปนี้:
var oStringObj = สตริงใหม่ ("สวัสดีชาวโลก");
การแจ้งเตือน (oStringObj.charAt(1)); เอาต์พุต "e"
charCodeAt() วิธีการ:
ส่งกลับสตริงที่มีรหัสอักขระในตำแหน่งที่ระบุ:
คัดลอกรหัสรหัสดังต่อไปนี้:
var oStringObj = สตริงใหม่ ("สวัสดีชาวโลก");
alert(oStringObj.charCodeAt(1));เอาต์พุต "101"
concat() วิธีการ:
ใช้เพื่อเชื่อมสตริงตั้งแต่หนึ่งสตริงขึ้นไปเข้ากับค่าดั้งเดิมของออบเจ็กต์ String วัตถุ String ดั้งเดิมยังคงไม่เปลี่ยนแปลง
คัดลอกรหัสรหัสดังต่อไปนี้:
var oStringObj = สตริงใหม่ ("สวัสดี");
var sResult = oStringObj.concat("world");//oStringObj+"world"; ทั่วไปมากขึ้น
การแจ้งเตือน (sResult); // ส่งออก "สวัสดีชาวโลก"
การแจ้งเตือน (oStringObj); // ส่งออก "สวัสดี"
วิธีการindexOf()และlastIndexOf()ส่งกลับตำแหน่งของสตริงย่อยที่ระบุในสตริงอื่น (หรือ -1 ถ้าไม่พบสตริงย่อย) ความแตกต่างระหว่างสองวิธีนี้คือ indexOf() เริ่มค้นหาสตริงย่อยจากจุดเริ่มต้นของสตริง (ตำแหน่ง 0) ในขณะที่ LastIndexOf() เริ่มค้นหาสตริงย่อยจากจุดสิ้นสุดของสตริง
localeCompare() เปรียบเทียบสตริง (เปรียบเทียบตามลำดับตัวอักษร อันหลังจะมีขนาดใหญ่กว่า) เมธอดนี้มีพารามิเตอร์เดียว - สตริงที่จะเปรียบเทียบ และส่งคืนค่าหนึ่งในสามค่าต่อไปนี้:
1. หากออบเจ็กต์ String ถูกจัดเรียงตามตัวอักษรก่อนสตริงในพารามิเตอร์ จะมีการส่งคืนจำนวนลบ (ค่าที่พบบ่อยที่สุดคือ -1 แต่การส่งคืนจริงจะถูกกำหนดโดยการใช้งาน)
2. หากวัตถุ String เท่ากับสตริงในพารามิเตอร์ 0 จะถูกส่งกลับ
3. หากออบเจ็กต์ String ถูกจัดเรียงตามตัวอักษรหลังสตริงในพารามิเตอร์ ให้ส่งคืนจำนวนบวก (ค่าที่พบบ่อยที่สุดคือ 1 แต่การส่งคืนจริงจะถูกกำหนดโดยการใช้งาน)
Slice() และ substring() วิธีการ:
ทั้งสองวิธีส่งคืนสตริงย่อยของสตริงที่จะประมวลผล และทั้งสองวิธียอมรับพารามิเตอร์หนึ่งหรือสองตัว พารามิเตอร์แรกคือตำแหน่งเริ่มต้นของสตริงย่อยที่จะได้รับ และพารามิเตอร์ตัวที่สองคือตำแหน่งก่อนที่จะได้รับจุดสิ้นสุดของสตริงย่อย (อักขระที่ตำแหน่งเทอร์มินัลจะไม่รวมอยู่ในค่าที่ส่งคืน) ถ้าละเว้นอาร์กิวเมนต์ที่สอง บิตการสิ้นสุดจะมีค่าเริ่มต้นเป็นความยาวของสตริง ไม่มีวิธีการใดที่เปลี่ยนแปลงค่าของวัตถุ String เอง
คัดลอกรหัสรหัสดังต่อไปนี้:
var oStringObj = สตริงใหม่ ("สวัสดีชาวโลก");
alert(oStringObj.slice(3));//เอาท์พุท "lo world"
การแจ้งเตือน (oStringObj.slice (3,7)); // เอาต์พุต "ต่ำ"
หมายเหตุ: สำหรับพารามิเตอร์เชิงลบ เมธอด Slice() จะเพิ่มความยาวของสตริงให้กับพารามิเตอร์ และเมธอด substring() จะถือว่าเป็น 0 (นั่นคือ มันจะถูกละเว้น)
คัดลอกรหัสรหัสดังต่อไปนี้:
var oStringObj = สตริงใหม่ ("สวัสดีชาวโลก");
alert(oStringObj.slice(-3));//outputs "rld" เทียบเท่ากับการดึงข้อมูลแบบย้อนกลับ
alert(oStringObj.substring(-3));// เอาท์พุต "สวัสดีชาวโลก"
การแจ้งเตือน (oStringObj.slice (3,-4)); // เอาต์พุต "ต่ำ"
alert(oStringObj.substring(3,-4));//outputs "hel" substring() จะใช้ตัวเลขที่น้อยกว่าเป็นบิตเริ่มต้นเสมอ และตัวเลขที่มากกว่าเป็นบิตสิ้นสุด
toLowerCase(), toLocalLowerCase(), toUpperCase() และ toLocaleUpperCase():
สองวิธีแรกจะแปลงสตริงเป็นตัวพิมพ์เล็กทั้งหมด และสองวิธีหลังใช้ในการแปลงสตริงเป็นตัวพิมพ์ใหญ่ทั้งหมด วิธีการ toLocalLowerCase() และ toLocaleUpperCase() ถูกนำมาใช้ตามภูมิภาคที่เฉพาะเจาะจง
ข้อควรจำ: คุณสมบัติและวิธีการทั้งหมดของคลาส String สามารถใช้กับค่าดั้งเดิมของ String ได้เนื่องจากเป็นวัตถุหลอก
5.อินสแตนซ์ของตัวดำเนินการ
มีปัญหาเมื่อใช้ประเภทการอ้างอิงในการจัดเก็บค่าเมื่อใช้ตัวดำเนินการ typeof ไม่ว่าจะอ้างอิงถึงประเภทใดก็จะส่งกลับ "วัตถุ" วิธีการ instanceof กำหนดให้นักพัฒนาต้องยืนยันอย่างชัดเจนว่าออบเจ็กต์นั้นเป็นประเภทเฉพาะ ชอบ:
คัดลอกรหัสรหัสดังต่อไปนี้:
var oStrObj = สตริงใหม่ ("สวัสดีชาวโลก");
การแจ้งเตือน (อินสแตนซ์ oStrObj ของสตริง); // เอาต์พุต "จริง"