ข้อมูลพื้นฐานที่แตกต่างกันใน JS สามารถแปลงได้ มีข้อมูลพื้นฐาน 5 ประเภทใน JS: สตริง, จำนวน, บูลีน, โมฆะ, ไม่ได้กำหนด
การแปลงระหว่างข้อมูลพื้นฐาน
| ชนิดข้อมูลดั้งเดิม | หมายเลขประเภทเป้าหมาย |
| ไม่ได้กำหนด | น่าน |
| โมฆะ | 0 |
| เท็จ | 0 |
| จริง | 1 |
| สตริงดิจิตอล | จำนวนที่สอดคล้องกัน |
| สตริงที่ไม่สามารถเปลี่ยนได้ | น่าน |
| ชนิดข้อมูลดั้งเดิม | สตริงประเภทเป้าหมาย |
| ไม่ได้กำหนด | ไม่ได้กำหนด |
| โมฆะ | โมฆะ |
| เท็จ | เท็จ |
| จริง | จริง |
| ตัวเลข | สตริงตัวเลข |
การเพิ่มข้อมูลพื้นฐานที่แตกต่างกันข้อมูลจะถูกแปลงเป็นหมายเลขก่อนจากนั้นแปลงเป็นสตริง (หากมีข้อมูลประเภทสตริงที่จะเข้าร่วมในการดำเนินการ)
คัดลอกรหัสรหัสดังนี้:
null + undefined // 0 + nan
null + false // 0 + 0
1 + จริง // 1 + 1
1 + '1' /// '11;
1 + 2 + '3' // '33'; (1 + 2) ผลลัพธ์ของ (1 + 2) จากนั้นเพิ่มลงใน '3' จะกลายเป็นผลลัพธ์เดียวกันกับต่อไปนี้
1 +(2 +'3') // '123';
's' + null // 'snull'
's' + undefined // 'sundefined'
's' + true // 'strue'
1+true+undefined+'s' // 1+1+nan+'s' = 2+nan+'s' = nan+'s' = nans
การมีส่วนร่วมของวัตถุของวิธีการเพิ่มและการลบ
วัตถุมีส่วนร่วมในประเภทการดำเนินการข้อมูลพื้นฐานและแปลเป็นประเภทพื้นฐานก่อน การโทรครั้งแรกของวิธีการ อย่างไรก็ตามข้อมูลวันที่เป็นสิ่งที่ตรงกันข้าม
คัดลอกรหัสรหัสดังนี้:
// เพื่ออำนวยความสะดวกในการสังเกตวิธี toString และวิธีการของวันที่เขียนใหม่
date.prototype.toString = function () {
กลับ 1;
-
date.prototype.valueof = function () {
กลับ 2;
-
var a = วันที่ใหม่
b = วันที่ใหม่;
A + B;
// เขียนใหม่อีกครั้ง
date.prototype.toString = function () {
กลับ {};
-
var c = วันที่ใหม่
d = วันที่ใหม่;
C + D;
// เขียนวิธีการใหม่
date.prototype.valueof = function () {
กลับ {};
-
var e = วันที่ใหม่
f = วันที่ใหม่;
E + F;
ตัวอย่างข้างต้นสามารถถูกแทนที่ด้วยวัตถุหรือประเภทอื่น ๆ เพื่อให้ได้ผลลัพธ์ที่สอดคล้องกัน แต่ค่าการโทรครั้งแรกจากนั้นโทรหา toString
เอฟเฟกต์วิเศษของ '+'
มีตัวเลข '+' อยู่ด้านหน้าของข้อมูลซึ่งสามารถแปลงเป็นตัวเลขได้
คัดลอกรหัสรหัสดังนี้:
+'1'+1 // 2
+'s'+2 // nan
หมายเหตุ: เป็นครั้งแรกที่รูปแบบไม่ดีและมีการละเว้นมากมาย