Symbol-知名符号

本文介绍了JavaScript中的Symbol特性,包括Symbol.hasInstance、Symbol.isConcatSpreadable、Symbol.toPrimitive和Symbol.toStringTag的影响。通过实例展示了如何改变instanceof运算符的行为,控制数组concat方法的合并方式,以及自定义对象转化为原始值的规则和Object.prototype.toString方法的返回值。

知名符号就是有特殊含义的符号,通过Symbol配置得到

Symbol.hasInstance 影响instanceof运算符的结果

// 1. Symbol.hasInstance  
function A(){}
Object.defineProperty(A,Symbol.hasInstance,{
    value : function(){
        return false 
    }
})
const a = new A()
console.log(a instanceof A) //false

Symbol.isConcatSpreadable 对数组concat方法产生影响

// 2. Symbol.isConcatSpreadable
const arr =[3]
const arr2 = [4,5,6,7];
arr2[Symbol.isConcatSpreadable] = false;
const result = arr.concat(99,arr2)
console.log(result)  // [3, 99, Array(4)]

Symbol.toPrimitive 对数据类型的转换产生影响

// 3. Symbol.toPrimitive
const obj = {
    a : 1,
    b : 2
}
obj[Symbol.toPrimitive] = function(){
    return 123
}
console.log(obj + 123) // 246

Symbol.toStringTag 可以影响Object.prototype.toString的返回值

// 4. Symbol.toStringTag
class Person{
    [Symbol.toStringTag] = "Person"
}
const p = new Person()
console.log(p)
console.log(Object.prototype.toString.call(p)) // [object Person]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值