การแนะนำ
หากข้อความควรเป็นงบที่โปรแกรมเมอร์ใช้บ่อยขึ้นและบ่อยครั้งที่พวกเขาจำเป็นต้องทำการตัดสิน หากข้อความโดยทั่วไปใช้สัญญาณสองเท่าเพื่อตรวจสอบว่าทั้งสององค์ประกอบก่อนและหลังมีความสอดคล้องหรือไม่ หากพวกเขาสอดคล้องกันการส่งคืนจะเป็นจริงและจากนั้นเรียกใช้คำสั่งต่อไปนี้ มิฉะนั้นให้ดำเนินการข้อความอื่น ๆ การแปลงประเภทโดยนัยที่กล่าวถึงในบทความนี้หมายถึงการแปลงที่เกิดจาก == เพื่อให้ตัวอย่างง่ายๆสัญญาณเท่ากันสองเท่าไม่ใช่เครื่องหมายเท่ากันทั้งหมดสัญญาณเท่ากับทั้งหมดคือ "===" สามสัญญาณเท่ากันและคำสั่ง "1" == 1 จากนั้นโดยทั่วไปสตริงก่อนหน้า "1" จะถูกแปลงเป็นหมายเลข 1 แล้วเปรียบเทียบ ผ่านตัวอย่างนี้คุณควรเข้าใจว่าการแปลงประเภทโดยนัยคืออะไร!
ขั้นตอนการแปลงประเภทโดยนัย
1. ก่อนอื่นตรวจสอบว่ามีน่านก่อนและหลังเครื่องหมายเท่ากันสองเท่า ถ้า NAN มีอยู่ทั้งหมดจะกลับมาเป็นเท็จ
2. มาดูกันว่ามีบูลีนก่อนและหลังเครื่องหมายเท่ากันสองเท่า หากมีบูลีนให้แปลงบูลีนเป็นตัวเลข (เท็จคือ 0 จริงคือ 1)
3 จากนั้นตรวจสอบว่ามีสตริงก่อนและหลังเครื่องหมายเท่ากันสองเท่า มีสามสถานการณ์:
1. อีกฝ่ายเป็นวัตถุและวัตถุถูกแปลงโดยใช้ toString () หรือ valueof ();
2. อีกฝ่ายเป็นตัวเลขและสตริงจะถูกแปลงเป็นตัวเลข (ตัวอย่างได้รับมาก่อน)
3. อีกฝ่ายเป็นสตริงเปรียบเทียบโดยตรง
4. คนอื่นกลับมาเป็นเท็จ
4. ถ้าเป็นตัวเลขอีกฝ่ายเป็นวัตถุ วัตถุใช้ค่าของ () หรือ toString () สำหรับการเปรียบเทียบและวัตถุอื่น ๆ ทั้งหมดจะกลับมาเป็นเท็จ
5. null, undefined จะไม่ดำเนินการแปลงประเภท แต่พวกเขาเท่ากัน
คำสั่งการแปลงข้างต้นจะต้องคำนึงถึง ประเภทของคำถามมักเกิดขึ้นระหว่างการสัมภาษณ์
การแปลงตัวเลขของวิธี. toString () และ. valueof () วิธีการ
โดยปกติแล้วเราคิดว่าการแปลงวัตถุเป็นสตริงต้องเรียกใช้วิธี ToString () และการแปลงเป็นตัวเลขต้องเรียกใช้วิธีการ () แต่มันไม่ง่ายเลยเมื่อใช้จริง ดูตัวอย่างรหัสต่อไปนี้:
var obj = {webName: "บล็อกส่วนหน้า haorooms", url: "www.vevb.com"} console.log (obj.toString ()); // [วัตถุวัตถุ]ในทำนองเดียวกันเรามาดูวิธีการ Valueof () อีกครั้ง:
var arr = [1, 2, 3]; console.log (arr.valueof ()); // [1, 2, 3]
ดังที่เห็นได้จากรหัสด้านบนวิธีการ ValueOF () ไม่ได้แปลงวัตถุเป็นตัวเลขที่สะท้อนวัตถุ แต่เราใช้ ToString ()
var arr = [1, 2, 3]; console.log (arr.toString ()); // 1,2,3
หมายเหตุ: เพื่อนหลายคนเชื่อว่าเมื่อแปลงเป็นสตริงคุณต้องโทรหาวิธี ToString () ก่อน อันที่จริงนี่เป็นความเข้าใจที่ผิด เราควรเข้าใจด้วยวิธีนี้ การเรียกใช้วิธี ToString () สามารถแปลงเป็นสตริงได้ แต่ไม่ได้หมายความว่าการแปลงสตริงคือการเรียกใช้วิธี TOSTRING () ก่อน
มาดูรหัสต่อไปนี้:
var arr = {}; arr.valueof = function () {return 1; } arr.toString = function () {return 2; } console.log (arr == 1); // truevar arr = {}; arr.valueof = function () {return []; } arr.toString = function () {return 1; } console.log (arr == 1); // trueเราสามารถดูได้จากรหัสด้านบนว่าการเรียกค่าใช้จ่ายครั้งแรกไปยัง ValueOf () สำหรับการแปลง หาก ValueOf () ไม่ใช่ค่าตัวเลข ToString จะถูกเรียกร้องให้มีการแปลง!
var arr = {}; arr.valueof = function () {return "1"; } arr.toString = function () {return "2"; } console.log (arr == "1"); // trueถ้า "1" เป็นสตริงแล้วสิ่งแรกที่เรียกค่า valueof ()
var arr = [2]; console.log (arr + "1"); // 21
ในตัวอย่างข้างต้น ToString () เรียกว่า; เพราะ arr.toString () ตามด้วย 2
กระบวนการแปลงเป็นเช่นนี้ ก่อนอื่น ARR จะเรียกวิธีการ Valueof () ก่อน แต่วิธีการของหมายเลขนี้ได้รับการสืบทอดและไม่ได้เขียนใหม่ (แน่นอนการเขียนนี้ไม่ได้ใช้งานโดยเรา) ค่าที่ส่งคืนเป็นวัตถุอาร์เรย์ไม่ใช่ประเภทค่าดังนั้นเราจึงเรียกวิธีการ ToString () ดังนั้นจึงบรรลุวัตถุประสงค์ในการแปลงเป็นสตริง
สรุป
วัตถุส่วนใหญ่แปลงเป็นประเภทค่าโดยปริยายเป็นความพยายามครั้งแรกในการเรียกใช้วิธีการ Valueof () อย่างไรก็ตามวัตถุวันที่เป็นข้อยกเว้น วิธีการ () และวิธีการ ToString () ของวัตถุนี้ได้รับการเขียนใหม่อย่างรอบคอบ ค่าเริ่มต้นคือการเรียกใช้เมธอด ToString () เช่นการใช้ตัวดำเนินการ + หากอยู่ในสภาพแวดล้อมการดำเนินการทางคณิตศาสตร์อื่น ๆ วิธีการของค่า () จะถูกเรียกแทน
วันที่ var = วันที่ใหม่ (); console.log (วันที่ + "1"); // Sun Apr 17 2014 17:54:48 GMT + 0800 (CST) 1console.log (วันที่ + 1); // 1460886888556console.log (วันที่ * 1); // 14608868888557