หากคุณแปลงประเภทใดประเภทหนึ่งไปเป็นประเภทอื่นอย่างชัดเจนผ่านการเรียกใช้ฟังก์ชันหรือเมธอด จะเรียกว่าการแปลงโดยชัดแจ้ง และสิ่งที่ตรงกันข้ามจะเรียกว่าการแปลงประเภทโดยนัย คำว่า "การแปลงประเภทการแสดงผล" และ "การแปลงประเภทโดยนัย" ไม่พบใน Google และ Wikipedia ลองเรียกมันว่า
1. การแปลงประเภทโดยนัยในการดำเนินงาน
1. ตัวดำเนินการ “+”
คัดลอกรหัสรหัสดังต่อไปนี้:
วาร์ ก = 11, ข = '22';
var c = a + b;
ที่นี่เครื่องยนต์จะเปลี่ยน a เป็นสตริง "11" ก่อนแล้วจึงเชื่อมต่อกับ b ซึ่งจะกลายเป็น "1122" บางคนอาจสงสัยว่าทำไมไม่เปลี่ยน b เป็นเลข 22 แล้วบวกเลขคณิต ซึ่งในกรณีนี้ c จะเป็น 33 ไม่มีเหตุผล เมื่อด้านใดด้านหนึ่งของตัวดำเนินการ "+" เป็นประเภทตัวเลขและอีกด้านเป็นประเภทสตริง เอ็นจิ้น js จะกำหนดให้ทำการต่อสตริงแทนการบวกเลขคณิต การใช้คุณลักษณะของตัวดำเนินการ "+" ทำให้ตัวเลขสามารถแปลงเป็นสตริงได้อย่างง่ายดาย ชอบ
คัดลอกรหัสรหัสดังต่อไปนี้:
วาร์ ก = 11;
การแจ้งเตือน (ประเภทของ a); //-->หมายเลข
ก = ก + '';
การแจ้งเตือน (ประเภทของ a); //-->string
2. ตัวดำเนินการ "-"
"-" สามารถเป็นตัวดำเนินการเอกนารี (การดำเนินการลบ) หรือตัวดำเนินการไบนารี (การดำเนินการลบ) ชอบ
คัดลอกรหัสรหัสดังต่อไปนี้:
วาร์ ก = 11, ข = '5';
วาร์ ค = ก - ข;
การแจ้งเตือน (ประเภท c); //--> หมายเลข
ตรงกันข้ามกับ "+" ด้านบน สตริง b จะถูกแปลงเป็นเลข 5 โดยปริยาย จากนั้นจึงดำเนินการลบเลขคณิต เมื่อใช้คุณสมบัตินี้ คุณสามารถแปลงสตริงเป็นตัวเลขได้อย่างง่ายดาย
คัดลอกรหัสรหัสดังต่อไปนี้:
วาร์ ก = '11';
ก = ก - '';
alert(typeof a);// -->number
2. การแปลงประเภทโดยนัยในคำสั่ง
1 ถ้า
คัดลอกรหัสรหัสดังต่อไปนี้:
var obj = {ชื่อ:'แจ็ค'}
ถ้า(obj){
//ทำมากกว่านี้
-
ที่นี่ obj จะถูกแปลงเป็นประเภทบูลีนโดยปริยาย
2. ในขณะที่
คัดลอกรหัสรหัสดังต่อไปนี้:
var obj = {ชื่อ:'แจ็ค'}
ในขณะที่ (obj) {
//ทำมากกว่านี้
-
เหมือนกับว่า
3. พิมพ์การแปลงระหว่าง for in
การแปลงโดยนัยจากตัวระบุเป็นสตริงเกิดขึ้นเมื่อกำหนดตัวอักษรของอ็อบเจ็กต์
คัดลอกรหัสรหัสดังต่อไปนี้:
var person = {'ชื่อ':'แจ็ค',"อายุ":20,โรงเรียน:'PKU'};
สำหรับ (var a ด้วยตนเอง){
การแจ้งเตือน (a + ": " + ประเภทของ a);
-
ในที่นี้ เครื่องหมายอัญประกาศเดี่ยว/คู่จะถูกเพิ่มให้กับชื่อและอายุตามลำดับเพื่อเน้นว่าเป็นประเภทสตริง และไม่มีการเพิ่มเครื่องหมายอัญประกาศเดี่ยว/คู่ในโรงเรียน เราสำรวจคุณสมบัติของวัตถุเพื่อดูประเภทของมัน พบว่าโรงเรียนถูกแปลงเป็นประเภทสตริงโดยปริยายเช่นกัน
จริงๆ แล้วดัชนีของอาร์เรย์นั้นเป็นประเภทสตริง มันน่าทึ่งแต่มันเป็นเรื่องจริง ชอบ
คัดลอกรหัสรหัสดังต่อไปนี้:
วาไรตี้ = [1,3,5,7];
สำหรับ (var a ใน ary) {
การแจ้งเตือน (a + ": " + ประเภทของ a);
-
3. การแปลงประเภทโดยนัยเมื่อมีการแจ้งเตือน
คัดลอกรหัสรหัสดังต่อไปนี้:
String.prototype.fn = function(){ส่งคืนสิ่งนี้};
var a = 'สวัสดี';
การแจ้งเตือน (typeof a.fn()); //-->object
alert(a.fn()); //-->สวัสดี
มีการเพิ่มเมธอด fn ลงในต้นแบบ String ซึ่งส่งคืนสิ่งนี้ เรารู้ว่าสิ่งนี้สามารถเข้าใจได้ว่าเป็นอ็อบเจ็กต์อินสแตนซ์ของคลาสปัจจุบัน เนื่องจากเป็นอ็อบเจ็กต์ typeof a.fn() จึงส่งคืนอ็อบเจ็กต์ตามธรรมชาติ
กุญแจสำคัญคือการแจ้งเตือนครั้งสุดท้าย (a.fn()) สิ่งที่ a.fn() ส่งคืนนั้นชัดเจนว่าเป็นวัตถุ แต่จะถูกแปลงเป็นสตริง "hello" โดยปริยายเพื่อแสดง
สิ่งเดียวกันนี้เกิดขึ้นกับประเภทตัวเลข เช่น
คัดลอกรหัสรหัสดังต่อไปนี้:
Number.prototype.fn = function(){ส่งคืนสิ่งนี้};
วาร์ ก = 10;
alert(typeof a.fn());//-->object
alert(a.fn()); //-->10
a.fn() ส่งคืนประเภทอ็อบเจ็กต์ แต่จะถูกแปลงเป็นตัวเลขโดยปริยายเมื่อใช้ alert(a.fn())