ฉันจะทำสิ่งต่อไปนี้ใน JavaScript ได้อย่างไร?
ต่อ "1", "2", "3" เป็น "123"
แปลง "123" เป็น 123
เพิ่ม 123 + 100 = 223
แอบแฝง 223 เป็น "223"
ฉันจะทำสิ่งต่อไปนี้ใน JavaScript ได้อย่างไร?
ต่อ "1", "2", "3" เป็น "123"
แปลง "123" เป็น 123
เพิ่ม 123 + 100 = 223
แอบแฝง 223 เป็น "223"
คำตอบ:
คุณต้องการที่จะคุ้นเคยกับและparseInt()
toString()
และมีประโยชน์ในชุดเครื่องมือของคุณคือการดูตัวแปรเพื่อดูว่าเป็นประเภทใด - typeof
:
<script type="text/javascript">
/**
* print out the value and the type of the variable passed in
*/
function printWithType(val) {
document.write('<pre>');
document.write(val);
document.write(' ');
document.writeln(typeof val);
document.write('</pre>');
}
var a = "1", b = "2", c = "3", result;
// Step (1) Concatenate "1", "2", "3" into "123"
// - concatenation operator is just "+", as long
// as all the items are strings, this works
result = a + b + c;
printWithType(result); //123 string
// - If they were not strings you could do
result = a.toString() + b.toString() + c.toString();
printWithType(result); // 123 string
// Step (2) Convert "123" into 123
result = parseInt(result,10);
printWithType(result); // 123 number
// Step (3) Add 123 + 100 = 223
result = result + 100;
printWithType(result); // 223 number
// Step (4) Convert 223 into "223"
result = result.toString(); //
printWithType(result); // 223 string
// If you concatenate a number with a
// blank string, you get a string
result = result + "";
printWithType(result); //223 string
</script>
"1" + "2" + "3"
หรือ
["1", "2", "3"].join("")
เข้าร่วมวิธี concatenates รายการของอาร์เรย์เป็นสตริงวางคั่นระหว่างรายการที่ระบุ ในกรณีนี้ "ตัวคั่น" คือสตริงว่าง ( ""
)
parseInt("123")
ก่อนECMAScript 5จำเป็นต้องส่งผ่านเลขฐาน 10:parseInt("123", 10)
123 + 100
(223).toString()
(parseInt("1" + "2" + "3") + 100).toString()
หรือ
(parseInt(["1", "2", "3"].join("")) + 100).toString()
parseInt
ฟังก์ชันเสมอ
r = ("1"+"2"+"3") // step1 | build string ==> "123"
r = +r // step2 | to number ==> 123
r = r+100 // step3 | +100 ==> 223
r = ""+r // step4 | to string ==> "223"
//in one line
r = ""+(+("1"+"2"+"3")+100);
คำถามเหล่านี้เกิดขึ้นตลอดเวลาเนื่องจากระบบการพิมพ์ของ JavaScript ผู้คนคิดว่าพวกเขาได้รับตัวเลขเมื่อพวกเขาได้รับสตริงของตัวเลข
นี่คือบางสิ่งที่คุณอาจเห็นว่าใช้ประโยชน์จากวิธีที่ JavaScript จัดการกับสตริงและตัวเลข โดยส่วนตัวแล้วฉันหวังว่า JavaScript จะใช้สัญลักษณ์อื่นที่ไม่ใช่+สำหรับการต่อสายอักขระ
ขั้นตอนที่ (1) ต่อ "1", "2", "3" เป็น "123"
result = "1" + "2" + "3";
ขั้นตอน (2) แปลง "123" เป็น 123
result = +"123";
ขั้นตอนที่ (3) เพิ่ม 123 + 100 = 223
result = 123 + 100;
ขั้นตอนที่ (4) แปลง 223 เป็น "223"
result = "" + 223;
หากคุณรู้ว่าทำไมถึงได้ผลคุณจะไม่ค่อยมีปัญหากับนิพจน์ JavaScript
คุณสามารถทำได้ดังนี้:
// step 1
var one = "1" + "2" + "3"; // string value "123"
// step 2
var two = parseInt(one); // integer value 123
// step 3
var three = 123 + 100; // integer value 223
// step 4
var four = three.toString(); // string value "223"
0
จะเห็นเป็น(ฐาน 8) ฐานแปดหมายเลข
0
แล้วมี8
หรือ9
จะไม่นำไปสู่การกลับมาของ 0. เช่น, และparseInt('034') = 28
parseInt('09') = 0
ในการแปลงสตริงเป็นตัวเลขให้ลบ 0 หากต้องการแปลงตัวเลขเป็นสตริงให้เพิ่ม "" (สตริงว่าง)
5 + 1 จะให้ 6
(5 + "") + 1 จะให้ "51"
("5" - 0) + 1 จะให้ 6
parseInt ผิดปกติเช่น scanf:
parseInt ("12 ลิง", 10) เป็นตัวเลขที่มีค่า '12' + "12 ลิง" เป็นตัวเลขที่มีค่า "NaN" Number ("ลิง 12 ตัว") คือตัวเลขที่มีค่า "NaN"
ด้านล่างนี้เป็นตัวอย่างที่น่ารำคาญมากว่า JavaScript สามารถทำให้คุณมีปัญหาได้อย่างไร:
หากคุณเพียงแค่พยายามใช้parseInt()
เพื่อแปลงเป็นตัวเลขแล้วเพิ่มตัวเลขอื่นเข้าไปในผลลัพธ์มันจะเชื่อมสองสตริงเข้าด้วยกัน
อย่างไรก็ตามคุณสามารถแก้ปัญหาได้โดยวางนิพจน์ sum ในวงเล็บดังที่แสดงในตัวอย่างด้านล่าง
ผลลัพธ์: อายุรวม: 98; อายุรวมของพวกเขาไม่ใช่: 5048
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
var myFather = new Person("John", "Doe", "50", "blue");
var myMother = new Person("Sally", "Rally", 48, "green");
document.getElementById("demo").innerHTML = "Their age sum is: "+
(parseInt(myFather.age)+myMother.age)+"; Their age sum is NOT: " +
parseInt(myFather.age)+myMother.age;
</script>
</body>
</html>
ง่ายที่สุดคือเมื่อคุณต้องการสร้างจำนวนเต็มสตริงทำ
var a,b, c;
a = 1;
b = a.toString(); // This will give you string
ตอนนี้จากตัวแปร b ซึ่งเป็นสตริงประเภทเราจะได้จำนวนเต็ม
c = b *1; //This will give you integer value of number :-)
หากคุณต้องการตรวจสอบด้านบนเป็นตัวเลข หากคุณไม่แน่ใจว่า b มีจำนวนเต็มหรือไม่คุณสามารถใช้
if(isNaN(c*1)) {
//NOt a number
}
else //number
เราสามารถทำได้โดยใช้ตัวดำเนินการ unary plusเพื่อแปลงเป็นตัวเลขก่อนแล้วเพิ่ม ดูด้านล่าง: -
var a = "4";
var b = "7";
var sum = +a + +b;