知名符号就是有特殊含义的符号,通过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]
本文介绍了JavaScript中的Symbol特性,包括Symbol.hasInstance、Symbol.isConcatSpreadable、Symbol.toPrimitive和Symbol.toStringTag的影响。通过实例展示了如何改变instanceof运算符的行为,控制数组concat方法的合并方式,以及自定义对象转化为原始值的规则和Object.prototype.toString方法的返回值。
404

被折叠的 条评论
为什么被折叠?



