การแปลงชนิดข้อมูลอัตโนมัติ
ดังที่คุณทราบแล้วว่า สตริงใน JavaScript ควรอยู่ในเครื่องหมายอัญประกาศ อาจมีกรณีที่อักขระทั้งหมดของสตริงเป็นตัวเลข:
let a = '123';
ในกรณีนี้ ตัวแปร a ก็เป็นสตริงเช่นกัน แต่มีรายละเอียดบางประการ
รายละเอียดนั้นมีดังนี้: หากดำเนินการทางคณิตศาสตร์ใดๆ บนสตริงที่มีตัวเลข การดำเนินการนั้นจะถูกดำเนินการเสมือนว่าเรามีตัวเลขจริงๆ ไม่ใช่สตริง:
alert('2' * '3'); // จะแสดง 6
ในกรณีนี้ JavaScript เห็นว่าเรากำลังพยายามดำเนินการที่ไม่ได้รับอนุญาตสำหรับสตริง แต่ได้รับอนุญาตสำหรับตัวเลข
มันยังเห็นว่าสตริงของเราจริงๆ แล้วเป็นตัวเลขในเครื่องหมายอัญประกาศ ดังนั้น JavaScript จึงแปลงสตริงเหล่านี้เป็นตัวเลขโดยอัตโนมัติและดำเนินการทางคณิตศาสตร์ที่เกี่ยวข้องบนสตริงเหล่านั้น
วิธีนี้ใช้ได้หากในสตริงของเรามีแต่ตัวเลขเท่านั้น หากมีตัวอักษรอย่างน้อยหนึ่งตัว - JavaScript จะถือว่าการดำเนินการไม่ถูกต้องและทำให้ผลลัพธ์เป็นค่า NaN:
alert('2' * '3s'); // จะแสดง NaN
นอกจากนี้ การแปลงอัตโนมัติจะเกิดขึ้นหากการดำเนินการถูกต้องทางคณิตศาสตร์ แต่ไม่ได้รับอนุญาตสำหรับสตริง
ตัวอย่างเช่น สตริงไม่สามารถคูณ หาร ลบได้ (แต่ตัวเลขทำได้) ดังนั้นในการดำเนินการดังกล่าวทั้งหมด สตริงที่มีตัวเลขจะถูกแปลงเป็นตัวเลขโดยอัตโนมัติ
อย่างไรก็ตาม สตริง เช่นเดียวกับตัวเลข สามารถบวกกันได้โดยใช้ตัวดำเนินการ + ซึ่งหมายความว่าในกรณีของการบวก จะไม่มีการแปลงอัตโนมัติ:
let a = '1' + '2';
alert(a); // จะแสดง '12' - เกิดการบวกสตริง
หากพจน์หนึ่งเป็นตัวเลข และอีกพจน์เป็นสตริง สตริงจะเป็นฝ่ายชนะเสมอ:
let a = 1 + '2';
alert(a); // จะแสดง '12'
ในกรณีเช่นนี้ JavaScript จะแปลงตัวเลขเป็นสตริงโดยอัตโนมัติและดำเนินการบวกสตริง
อย่างไรก็ตาม มีรายละเอียดเมื่อมีพจน์มากกว่าสองพจน์: ในกรณีนี้ การแปลงเป็นประเภทข้อมูลเฉพาะจะขึ้นอยู่กับลำดับของการดำเนินการ
ในตัวอย่างต่อไปนี้ 2 และ 3 จะถูกบวกกันเป็นตัวเลขก่อน จากนั้นผลลัพธ์จะถูกบวกเข้ากับสตริง '1' เป็นสตริง '5' ซึ่งสุดท้ายจะได้สตริง '15':
let a = '1' + (2 + 3);
alert(a); // จะแสดง '15'
หากเอาเครื่องหมายวงเล็บออก ทุกอย่างจะถูกบวกจากซ้ายไปขวา นั่นคือก่อนอื่นตัวเลข 2 จะถูกบวกเข้ากับสตริง '1' และผลลัพธ์ที่ได้คือสตริง '12' จากนั้นตัวเลข 3 จะถูกบวกเข้ากับสตริงนี้และผลลัพธ์ที่ได้คือสตริง '123':
let a = '1' + 2 + 3;
alert(a); // จะแสดง '123'
แต่ในตัวอย่างต่อไปนี้ ตัวเลข 2 และ 3 อยู่ที่จุดเริ่มต้น ดังนั้นก่อนอื่นพวกมันจะถูกบวกกันเป็นตัวเลข ได้ผลลัพธ์เป็นตัวเลข 5 จากนั้นสตริง '1' จะถูกบวกเข้ากับตัวเลขนี้ ได้ผลลัพธ์เป็นสตริง '51':
let a = 2 + 3 + '1';
alert(a); // จะแสดง '51'
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = '5' + '2';
alert(a);
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = '5' + 2;
alert(a);
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = 5 + '2';
alert(a);
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = 5 + 2;
alert(a);
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = '5' * '2';
alert(a);
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = '5' - '2';
alert(a);
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = '5' / '2';
alert(a);
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = '5' % '2';
alert(a);
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = '5s' * '2';
alert(a);
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = '5s' + '2';
alert(a);
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = (-'5') + (-'2');
alert(a);
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = '5' * 1 + '2' * 1;
alert(a);
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = '5' * '1' + '2' * '1';
alert(a);
โดยไม่ต้องรันโค้ด จงกำหนดว่าจะแสดงอะไรบนหน้าจอ:
let a = '' + 3 + 1;
alert(a);