สตริงและหมายเลขบูลีน
ประเภท JavaScript จะถูกแปลงเป็นประเภทที่สอดคล้องกันตามการกำหนด
var str = ""; การแจ้งเตือน (typeof (str)); // stringstr =; การแจ้งเตือน (typeof (str)); // numbervar sum = str +; //+โปรแกรมสองตัวเลขเพื่อเพิ่มการแจ้งเตือน (ผลรวม); //
สิ่งนี้ชัดเจนยิ่งขึ้นและสามารถคำนวณค่าได้อย่างรวดเร็ว แต่โปรดดูการแปลงต่อไปนี้
var sum = "" + ""; การแจ้งเตือน (typeof (sum)); // StringAlert (sum); // var sum = "" +; การแจ้งเตือน (typeof (sum)); // StringAlert (sum); // var sum = + ""; การแจ้งเตือน (typeof (sum)); // stringalert (typeof (sum)); // var div = ""/""; การแจ้งเตือน (typeof (พื้นที่)); // numberalert (typeof (sub)); // var sub = "" - ""; การแจ้งเตือน (typeof (sub)); // numberalert (sub); // var div = ""/""; การแจ้งเตือน (typeof (พื้นที่)); // numberalert (typeof (div)); // numberalert (div); //
หากประเภทหมายเลขและประเภทสตริง "+" ตัวเลขจะถูกแปลงเป็นสตริงโดยตรง
ข้างต้น "+" ค่อนข้างพิเศษ ถ้าเป็น -, *, /; แล้วจะถูกแปลงเป็นประเภทใดในตอนท้าย?
VAR ARAEL = "" * "A"; การแจ้งเตือน (typeof (พื้นที่)); // numberAlert (พื้นที่); // nanvar sub = "a" - ""; แจ้งเตือน (typeof (sub)); // nansub = "a" -; แจ้งเตือน (typeof (sub)); // nansub = "a" -; (div)); // nandiv = "a"/; แจ้งเตือน (typeof (div)); // nan
ดังที่ได้กล่าวไว้ข้างต้น -, *, / เป็นเลขคณิตในจำนวน สตริงและหมายเลขไม่สามารถทำการคำนวณได้ดังนั้นค่าของพวกเขาจึงเป็น NAN หมายเลขประเภท
var a = true; การแจ้งเตือน (typeof (a)); // booleanvar b = "true"; var ab = a + b; การแจ้งเตือน (typeof (ab)); // stringalert (ab); // trueTrueAlert (a == b); // false
บูลีนและสตริงชนิดบูลีนจะถูกแปลงเป็นสตริง "จริง" โดยอัตโนมัติ แต่ทำไมไม่เท่ากับ B
มาดูตัวอย่างนี้กันเถอะ:
var c = ""; การแจ้งเตือน (typeof (c)); // stringvar d =; การแจ้งเตือน (typeof (d)); // numberalert (c == d); // true
หลักการของการแปลงได้รับที่นี่: (สำหรับการอ้างอิง)
1. ถ้าตัวถูกดำเนินการเป็นบูลีนให้แปลงเป็นค่าตัวเลขก่อนที่จะเปรียบเทียบความเท่าเทียมกัน - เท็จกับ 0 และจริงเป็น 1;
2. ถ้าตัวถูกดำเนินการหนึ่งเป็นสตริงและตัวดำเนินการอื่นเป็นค่าตัวเลขแล้วสตริงจะถูกแปลงเป็นค่าตัวเลขก่อนที่จะเปรียบเทียบความเท่าเทียมกัน
3. ถ้าตัวถูกดำเนินการหนึ่งเป็นวัตถุและตัวถูกดำเนินการอื่น ๆ ไม่ได้ดังนั้นวิธีการ valueof () ของวัตถุจะถูกเรียกและค่าประเภทพื้นฐานที่ได้รับจะถูกเปรียบเทียบตามกฎก่อนหน้า
จากนั้นเมื่อเปรียบเทียบสตริงและประเภทบูลีนมันจะเป็น:
การแปลงนี้เกิดขึ้น: บูลีนจริงแรกแปลงเป็นหมายเลข 1 จากนั้นแปลงเป็นสตริง "1" จากนั้นเปรียบเทียบ ผลลัพธ์จะต้องเป็นเท็จ
บูลีนหมายเลข NULL และสตริงที่ไม่ได้กำหนด
var a = null; การแจ้งเตือน (typeof (a)); // objectvar b = "hello"; var ab = a + b; การแจ้งเตือน (typeof (ab)); // stringalert (ab); // nullhellovar c =; var ac = a * c; การแจ้งเตือน (typeof (ac)); // numberalert (ac); // ถ้า (a) // false {} else {alert ("false");} var u; การแจ้งเตือน (a == u); //จริงจากตัวอย่างที่ได้รับเราจะเห็น:
NULL จะถูกแปลงเป็นสตริง "null" โดยอัตโนมัติในสตริงแทนหมายเลข 0 ในจำนวนซึ่งเทียบเท่ากับเท็จในการตัดสินเชิงตรรกะและเป็นเช่นเดียวกับที่ไม่ได้กำหนดเมื่อแสดงค่า โปรดทราบว่า == แทน ===
แม้ว่า == จะแปลงประเภทการเปรียบเทียบเมื่อเปรียบเทียบ แต่ประเภทตัวแปรของมันจะไม่เปลี่ยนแปลงเนื่องจาก ==