สิ่งพื้นฐานดังกล่าวไม่ควรบันทึกอีกต่อไป แต่ทบทวนอดีตและเรียนรู้สิ่งใหม่ก่อน มาเริ่มด้วยประเภทข้อมูลกันเถอะ
JS หกประเภทข้อมูลหลัก: จำนวน, สตริง, วัตถุ, บูลีน, null, undefined
สตริง: อธิบายโดยคำพูดเดี่ยวหรือสองเท่าเช่น "สตริง"
หมายเลข: จำนวนเต็มหมายเลขจุดลอยตัวทั้งหมดเรียกว่าตัวเลขทั้งหมดคุณรู้ ~
บูลีน: นั่นเป็นเรื่องจริงและเท็จ
ไม่ได้กำหนด: ไม่ได้กำหนดนั่นคือคุณสร้างตัวแปร แต่อย่ากำหนดค่าให้กับมัน ~
NULL: ดังนั้นจึงเรียกว่า Sijiu NULL หมายถึงไม่มีอะไรไม่มีความหมายอะไรเลย
วัตถุ: ฉันยากที่จะอธิบายสิ่งนี้ เป็นประเภทอื่นที่ไม่ใช่ห้าข้างต้น
-
การตัดสิน ประเภท ข้อมูลประเภทข้อมูล
Typeof สามารถแก้ปัญหาการตัดสินประเภทข้อมูลส่วนใหญ่ได้ มันเป็นการดำเนินการแบบเดียว ก่อนค่าการดำเนินงานค่าส่งคืนเป็นสตริง สตริงนี้ระบุประเภทของหมายเลขการทำงาน ดังนั้นถ้า (typeof (ค่าของคุณ) == "string") {}
นี่คือผลลัพธ์ที่ส่งคืนโดยประเภทข้อมูลต่าง ๆ :
var a = "สตริง"; console.log (a); // stringvar a = 1; console.log (a); // numbervar a = false; console.log (a); // booleanvar a; console.log (typeof a); // undfinedvar a = null; console.log (typeof a); // ObjectVar a = เอกสาร; console.log (typeof a); // ObjectVar a = []; console.log (a); // ObjectVar a = function () {}; console.log (typeof a) // ฟังก์ชั่นนอกเหนือจากการตัดสินประเภทข้อมูลคุณยังสามารถตัดสินประเภทฟังก์ชั่นสิ่งนี้ชัดเจน ยกเว้นสี่ประเภทแรกคือโมฆะวัตถุและอาร์เรย์ส่งคืนวัตถุทุกประเภท
สำหรับประเภทฟังก์ชั่นฟังก์ชั่นจะถูกส่งกลับเช่น typeof (วันที่), typeof (eval) ฯลฯ
จากนั้นที่นี่เราสามารถขยายปัญหาอื่นที่เป็นที่นิยมมากและการแก้ปัญหาเป็นเรื่องธรรมดาอยู่แล้ว จะตรวจสอบได้อย่างไรว่าข้อมูลเป็นประเภทอาร์เรย์หรือไม่?
-
วิธี JS ในการกำหนดประเภทอาร์เรย์
วิธีที่ 1 อินสแตนซ์ของ
ดังนั้นอินสแตนซ์ชื่อหมายถึงอินสแตนซ์ตัวอย่าง ดังนั้นอินสแตนซ์จึงใช้เพื่อตรวจสอบว่าตัวแปรเป็นอินสแตนซ์ของวัตถุหรือไม่ มันเป็นสูตรการดำเนินการสามมิติ-ความแตกต่างที่สำคัญที่สุดระหว่าง typeof
อินสแตนซ์ของ B? Alert ("true"): แจ้งเตือน ("false") // โปรดทราบว่าค่า B เป็นประเภทข้อมูลที่คุณต้องการตัดสินไม่ใช่สตริงเช่นอาร์เรย์
ใช้เกาลัด:
var a = []; console.log (อาร์เรย์อินสแตนซ์) // ส่งคืนจริง
วิธีที่ 2 ตัวสร้าง
คำจำกัดความในคำจำกัดความของ W3C: คุณสมบัติคอนสตรัคเตอร์ส่งคืนการอ้างอิงไปยังฟังก์ชันอาร์เรย์ที่สร้างวัตถุนี้
มันส่งคืนตัวสร้างที่สอดคล้องกับวัตถุ ในคำจำกัดความมันไม่สอดคล้องกับอินสแตนซ์ของ แต่เอฟเฟกต์เหมือนกัน
ตัวอย่างเช่น: (อาร์เรย์อินสแตนซ์) // A เป็นอินสแตนซ์ของอาร์เรย์หรือไม่? จริงหรือเท็จ
(A.Constructor == อาร์เรย์) // ตัวสร้างที่สอดคล้องกับอินสแตนซ์ที่สอดคล้องกับอาร์เรย์หรือไม่? จริงหรือเท็จ
ใช้เกาลัด:
พนักงานฟังก์ชั่น (ชื่อ, งาน, เกิด) {this.name = name; this.job = งาน; this.born = born;} var bill = พนักงานใหม่ ("Bill Gates", "วิศวกร", 1985); console.log (bill.constructor); // ฟังก์ชั่นเอาท์พุทพนักงาน (ชื่อ, jobtitle, เกิด) {this.name = name; this.jobtitle = Job; this.born = เกิด;}จากนั้นวิธีการตัดสินประเภทต่าง ๆ คือ:
console.log ([]. constructor == array); console.log ({}. constructor == วัตถุ); console.log ("String" .constructor == สตริง); console.log ((123) .constructor == number); console.log-
วิธีการที่เข้มงวดมากขึ้นและทั่วไป:
ฟังก์ชั่น isarray (วัตถุ) {return object && typeof object === 'Object' && array == Object.constructor;}- - สังเกต:
การใช้อินสแตนซ์และตัวสร้างอาเรย์ที่ตัดสินจะต้องประกาศในหน้าปัจจุบัน! ตัวอย่างเช่นหน้า (หน้าหลัก) มีเฟรมเวิร์กหน้า (หน้าย่อย) มีการอ้างอิงในเฟรมเวิร์กอาร์เรย์จะถูกประกาศในหน้าเด็กและกำหนดให้กับตัวแปรของหน้าหลัก ในเวลานี้ตัวแปรจะถูกตัดสิน Array == Object.Constructor; จะกลับมาเป็นเท็จ
เหตุผล:
1. อาร์เรย์เป็นข้อมูลอ้างอิง ในระหว่างกระบวนการส่งสัญญาณเป็นเพียงการถ่ายโอนที่อยู่อ้างอิง
2. ที่อยู่ที่อ้างอิงโดยอาร์เรย์อาร์เรย์วัตถุของแต่ละหน้าแตกต่างกัน ตัวสร้างที่สอดคล้องกันของอาร์เรย์ที่ประกาศในหน้าเด็กคือวัตถุอาร์เรย์ของหน้าเด็ก สำหรับการตัดสินในหน้าหลักอาร์เรย์ที่ใช้ไม่เท่ากับอาร์เรย์ของหน้าเด็ก จำไว้ว่ามิฉะนั้นจะเป็นการยากที่จะติดตามปัญหา!
วิธีที่ 3: วิธีการตัดสินลักษณะ
วิธีการทั้งหมดข้างต้นมีข้อบกพร่องบางอย่าง แต่เราต้องเชื่อว่าภูมิปัญญาของมวลชนมีอำนาจทุกอย่าง เราสามารถตัดสินประเภทของมันตามลักษณะบางอย่างของอาร์เรย์
ฟังก์ชั่น isarray (object) {return object && typeof object === 'Object' && typeof object.length === 'number' && typeof object.splice === 'ฟังก์ชั่น' && // เพียงแค่กำหนดว่าคุณสมบัติความยาวนั้นสามารถระบุได้สำหรับอาร์เรย์การมีความยาวและประกบไม่จำเป็นต้องเป็นอาร์เรย์เพราะปัจจัยการตัดสินที่สำคัญที่สุดคือการเพิ่มแอตทริบิวต์ให้กับวัตถุ แต่ไม่ระบุคุณลักษณะความยาว
PS: ที่นี่เราได้รับความนิยมในวิธีการของ Propertyisenumerable:
วัตถุ. Propertyisenumerable (ชื่อ)
ตรวจสอบว่าสามารถแสดงแอตทริบิวต์ที่ระบุได้หรือไม่
หมายเหตุ: หากชื่อ Proname มีอยู่ในวัตถุและสามารถระบุได้อย่างละเอียดโดยใช้ A for ... ในลูปคุณสมบัติของ Propertyisenumerable จะส่งกลับจริง หากวัตถุไม่มีคุณสมบัติที่ระบุหรือคุณสมบัติที่ระบุไม่สามารถระบุได้ทรัพย์สินที่ได้รับการตรวจสอบบัญชีจะส่งกลับเท็จ
คุณสมบัติ Propertyisenumerable ไม่ได้คำนึงถึงวัตถุบัญชีในห่วงโซ่ต้นแบบ
ตัวอย่าง:
var a = อาร์เรย์ใหม่ ("Apple", "Banana", "Cactus"); Document.write (A.Propertyisenumerable (1));วิธีที่ 4 วิธีที่ง่ายที่สุด
ฟังก์ชั่น isarray (o) {return object.prototype.toString.call (o) === '[อาร์เรย์วัตถุ]';}ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ JavaScript คุณสามารถตรวจสอบ: "คำแนะนำอ้างอิง JavaScript" และ "คู่มือสไตล์รหัส JavaScript" ฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น