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.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

    总结:

    需要做网站?需要网络推广?欢迎咨询客户经理 13272073477