14.4 Symbols ที่พบบ่อย
14.4.1 Symbol.iterator และ Symbol.asyncIterator
TBC
14.4.2 Symbol.hasInstance
instanceof จะเรียกใช้ method นี้แทนการเช็คปกติถ้ามี method นี้อยู่
// Define an object as a "type" we can use with instanceof let uint8 = { [Symbol.hasInstance](x) { return Number.isInteger(x) && x >= 0 && x <= 255; } }; 128 instanceof uint8 // => true 256 instanceof uint8 // => false: too big Math.PI instanceof uint8 // => false: not an integer
14.4.3 Symbol.toStringTag
เมื่อใช้ Object.prototype.toString.call() กับชนิดข้อมูลที่มากับ Javascript จะได้ผลดังนี้
Object.prototype.toString.call([]) // => "[object Array]"
Object.prototype.toString.call(/./) // => "[object RegExp]"
Object.prototype.toString.call(()=>{}) // => "[object Function]"
Object.prototype.toString.call("") // => "[object String]"
Object.prototype.toString.call(0) // => "[object Number]"
Object.prototype.toString.call(false) // => "[object Boolean]"
Object.prototype.toString.call(new Map()) //=> '[object Map]'
Object.prototype.toString.call(new Set()) //=>'[object Set]'
Object.prototype.toString.call(new Date()) //=>'[object Date]'
Object.prototype.toString.call(null)//=>'[object Null]'
Object.prototype.toString.call(undefined)//=>'[object Undefined]'
Object.prototype.toString.call(Symbol())//=>'[object Symbol]'
Object.prototype.toString.call(/./)//=>'[object RegExp]'
Object.prototype.toString.call(10n**100n)//=>'[object BigInt]'
Object.prototype.toString.call({}) //=> '[object Object]'
หากต้องการให้ Object คืนค่าที่ต่างออกไปให้ใช้ toStringTag
class Range { get [Symbol.toStringTag]() { return "Range"; } // the rest of this class is omitted here } let r = new Range(1, 10); Object.prototype.toString.call(r) // => "[object Range]"
14.4.4 Symbol.species
TBC
Comments
Post a Comment