Symbol 详解与用法
发布时间:2025-12-10 11:49:32
浏览次数:14
目录
- 前言:
- 一、什么是 Symbol?
- 二、Symbol 的特点
- 三、Symbol 的使用
- 总结:
前言:
ES5中对象的属性名都是字符串,容易造成重名,污染环境
一、什么是 Symbol?
Symbol 是 ES6 中引入的一种新的基本数据类型,用于表示一个独一无二的值。它是JavaScript中的第七种数据类型,与undefined、null、Number(数值)、String(字符串)、Boolean(布尔值)、Object(对象)并列。
二、Symbol 的特点
Symbol属性对应的值是唯一的,解决命名冲突问题 let symbol = Symbol("one")let symbol1 = Symbol("one")console.log(symbol)// 结果:Symbol("one")
Symbol值不能与其他数据进行计算,包括同字符串拼串 let a = Symbol()let b = a+1console.log(b)// 结果:报错
for in, for of遍历时不会遍历symbol属性。 let symbol = Symbol();let obj = {};obj[symbol] = 'hello';for(var i in obj){console.log(obj[i])}// 结果:报错
三、Symbol 的使用
调用Symbol函数得到symbol值 let symbol = Symbol();let obj = {};obj[symbol] = 'hello';for(var i in obj){console.log(obj[i])}// 结果:报错
传参标识 let symbol = Symbol('one');let symbol2 = Symbol('two');console.log(symbol);// Symbol('one')console.log(symbol2);// Symbol('two')
内置Symbol值 - 除了定义自己使用的Symbol值以外,ES6还提供了11个内置的Symbol值,指向语言内部使用的方法。
- 对象的Symbol.iterator属性,指向该对象的默认遍历器方法(后边讲)
symbol != symbol symbol是唯一的 let one = Symbol("one")let two = Symbol("one")console.log(one == two)// 结果:false
创建symbol的属性值 let symbol = Symbol()let obj = {name:"张三疯",age:18}
fon in for of 不会遍历symbol obj[symbol] = "123"console.log(obj)for(var v in obj){console.log(obj[v])}// 结果:报错
symbol 值不能与其他类型的值进行运算 let obj = {toString(){return "123"}}let a = Symbol(obj)console.log(a+'1234')// 结果:报错
Symbol 值可以显式转为字符串。 let obj = {toString(){return "123"}}let a = Symbol(obj)console.log(String(a))// Symbol(123)console.log(a == String(a))// false
总结: