Symbol

作者: 行走的蛋白质 | 来源:发表于2020-05-14 23:48 被阅读0次
  • Symbol 是一种新的原始数据类型,表示独一无二的值
const sym1 = Symbol('sym')
const sym2 = Symbol('sym')
console.log(sym1 === sym2) // false
  • Symbol 可以通过 Symbol() 函数来生成,它不是构造函数没有 constructor 属性,所以不能通过 new Symbol() 来创建,不是对象所以也不能通过 . 来赋值,可以在 Symbol 函数中传入一个字符串表示说明,通过 description 属性来获取
const sym1 = Symbol('sym')
sym1.name = 'symbol'
console.log(sym1) // Symbol(sym)
console.log(sym1.name) // undefined
console.log(sym1.description) // sym
  • Symbol 可以用来解决字符串耦合问题
const obj1 = {
    name: 'sym'
}
const obj2 = {
    name: 'sym'
}
const obj3 = {
    [obj1.name]: 'sym1',
    [obj2.name]: 'sym2'
}
console.log(obj3) // { sym: 'sym2' }
console.log(obj3[obj1.name]) // sym2
console.log(obj3[obj2.name]) // sym2
const obj1 = {
    name: 'sym',
    key: Symbol('sym')
}
const obj2 = {
    name: 'sym',
    key: Symbol('sym')
}
const obj3 = {
    [obj1.key]: 'sym1',
    [obj2.key]: 'sym2'
}
console.log(obj3) // { [Symbol(sym)]: 'sym1', [Symbol(sym)]: 'sym2' }
console.log(obj3[obj1.key]) // sym1
console.log(obj3[obj2.key]) // sym2
  • 对象遍历 Symbol 丢失问题
const sym = Symbol()
const obj = {
    name: 'sym',
    [sym]: 'symbol'
}
for(let k in obj) {
    console.log(k) // name
}
Object.getOwnPropertySymbols(obj).forEach(n => {
    console.log(n) // Symbol()
})
Reflect.ownKeys(obj).forEach(j => {
    console.log(j) // name Symbol()
})

相关文章

  • Symbol

    Symbol 每个Symbol都是独一无二的Symbol() !== Symbol() Symbol 不能进行运算...

  • Symbol

    1、window.Symbol 2、不允许new Symbol 3、symbol() !== symbol() 4...

  • Symbol学习笔记

    一.Symbol是什么 typeof Symbol() === 'symbol',symbol是js中第7种基本类...

  • ES6补充以及Node事件轮询

    Symbol es6中新增了symbol类型,symbol类型的值是通过symbol函数生成的,相同symbol函...

  • 深入理解ES6六

    Symbol ES6新增的数据类型Symbol 创建Symbol:通过去全局的Symbol函数创建一个Symbol...

  • JS-学习ES6之-Symbol数据类型[整理稿]

    为什么要有Symbol Symbol可以传参数 Symbol 作为属性名的用法 Symbol.for() 1. 为...

  • Symbol简单理解

    Symbol 概述 作为属性名的symbol 属性名的遍历 Symbol的方法 内置的symbol值 概述 Sym...

  • ES6-新增数据类型

    symbol类型 全局函数window.Symbol() typeof window.Symbol() 返回的类型...

  • ES6-Symbol

    创建Symbol实例let s1 = Symbol()let s2 = Symbol('another symbo...

  • umdh--查找内存泄漏--使用方法

    set _NT_SYMBOL_PATH=symbol目录多个目录,以’;’隔开 例:Set _NT_SYMBOL_...

网友评论

      本文标题:Symbol

      本文链接:https://www.haomeiwen.com/subject/fqbfohtx.html