อาจกล่าวได้ว่าประเภทข้อมูล JS ทั้งหมดมีสองวิธี: valueof และ toString ยกเว้น NULL พวกเขาทั้งสองแก้ปัญหาการทำงานของค่า JavaScript และแสดงผล มีการใช้กันอย่างแพร่หลายในโปรแกรม มาแนะนำให้คุณทีละคน
วิธีการของ JavaScript ()
เมธอด valueof () ส่งคืนค่าดั้งเดิมของวัตถุบูลีน
การใช้งาน booleanobject.valueof () ส่งคืนค่าบูลีนดั้งเดิมด้วยค่าของ booleanobject หากวัตถุเรียกวิธีการไม่ใช่บูลีนจะมีการโยนประเภทข้อยกเว้น
<script type = "text/javascript"> var boo = บูลีนใหม่ (เท็จ); document.write (boo.valueof ()); </script>
สคริปต์ข้างต้นจะส่งออกเท็จ
วิธี ToString () ของ JavaScript
เมธอด toString () แปลงค่าโลจิคัลเป็นสตริงและส่งคืนผลลัพธ์
การใช้งาน booleanobject.toString () ค่าส่งคืนจะส่งคืนสตริง "จริง" หรือ "เท็จ" ตามค่าบูลีนดั้งเดิมหรือค่าของวัตถุ booleanobject หากวัตถุเรียกวิธีการไม่ใช่บูลีนจะมีการโยนประเภทข้อยกเว้น
วิธีนี้จะถูกเรียกโดยอัตโนมัติเมื่อมีการใช้วัตถุบูลีนในสภาพแวดล้อมสตริง
สคริปต์ต่อไปนี้จะสร้างวัตถุบูลีนและแปลงเป็นสตริง:
<script type = "text/javascript"> var boo = boolean ใหม่ (จริง); document.write (boo.toString ()); </script>
สคริปต์เอาท์พุท: จริง
ลองมาดูตัวอย่าง:
var aaa = {i: 10, valueof: function () {return this.i+30; }, toString: function () {return this.valueof ()+10; }} การแจ้งเตือน (aaa> 20); // TrueAlert (+AAA); // 40Alert (AAA); // 50นี่คือผลลัพธ์เพราะพวกเขาเรียกวิธีการที่มีค่าหรือวิธีการ toString อย่างลับๆ แต่จะแยกแยะได้อย่างไรภายใต้สถานการณ์ที่เรียกว่าวิธีใด เราสามารถทดสอบได้ด้วยวิธีอื่น เนื่องจากใช้ console.log โปรดทดสอบใน FF ด้วยการติดตั้ง Firebug!
var bbb = {i: 10, toString: function () {console.log ('toString'); return this.i;}, valueof: function () {console.log ('valueof'); return this.i;}}} การแจ้งเตือน (bbb); // 10 valueofalert (''+bbb); // 10 valueofalert (สตริง (bbb)); // 10 TOSTRINGALERT (หมายเลข (BBB)); // 10 valueofalert (bbb == '10'); // True ValueOfalert (bbb === '10'); // เท็จเมื่อมองแวบแรกผลลัพธ์ก็คือความรู้สึกโดยประมาณว่าถ้ามันถูกแปลงเป็นสตริงวิธีการที่เรียกว่าค่าของพวกเขา แต่สองคนนั้นไม่สอดคล้องกันมาก หนึ่งคือการแจ้งเตือน (''+bbb), การต่อการต่อสายของสตริงควรเรียกว่าวิธีการ toString ... อีกวิธีหนึ่งเราสามารถเข้าใจได้ชั่วคราวว่าตัวดำเนินการ === ไม่ได้ทำการแปลงโดยปริยายดังนั้นพวกเขาจึงไม่ถูกเรียก เพื่อที่จะติดตามความจริงเราต้องการการทดลองที่เข้มงวดมากขึ้น
var aa = {i: 10, toString: function () {console.log ('toString'); return this.i;}} การแจ้งเตือน (aa); // 10 toStringalert (+aa); // 10 TOSTRINGALERT (''+AA); // 10 TOSTRINGALERT (สตริง (AA)); // 10 TOSTRINGALERT (หมายเลข (AA)); // 10 TOSTRINGALERT (aa == '10'); // tostringalert จริงดูค่าของอีกครั้ง
var bb = {i: 10, valueof: function () {console.log ('valueof'); return this.i;}} การแจ้งเตือน (bb); // [วัตถุวัตถุ] การแจ้งเตือน (+bb); // 10 valueofalert (''+bb); // 10 valueofalert (สตริง (bb)); // [วัตถุวัตถุ] การแจ้งเตือน (หมายเลข (bb)); // 10 valueofalert (bb == '10'); // ค่าที่แท้จริงของฉันพบว่ามันแตกต่างกันเล็กน้อย? - มันไม่สม่ำเสมอและสม่ำเสมอเหมือน ToString ด้านบน สำหรับ [วัตถุวัตถุ] ฉันอาจสืบทอดมาจากวัตถุลองลบมันและดู
Object.prototype.toString = null; var cc = {i: 10, valueof: function () {console.log ('valueof'); return.i;}} การแจ้งเตือน (cc); // 10 valueofalert (+cc); // 10 valueofalert (''+cc); // 10 valueofalert (สตริง (cc)); // 10 valueofalert (หมายเลข (CC)); // 10 valueofalert (cc == '10'); // ค่าที่แท้จริงของหากมีการเขียน ToString เพียงการแปลงวัตถุจะไม่สนใจการมีอยู่ของค่าเมื่อแปลง อย่างไรก็ตามหากมีเพียงวิธีการที่ถูกเขียนใหม่จะได้รับการจัดลำดับค่า ValueOf จะได้รับความสำคัญเมื่อแปลงเป็นสตริง หากคุณไม่สามารถโทรหา ToString ได้คุณสามารถปล่อยให้คุณค่าของการต่อสู้ได้เท่านั้น สำหรับปัญหาการประกบสตริงแปลก ๆ อาจเป็นเพราะผู้ปฏิบัติงาน เมื่อคุณเปิด ECMA262-5 คุณจะพบว่ามีการดำเนินการ getValue ควรเปิดเผยคำตอบ การเขียนใหม่จะเพิ่มการเพิ่มประสิทธิภาพของการโทรของพวกเขาและในกรณีของผู้ประกอบการลำดับความสำคัญของมูลค่าของค่าสูงกว่าของ toString อยู่แล้ว
ข้างต้นเป็นคำอธิบายที่สมบูรณ์ของวิธีการและวิธีการ toString ใน JavaScript แนะนำให้คุณทราบโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!