javascript - วิธีการนำสตริงสองตัวมาบวกกันราวกับว่ามันเป็นตัวเลข?
ฉันมีสายอักขระสองสายที่มีเฉพาะตัวเลขเท่านั้น:
var num1 = '20',
num2 = '30.5';
ฉันคาดหวังว่าฉันสามารถรวมพวกมันเข้าด้วยกันได้ แต่กลับถูกต่อเข้าด้วยกันแทน:
num1 + num2; // = '2030.5'
ฉันจะบังคับให้สตริงเหล่านี้ถูกพิจารณาเป็นตัวเลขได้อย่างไร?
คำตอบ #1
ฉันจะใช้ตัวดำเนินการบวกแบบโมโนรีเพื่อนำพวกมันไปแปลงเป็นตัวเลขก่อน
+num1 + +num2;
คำตอบ #2
เอกสาร MDN สำหรับ parseInt
เอกสาร MDN สำหรับ parseFloat
ใน parseInt ได้ระบุ radix เป็นสิบ ดังนั้นเราจึงอยู่ในฐาน 10 ใน JavaScript แบบไม่เข้มงวด ตัวเลขที่ขึ้นต้นด้วย 0 จะถูกมองว่าเป็นเลขฐานแปด สิ่งนี้จะก่อให้เกิดปัญหาอย่างชัดเจน!
parseInt(num1, 10) + parseInt(num2, 10) //base10
parseFloat(num1) + parseFloat(num2)
ดูคำตอบของ ChaosPandion ด้วยสำหรับทางลัดที่มีประโยชน์โดยใช้ตัวดำเนินการเอกภาพ ฉันได้ตั้งค่า fiddle เพื่อแสดงพฤติกรรมที่แตกต่างกัน
http://jsfiddle.net/EtX6G/
var ten = '10';
var zero_ten = '010';
var one = '1';
var body = document.getElementsByTagName('body')[0];
Append(parseInt(ten) + parseInt(one));
Append(parseInt(zero_ten) + parseInt(one));
Append(+ten + +one);
Append(+zero_ten + +one);
function Append(text) {
body.appendChild(document.createTextNode(text));
body.appendChild(document.createElement('br'));
}
คำตอบ #3
ฉันขอแนะนำให้ใช้ตัวดำเนินการบวกเดียว เพื่อบังคับให้สตริงที่อาจเกิดขึ้นถูกพิจารณาเป็นตัวเลข โดยใส่ในวงเล็บเพื่อทำให้โค้ดอ่านง่ายขึ้นดังตัวอย่างต่อไปนี้:
(+varname)
ดังนั้น ในกรณีของคุณมันคือ:
var num1 = '20',
num2 = '30.5';
var sum = (+num1) + (+num2);
// Just to test it
console.log( sum ); // 50.5
คำตอบ #4
var result = Number(num1) + Number(num2);
