ES6——Symbol

本文介绍了JavaScript中Symbol类型的特性,特别是在作为对象属性名时的唯一性,以及如何避免使用字符串常量可能导致的问题。作者还提供了如何定义和获取Symbol常量的方法,以及面试季前端面试题的相关资源。
摘要由CSDN通过智能技术生成

let sy1 = Symbol(“kk”);

sy === sy1; // false

使用场景:

作为属性名用法:

由于每一个 Symbol 的值都是不相等的,所以 Symbol 作为对象的属性名,可以保证属性不重名。

let sy = Symbol(“key1”);

// 写法1

let syObject = {};

syObjectsy = “kk”;

console.log(syObject); // {Symbol(key1): “kk”}

// 写法2

let syObject = {

};

console.log(syObject); // {Symbol(key1): “kk”}

// 写法3

let syObject = {};

Object.defineProperty(syObject, sy, {value: “kk”});

console.log(syObject); // {Symbol(key1): “kk”}

Symbol 作为对象属性名时不能用.运算符,要用方括号。因为.运算符后面是字符串,所以取到的是字符串 sy 属性,而不是 Symbol 值 sy 属性。

let sy = Symbol(“key1”);

let syObject = {};

syObjectsy = “kk”;

syObjectsy; // “kk”

syObject.sy; // undefined

注意点

Symbol 值作为属性名时,该属性是公有属性不是私有属性,可以在类的外部访问。但是不会出现在 for…in 、 for…of 的循环中,也不会被 Object.keys() 、Object.getOwnPropertyNames() 返回。如果要读取到一个对象的 Symbol 属性,可以通过 Object.getOwnPropertySymbols() 和 Reflect.ownKeys() 取到。

let syObject = {};

syObjectsy = “kk”;

console.log(syObject);

for (let i in syObject) {

console.log(i);

} // 无输出

Object.keys(syObject); // []

Object.getOwnPropertySymbols(syObject); // [Symbol(key1)]

Reflect.ownKeys(syObject); // [Symbol(key1)]

定义常量:

在 ES5 使用字符串表示常量。例如:

const COLOR_RED = “red”;

const COLOR_YELLOW = “yellow”;

const COLOR_BLUE = “blue”;

但是用字符串不能保证常量是独特的,这样会引起一些问题:

const COLOR_RED = “red”;

const COLOR_YELLOW = “yellow”;

const COLOR_BLUE = “blue”;

const MY_BLUE = “blue”;

function ColorException(message) {

this.message = message;

this.name = “ColorException”;

}

function getConstantName(color) {

switch (color) {

case COLOR_RED :

return “COLOR_RED”;

case COLOR_YELLOW :

return "COLOR_YELLOW ";

case COLOR_BLUE:

return “COLOR_BLUE”;

case MY_BLUE:

return “MY_BLUE”;

default:

throw new ColorException(“Can’t find this color”);

}

}

try {

var color = “green”; // green 引发异常

var colorName = getConstantName(color);

} catch (e) {

var colorName = “unknown”;

console.log(e.message, e.name); // 传递异常对象到错误处理

}

但是使用 Symbol 定义常量,这样就可以保证这一组常量的值都不相等。用 Symbol 来修改上面的例子。

const COLOR_RED = Symbol(“red”);

const COLOR_YELLOW = Symbol(“yellow”);

const COLOR_BLUE = Symbol(“blue”);

function ColorException(message) {

this.message = message;

this.name = “ColorException”;

}

function getConstantName(color) {

switch (color) {

case COLOR_RED :

return “COLOR_RED”;

case COLOR_YELLOW :

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

最后

正值金三银四招聘旺季,很多小伙伴都询问我有没有前端方面的面试题,特地整理出来赠送给大家!

资料领取方式:点击这里前往获取

出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

最后

正值金三银四招聘旺季,很多小伙伴都询问我有没有前端方面的面试题,特地整理出来赠送给大家!

资料领取方式:点击这里前往获取

前端资料图.PNG

  • 29
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值