美文网首页
Symbol 使用场景

Symbol 使用场景

作者: Allan要做活神仙 | 来源:发表于2022-09-19 15:54 被阅读0次

1、作为对象属性名

let obj = {
    [Symbol("name")]:"一斤代码",
    age:18,
    title:"Engineer",
}
console.log(Object.keys(obj))
 
for(let p in obj){
    console.log(p);
}
 
console.log(Object.getOwnPropertyNames(obj));
image.png

由上可知,Symbol类型的Key不能通过Object.keys()或者for...in来枚举,它未被包含在对象自身的属性名集合中,所以,利用该特性,

可以把不对外开放的属性用Symbol定义

2、作为常量

我们经常使用常量来代表一种业务逻辑的几种不同的类型,我们希望这些常量是唯一的关系,经常需要为常量赋一个值,常量少的时候还算好,但是常量一多,你可能还得花点脑子好好为他们取个好点的名字。

const TYPE_AUDIO = "AUDIO";
const TYPE_VIDEO = "VIDEO";
const TYPE_IMAGE = "IMAGE";
 
function handleFileResource(resource) {
  switch (resource.type) {
    case TYPE_AUDIO:
      playAudio(resource);
      break;
    case TYPE_VIDEO:
      playVideo(resource);
      break;
    case TYPE_IMAGE:
      previewImage(resource);
      break;
    default:
      throw new Error("Unknown type of resource");
  }
}

使用Symbol就更加方便了

const TYPE_AUDIO = Symbol();
const TYPE_VIDEO = Symbol();
const TYPE_IMAGE = Symbol();

这样就可以保证这3个常量是唯一的值了

3、定义类的私有属性/方法

在javaScript中,没有如同java等面向对象语言的定义私有属性的private方法,类上所有定义的属性或者方法都是可以公开访问的。有了Symbol以及模块化机制,类的私有属性和方法变得可能。

a.js中:

const PASSWORD = Symbol()
 
class Login {
    constructor(username,password){
        this.username = username;
        this[PASSWORD] = password
    }
 
    checkPassword(pwd){
        return this[PASSWORD] === pwd
    }
}
 
export default Login;

b.js中:

import Login from "./a";
 
const login = new Login("admin", "123456");
 
login.checkPassword("123456"); // true
 
login.PASSWORD; // undefined
login[PASSWORD]; // undefined
login["PASSWORD"]; // undefined

由于Symbol常量PASSWORD被定义在a.js模块中,外面模块b.js无法获取此Symbol(Symbol是唯一的),因此PASSWORD只能被限定在a.js中使用,使用它来定义类属性外部模块无法访问,达到了私有化的目的。

相关文章

  • ES6 Symbol类型

    每个Symbol实例都是唯一的 应用场景: 使用Symbol来作为对象属性名(key) Symbol类型的key是...

  • Symbol 使用场景

    1、作为对象属性名 由上可知,Symbol类型的Key不能通过Object.keys()或者for...in来枚举...

  • Symbol的使用场景

    ES6第七种数据类型-----Symbol 已经有的6种数据类型: Undefined,Null,布尔值,字符串,...

  • es6 — Symbol - 2020-06-08

    基础数据类型 可通过调用Symbol()函数来创建一个Symbol实例: 每个Symbol实例都是唯一的 场景1:...

  • 独一无二的Symbol

    本文目录: 1.什么是Symbol 2.Symbol的应用场景 3.注意事项 4.Symbol.for方法 1.什...

  • Symbol (es6)

    1.为什么要使用Symbol 2.Symbol的基本使用 3.Symbol值作为key 4.遍历对象中的Symbo...

  • 【TS】使用Symbol报错

    使用webstorm写typescript时,Symbol会报错:cannot find name 'Symbol...

  • vue cli3使用svg-sprite-loader

    iconfont symbol对比svg-sprite-loader iconfont symbol在SVG使用上...

  • es6-symbol的用法

    Symbol数据类型 Synmbol 数据类型提供一个独一无二的值。 Symbol的声明 Symbol的使用 根据...

  • Symbol

    es6新增数据类型 -- 基本类型 值是由symbol函数调用产生的 Symbol的基本用法 Symbol的使用属...

网友评论

      本文标题:Symbol 使用场景

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