1. ขอบเขตตัวแปรจาวาสคริปต์
ใน JavaScript ตัวแปรส่วนใหญ่แบ่งออกเป็นสองประเภท: ตัวแปรท้องถิ่นและตัวแปรส่วนกลาง และขอบเขตที่เกี่ยวข้องก็เป็นขอบเขตท้องถิ่นและขอบเขตส่วนกลางด้วย
1 ตัวแปรและขอบเขตท้องถิ่น
โดยทั่วไปตัวแปรท้องถิ่นจะถูกประกาศและใช้ภายในเนื้อหาของฟังก์ชัน:
function func(){ var i=12;//ตัวแปรท้องถิ่น...}ขอบเขตของตัวแปรท้องถิ่นถูกใช้ภายในเนื้อหาของฟังก์ชันซึ่งมีการประกาศตัวแปร
รอบการประกาศของตัวแปรท้องถิ่นจะเริ่มต้นเมื่อมีการเรียกใช้และดำเนินการฟังก์ชัน และจะถูกทำลายหลังจากการเรียกใช้ฟังก์ชันเสร็จสมบูรณ์
2. ตัวแปรและขอบเขตทั่วโลก
โดยทั่วไปตัวแปรโกลบอลจะถูกประกาศไว้ภายนอกเนื้อหาของฟังก์ชัน:
var i=12;//ฟังก์ชันตัวแปรส่วนกลาง func(){......}นอกจากนี้ยังมีตัวแปรที่ใช้โดยตรงโดยไม่ต้องประกาศ และตั้งค่าเริ่มต้นเป็นตัวแปรส่วนกลาง:
function func(){ i=12;//ไม่ได้ประกาศ (ประกาศโดยใช้คีย์เวิร์ด var) ตั้งค่าเริ่มต้นเป็นตัวแปรโกลบอล}ตัวแปรร่วมสามารถใช้ได้ในสคริปต์และวิธีการทั้งหมดในเพจปัจจุบัน และขอบเขตของตัวแปรเหล่านั้นอยู่ในสคริปต์ของเพจปัจจุบัน
รอบการประกาศตัวแปรส่วนกลางจะถูกสร้างขึ้นเมื่อมีการเตรียมใช้งานตัวแปรและถูกทำลายเมื่อปิดหน้าปัจจุบัน
2. ประเภทของคำสำคัญ
คีย์เวิร์ด typeof ส่วนใหญ่จะใช้เพื่อตรวจจับประเภทข้อมูลของตัวแปร ประเภทข้อมูลหลักใน JavaScript ได้แก่ สตริง ตัวเลข บูลีน วัตถุ ฯลฯ
console.log(typeof 'str');//stringconsole.log(typeof 23);//numberconsole.log(typeof false);//booleanconsole.log(typeof [1,3,12]);//objectconsole. log (ประเภทของ {ชื่อ: 'แจ็ค', อายุ: 12}); // objectconsole.log (ประเภทของวันที่ใหม่ ()); // objectหมายเหตุ: อาร์เรย์และวัตถุ json ใน js เป็นประเภทข้อมูลวัตถุทั้งหมด
3. เป็นโมฆะและไม่ได้กำหนด
ค่าว่างและไม่ได้กำหนดมักจะปรากฏใน JavaScript ซึ่งบ่งชี้ว่าค่าของตัวแปรว่างเปล่าหรือไม่ได้กำหนดตัวแปรไว้ เมื่อแสดงค่า สามารถแสดงเป็นค่าว่างได้ แต่ยังคงมีความแตกต่างกันในแง่ของประเภทข้อมูล
console.log (ประเภทของ null); // objectvar persion = null; console.log (persion); // nullconsole.log (ประเภทของไม่ได้กำหนด); // undefinitionvar persion2; console.log (persion2); // ไม่ได้กำหนด
ชนิดข้อมูลเป็นโมฆะคือวัตถุ และชนิดข้อมูลเป็นไม่ได้กำหนดคือไม่ได้กำหนด
เมื่อมีการประกาศตัวแปร ค่าจะเป็นโมฆะ และค่าตัวแปรจะเป็นโมฆะ เมื่อมีการประกาศตัวแปรเท่านั้น โดยไม่มีการกำหนด ค่าจะไม่ได้ถูกกำหนดไว้
ลองดูการเปรียบเทียบอีกชุดหนึ่ง:
console.log(null==unknown);//ค่า true เท่ากัน console.log(null===undefed);//false ประเภทไม่เท่ากัน
จะเห็นได้ว่าเมื่อค่าว่างและไม่ได้กำหนด ทั้งสองค่าแสดงว่าว่างเปล่า ประเภทข้อมูลของ null คืออ็อบเจ็กต์ และประเภทข้อมูลของไม่ได้กำหนดคือไม่ได้กำหนด ค่าที่ประกาศโดยไม่ต้องกำหนดค่าเริ่มต้นไม่ได้ถูกกำหนดไว้
ต่อไปนี้เป็นอาหารเสริม
สถานการณ์ที่หนึ่ง
<script> var i; // ตัวแปรส่วนกลาง // ชื่อเมธอดคือการตั้งชื่อแบบอูฐ // ตัวแปรในเมธอดคือฟังก์ชัน sayHello(){ var x=100; alert(x); x++; / /Output 100 alert(x); //รายงานข้อผิดพลาดเนื่องจาก x เป็นตัวแปรภายในเครื่องและไม่สามารถเข้าถึงได้</script>สถานการณ์ที่สอง
<script>ฟังก์ชั่น sayHello(){ var x=100; if(x==100){ var y=x+1; alert(y); //Output 101 } alert(y); // ภายในเมธอดนี้ ไม่มีขอบเขตระดับบล็อก ซึ่งไม่สามารถทำได้ใน C#! - - for(var i=0;i<2;i++){ alert(i) } //ตัวแปรที่กำหนดใน for loop คือการแจ้งเตือนขอบเขตระดับบล็อก(i); //เนื่องจาก i เป็นตัวแปรท้องถิ่น 2 จึงเป็นเอาต์พุต } sayHello();</script>หมายเหตุ: ตัวแปรดังกล่าวไม่จำเป็นต้องประกาศด้วย var ก่อนใช้งาน ตัวแปรดังกล่าวจะถือเป็น "ตัวแปรร่วม" แต่ไม่ค่อยมีการใช้ในลักษณะนี้
เกี่ยวกับไม่ได้กำหนดและเป็นโมฆะ
ในสถานการณ์ต่อไปนี้ ค่าของตัวแปรไม่ได้ถูกกำหนดไว้
1. หากมีการกำหนดตัวแปรแต่ไม่ได้กำหนดค่า ค่าของตัวแปรจะไม่ได้ถูกกำหนดไว้
2. วิธีการเรียกไม่มีค่าตอบแทน และค่าที่ส่งคืนไม่ได้ถูกกำหนดไว้
3. หากไม่มีค่าแอตทริบิวต์ของวัตถุ ค่าที่ส่งคืนจะไม่ถูกกำหนด เช่น: document.ddd
ตัวอย่างที่ 1:
var xx;var yy=null;if(xx==yy){ alert('equal');}else{ alert('ไม่เท่ากัน');}ผลลัพธ์ที่ได้จะเท่ากันเนื่องจากเมื่อดำเนินการตัดสินแบบ if เบราว์เซอร์จะตัดสินค่าของ xx และ yy เนื่องจากทั้งสองค่าไม่มีค่าเฉพาะจึงถือว่าเป็นเท็จ
หากแทนที่การตัดสินด้วย ===[เครื่องหมายเท่ากับทั้งหมด] ผลลัพธ์จะไม่เท่ากัน! เพราะ === หมายความว่าประเภทข้อมูลและค่าของ xx และ yy จะต้องเหมือนกัน!
ตัวอย่างที่ 2:
var xx=10var yy='10';if(xx==yy){ alert('equal');}else{ alert('ไม่เท่ากับ');}ผลลัพธ์จะเท่ากัน หากเปลี่ยนเป็น === ผลลัพธ์จะไม่เท่ากัน
ตัวอย่างที่ 3:
var n='10';switch(n){ กรณีที่ 10: การแจ้งเตือน ('หมายเลข'); ตัวแบ่ง '10': การแจ้งเตือน ('สตริง');สตริงเอาต์พุต
การตัดสินในสวิตช์ควรคำนึงถึงประเภท
สรุป: การตัดสินใน if คือการตัดสินค่าโดยไม่คำนึงถึงประเภท