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前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)
![](https://i-blog.csdnimg.cn/blog_migrate/25bbaa71ed7bc4210c0c77ee740fc557.jpeg)
最后
正值金三银四招聘旺季,很多小伙伴都询问我有没有前端方面的面试题,特地整理出来赠送给大家!
出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)
![](https://i-blog.csdnimg.cn/blog_migrate/25bbaa71ed7bc4210c0c77ee740fc557.jpeg)
最后
正值金三银四招聘旺季,很多小伙伴都询问我有没有前端方面的面试题,特地整理出来赠送给大家!