สัญลักษณ์ ชนิดข้อมูลดั้งเดิมใหม่ที่แสดงถึงเอกลักษณ์ เป็นข้อมูลประเภทที่ 7 ใน JavaScript อีกหกวิธีคือ: ไม่ได้กำหนด, null, สตริง, ตัวเลขและ
วัตถุ ค่าสัญลักษณ์ถูกสร้างขึ้นผ่านฟังก์ชันสัญลักษณ์ ชื่อแอตทริบิวต์ของออบเจ็กต์มีสองประเภท ประเภทแรกคือสตริงดั้งเดิม และอีกประเภทคือประเภทสัญลักษณ์ใหม่ ชื่อแอตทริบิวต์เป็นประเภทสัญลักษณ์และไม่ซ้ำกัน เพื่อให้มั่นใจว่าจะไม่ขัดแย้งกับชื่อคุณลักษณะอื่นๆ
ให้ s1=สัญลักษณ์() ให้ s2=สัญลักษณ์() console.log (s1) //เครื่องหมาย() console.log(s2) //เครื่องหมาย() console.log(s1===s2) //เท็จ //ฟังก์ชันสัญลักษณ์สามารถรับสตริงเป็นพารามิเตอร์ โดยระบุคำอธิบายของอินสแตนซ์สัญลักษณ์ ให้ s1=Symbol('xxx') ให้ s2=สัญลักษณ์('hhh') console.log (s1) //สัญลักษณ์(xxx) console.log(s2) //สัญลักษณ์(hh) console.log(s1===s2) //falseคุณไม่สามารถใช้คำสั่งใหม่ก่อนที่จะคัดลอก
ฟังก์ชันสัญลักษณ์รหัส และข้อผิดพลาดจะถูกรายงาน เนื่องจากสัญลักษณ์ที่สร้างขึ้นเป็นค่าชนิดดั้งเดิม ไม่ใช่วัตถุ นั่นคือเนื่องจากค่าสัญลักษณ์ไม่ใช่วัตถุจึงไม่สามารถเพิ่มคุณสมบัติได้ เทียบเท่ากับสายพิเศษ
Symbol.for() ยอมรับสตริงเป็นพารามิเตอร์ จากนั้นค้นหาค่าสัญลักษณ์โดยมีพารามิเตอร์เป็นชื่อ หากมี ให้ส่งคืนค่า Symbol ไม่เช่นนั้นให้สร้างค่า Symbol ใหม่โดยมีสตริงเป็นชื่อและลงทะเบียนค่าดังกล่าวแบบโกลบอล
ให้ s1 = Symbol.for('xxx') ให้ s2 = Symbol.for('xxx') console.log(s1 === s2) // จริง ฟังก์ชั่นฟู(){ กลับ Symbol.for('สวัสดี') - const x=foo() const y=Symbol.for('สวัสดี') console.log(x === y)//true
Symbol.for() และ Symbol() จะสร้างสัญลักษณ์ใหม่ ข้อแตกต่างคือแบบแรกจะถูกลงทะเบียนในสภาพแวดล้อมระดับโลกเพื่อค้นหา ในขณะที่แบบหลังจะไม่ลงทะเบียน Symbol.for() จะไม่ส่งคืนค่าประเภทสัญลักษณ์ใหม่ทุกครั้งที่มีการเรียก แต่จะตรวจสอบว่าคีย์ที่กำหนดนั้นมีอยู่แล้วหรือไม่ จากนั้นจึงสร้างค่าใหม่หากไม่มีอยู่
วิธีการ Symbol.keyFor() ส่งกลับคีย์ของค่าประเภทสัญลักษณ์ที่ลงทะเบียน
const s1 = สัญลักษณ์('foo') console.log(Symbol.keyFor(s1)) // ไม่ได้กำหนด const s2 = Symbol.for('foo') console.log(Symbol.keyFor(s2)) //foo
เนื่องจากค่าสัญลักษณ์ไม่เท่ากัน ซึ่งหมายความว่า ค่าสัญลักษณ์สามารถใช้เป็นตัวระบุและใช้ในชื่อแอตทริบิวต์ได้ ของออบเจ็กต์ เพื่อให้แน่ใจว่าจะไม่เกิดแอตทริบิวต์ที่มีชื่อเดียวกันปรากฏขึ้น สิ่งนี้มีประโยชน์เมื่อวัตถุประกอบด้วยหลายโมดูล เพื่อป้องกันไม่ให้คีย์ถูกเขียนทับหรือเขียนทับโดยไม่ตั้งใจ
เกรด const={ จางซาน:{ที่อยู่:'qqq',โทร:'111'}, หลี่ซือ:{ที่อยู่:'aaa',โทร:'222'}, หลี่ซือ:{ที่อยู่:'sss',โทร:'333'}, - console.log (เกรด) //จางซาน: {ที่อยู่: "qqq", โทรศัพท์: "111"} หลี่ซือ: {ที่อยู่: "sss", โทรศัพท์: "333"} // ค่าคีย์ของวัตถุไม่สามารถทำซ้ำได้ หากมีการทำซ้ำ ค่าที่ตามมาจะเขียนทับค่าก่อนหน้า // ใช้สัญลักษณ์เพื่อแก้ ซึ่งเทียบเท่ากับสตริงเฉพาะ const stu1=Symbol('李思') const stu2=สัญลักษณ์('李思') console.log(stu1===stu2) //เท็จ เกรด const={ [stu1]:{ที่อยู่:'aaa',โทร:'222'}, [stu2]:{ที่อยู่:'sss',โทร:'333'}, - console.log (เกรด) //จอห์น โด: {ที่อยู่:'sss',โทรศัพท์:'222'} จอห์น โด: {ที่อยู่:'sss',โทรศัพท์:'333'} console.log (เกรด [stu1]) //หลี่ ซือ: {ที่อยู่:'sss',โทร:'222'} console.log (เกรด [stu2]) //Li Si: {ที่อยู่: 'sss', โทร: '333'}
const sym=Symbol ('imooc') ผู้ใช้คลาส{ ตัวสร้าง (ชื่อ) { นี้.ชื่อ=ชื่อ นี้[sym]='imooc.com' - รับชื่อ(){ กลับ this.name+this[sym] - - ผู้ใช้ const = ผู้ใช้ใหม่ ('www') // วิธีการ for in ไม่สามารถข้ามไปยังแอตทริบิวต์ Symbol ได้เนื่องจากถูกซ่อนไว้สำหรับ (ให้ป้อนผู้ใช้) { console.log(คีย์)//ชื่อ - //Object.keys(obj) วิธีการไม่สามารถข้ามไปยังคุณสมบัติสัญลักษณ์สำหรับ (let key ของ Object.keys(user)){ console.log(คีย์)//ชื่อ - //Object.getOwnPropertySymbols(obj) สามารถรับได้เฉพาะคุณสมบัติ Symbol สำหรับ (let key ของ Object.getOwnPropertySymbols(user)){ console.log(คีย์)//สัญลักษณ์(imooc) - //Reflect.ownKeys(obj) คุณสมบัติอ็อบเจ็กต์สามารถรับได้สำหรับ (let key ของ Reflect.ownKeys(user)){ console.log (คีย์) //ชื่อ //สัญลักษณ์(imooc) }
สายวิเศษอ้างอิงถึงสตริงหรือค่าเฉพาะที่ปรากฏหลายครั้งในโค้ดและสร้าง การเชื่อมโยงที่แข็งแกร่ง กับโค้ด โค้ดที่มีรูปแบบที่ดีควรพยายามกำจัดสายเวทย์มนตร์และแทนที่ด้วยตัวแปรที่มีความหมายที่ชัดเจน
ฟังก์ชั่น getArea (รูปร่าง) { ให้พื้นที่ = 0 สวิตช์ (รูปร่าง) { กรณี 'สามเหลี่ยม': พื้นที่=1 หยุดพัก กรณี 'วงกลม': พื้นที่=2 หยุดพัก - พื้นที่ส่งคืน - console.log(getArea('สามเหลี่ยม')) //สามเหลี่ยมและวงกลมเป็นสายเวทย์มนตร์ ปรากฏหลายครั้งโดยก่อให้เกิด "การเชื่อมต่อที่แข็งแกร่ง" กับโค้ด ซึ่งไม่เอื้อต่อการดัดแปลงและบำรุงรักษาในภายหลัง ประเภทรูปร่าง const = { สามเหลี่ยม: สัญลักษณ์() วงกลม: สัญลักษณ์() - ฟังก์ชั่น getArea (รูปร่าง) { ให้พื้นที่ = 0 สวิตช์ (รูปร่าง) { รูปร่างกรณีประเภทสามเหลี่ยม: พื้นที่=1 หยุดพัก รูปร่างเคสประเภทวงกลม: พื้นที่=2 หยุดพัก - พื้นที่ส่งคืน - console.log(getArea(shapeType.triangle))
ฉันเป็นมือใหม่เกี่ยวกับส่วนหน้า หากมีข้อผิดพลาดใดๆ ในบทความนี้ โปรดให้คำแนะนำและปรึกษาฉันด้วย
[คำแนะนำวิดีโอแนะนำที่เกี่ยวข้อง: ส่วนหน้าของเว็บ]
ด้านบนคือเนื้อหาโดยละเอียดของการเรียนรู้ประเภทข้อมูล JavaScript และการวิเคราะห์โดยย่อของประเภทสัญลักษณ์ สำหรับข้อมูลเพิ่มเติม โปรดใส่ใจกับบทความอื่น ๆ ที่เกี่ยวข้องบนเว็บไซต์ภาษาจีน PHP!