
สัญลักษณ์ ชนิดข้อมูลดั้งเดิมใหม่ที่แสดงถึงเอกลักษณ์ เป็นข้อมูลประเภทที่ 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!