มี 5 ค่าดั้งเดิมใน JS, 6 ประเภทของการตัดสินและ 9 constructors ในตัว
569 นี้เป็นพื้นฐานของภาษา JS
ค่าดั้งเดิม 5 ค่าคือ: ตัวเลข, อักขระ, บูลีน, โมฆะ, ไม่ได้กำหนด
Typeof สามารถตัดสินได้: ตัวเลข, อักขระ, บูลีน, วัตถุ, ฟังก์ชั่น, ไม่ได้กำหนด โปรดทราบว่า null และอาร์เรย์พิมพ์ทั้งสองวัตถุเอาต์พุต
Typeof ไม่สามารถแยกแยะอาร์เรย์และวัตถุได้ จะตัดสินประเภทได้อย่างไร? ใช้ object.prototype.toString.apply ()
if (value && typeof value === 'Object' && value.constructor === Array)
หากการตรวจจับข้างต้นถูกสร้างขึ้นในเฟรมและหน้าต่างที่แตกต่างกันจะได้รับเท็จและวัตถุหน้าต่างจะแตกต่างกัน
วิธีที่เชื่อถือได้คือถ้า (Object.prototype.toString.apply (value) === "[อาร์เรย์วัตถุ]")
อาร์เรย์อาร์กิวเมนต์ไม่ใช่อาร์เรย์มันเป็นเพียงวัตถุที่มีแอตทริบิวต์สมาชิกที่มีความยาว
ดังที่แสดงในตัวอย่างต่อไปนี้อาร์กิวเมนต์ไม่ใช่อาร์เรย์ธรรมดา
การคัดลอกรหัสมีดังนี้:
var a = function () {
var b = object.prototype.toString.apply (อาร์กิวเมนต์);
console.log (b);
-
a (); // output [อาร์กิวเมนต์วัตถุ]
การคัดลอกรหัสมีดังนี้:
var a = function () {
var c = [];
var b = object.prototype.toString.apply (c);
console.log (b);
-
a (); // output [อาร์เรย์วัตถุ]
อินสแตนซ์ของการพิจารณาว่าอินสแตนซ์เป็นอินสแตนซ์ได้อย่างไร
คุณสมบัติในต้นแบบมีตัวสร้าง
คุณสมบัติต้นแบบเริ่มต้นเป็นวัตถุวัตถุที่สามารถตั้งค่าเป็นค่าที่ซับซ้อนใด ๆ ละเว้นการตั้งค่าเป็นค่าดั้งเดิม
แม้ว่าเขาจะเป็นวัตถุทั้งหมด แต่เขาก็พิเศษและห่วงโซ่วงกลมเชื่อมโยงแต่ละอินสแตนซ์ไปยังคุณสมบัติต้นแบบของตัวสร้าง มีการเชื่อมโยงที่ซ่อนอยู่ระหว่างอินสแตนซ์และแอตทริบิวต์ต้นแบบของตัวสร้างซึ่งเป็น __proto__ ของอินสแตนซ์ ในเวลาเดียวกันแอตทริบิวต์ตัวสร้างของอินสแตนซ์จะได้รับผ่านตัวสร้างของตัวสร้างของต้นแบบฟังก์ชั่นคอนสตรัคเตอร์
อย่างไรก็ตามเราต้องรักษาตัวสร้างเพื่อให้อินสแตนซ์ใหม่สามารถมีแอตทริบิวต์ตัวสร้างและเรายังสามารถใช้อินสแตนซ์ของการตัดสินได้
การคัดลอกรหัสมีดังนี้:
var foo = function () {}
foo.prototype = {constructor: foo}
var fooinstance = new foo;
fooinstance .__ โปรโต __ === foo.prototype; // true
fooinstance.constructor === foo; //จริง
ในความเป็นจริงการตัดสินอินสแตนซ์ไม่ได้ขึ้นอยู่กับตัวสร้าง แต่ในห่วงโซ่ต้นแบบดังที่แสดงในตัวอย่างต่อไปนี้
การคัดลอกรหัสมีดังนี้:
var foo = function () {};
foo.prototype = {};
var fooinstance = {};
FOOINSTANCE .__ โปรโต __ = foo.prototype;
console.log (fooinstance อินสแตนซ์ของ foo); // true
ใช้ค่าดั้งเดิมไม่มีตัวสร้าง
ค่าใดเป็นเท็จ: เท็จ "", null, 0, -0, nan, ไม่ได้กำหนด, สิ่งเหล่านี้เป็นเท็จ, อื่น ๆ เป็นจริง
แต่โปรดให้ความสนใจกับตัวอย่างต่อไปนี้
การคัดลอกรหัสมีดังนี้:
var a = บูลีน (เท็จ);
var b = บูลีนใหม่ ("");
if (a) {console.log (a);} // ไม่สามารถส่งออกได้
if (b) {console.log (b);} // boolean {[[primitivevalue]]: false} ใหม่หนึ่งเทียบเท่ากับวัตถุมันไม่ใช่เท็จ
บทความข้างต้นเป็นทฤษฎีเล็กน้อย แต่สิ่งเหล่านี้เป็นพื้นฐานสำหรับภาษาจาวาสคริปต์และคุณต้องเข้าใจอย่างชัดเจน