25,带你全面解析前端框架体系架构view篇
文章目录
Symbol类型的使用
-
- Symbol简介
-
- Symbol类型的描述
Symbol不会隐式转字符串
Symbol类似作为对象的属性键
-
- 创建Symbol键
for…in中被跳过
隐藏自定义属性
Symbol全局注册表
系统Symbol
总结
=========================================================================
在前文《JavaScript的8种数据类型》中,我们已经简单的介绍过了JavaScript的Symbol类型,下面对其使用方法和使用场景做一个简单的介绍。
Symbol类型是JavaScript中的一种特殊的类型,特殊在所有的Symbol类型值都互不相同。我们可以使用“Symbol”来表示唯一的值,下面是创建Symbol对象的案例:
let id = Symbol();
这样我们就创建了一个Symbol类型的值,并把这个值存储在了变量id中。
Symbol类型的描述
我们在创建一个Symbol类型变量的时候,可以在参数中传入一些秒属性的字符串,用于描述这个变量的用途信息。
例如:
let id1 = Symbol(‘狂拽酷炫吊炸天的小明的id’);
let id2 = Symbol(‘低调奢华有内涵的婷婷的id’);
Symbol类型在任何时候都是不同的,即使他们拥有相同的描述信息,描述只是一个标签,除此之外就没有别的用途了,例如:
let id1 = Symbol(‘id’);
let id2 = Symbol(‘id’);
console.log(id1==id2);//false
这个标签存在的意义,个人认为和Symbol不能直观的看到内部具体值的特性有关,通过添加一个描述信息,让我们对变量的用途有更直观的了解。
Symbol不会隐式转字符串
JavaScript中的大多数类型都可以直接转换成字符串类型输出,所以我们不能直观的看到它的值到底是什么,例如我们可以直接用alert(123)把数字123转换成字符串弹出。
但是Symbol类型比较特殊,它不能直接转换,例如:
let id = Symbol();
alert(id);//报错,不能把Symbol类型转为字符串
JavaScript中的Symbol类型不能转成字符串是由于其内在的防治语言混乱的“语言保护”机制,因为字符串和Symbol在本质上有着区别,不应该将其中一个转换成另一个。
试想一下,如果Symbol可以转为字符串,那么它就变成了一个生成独一无二字符串的函数,就不再具备独立数据类型的必要。
如果我们真的想知道Symbol变量的值,我们可以使用.toString()方法,如下所示:
let id = Symbol(‘this is identification’);
console.log(id.toString());//Symbol(this is identification);
或者使用.description属性,获取描述信息:
let id = Symbol(‘加油,奥利给’);
console.log(id.description);//加油,奥利给”
根据JavaScript的规范,只有两种类型的值可以作为对象的属性键:
字符串
Symbol
如果使用其他类型,则会隐式的转为字符串类型。对象的键在前面的章节有详细的介绍,这里不再重复。
创建Symbol键
将Symbol作为键值有两种方法:
例1:
let id = Symbol(‘id’);
let user = {};
user[id] = ‘id value’;//添加Symbol键
console.log(user[id]);//id value
例2:
let id = Symbol(‘id’);
let user = {
[id]:‘id value’,//注意这里的方括号
};
console.log(user[id]);
以上两个案例展示了在对象中插入Symbol类型作为键的用法,需要注意的是,在访问属性时需要使用obj[id]而不是obj.id,因为obj.id代表的是obj[‘id’]。
如果我们使用Symbol作为对象的键会有什么效果呢?
for…in中被跳过
Symbol非常明显的一个特征是,如果对象中使用Symbol作为键,那么使用for…in语句是访问不到Symbol类型的属性的。
举个例子:
let id = Symbol(‘id’);
let user = {
name : ‘xiaoming’,
[id] : ‘id’,
};
for (let key in user) console.log(user[key]);
执行以上代码,得到以下结果:
xiaoming
可以发现,[id]对象的值没有被打印出来,说明在对象属性列表中,使用for … in会自动忽略Symbol类型的键。
同样的,Object.keys(user)也会忽略所有的Symbol类型的键。
这样的特性能带来非常有用的效果,例如我们可以创建只能自己能用的属性。
虽然我们没有办法直接获取到Symbol键,但是Object.assign方法能够复制所有的属性:
let id = Symbol();
let obj = {
[id] : ‘123’
}
let obj2 = Object.assign({},obj);
console.log(obj2[id]);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。






既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)

基础学习:
前端最基础的就是 HTML , CSS 和 JavaScript 。
网页设计:HTML和CSS基础知识的学习
HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片、视频等。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

CSS样式是表现。就像网页的外衣。比如,标题字体、颜色变化,或为标题加入背景图片、边框等。所有这些用来改变内容外观的东西称之为表现。

动态交互:JavaScript基础的学习
JavaScript是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用JavaScript来实现的。
含文字、图片、视频等。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
[外链图片转存中…(img-15p0eOWD-1711895277782)]
CSS样式是表现。就像网页的外衣。比如,标题字体、颜色变化,或为标题加入背景图片、边框等。所有这些用来改变内容外观的东西称之为表现。
[外链图片转存中…(img-Cr0C05cQ-1711895277783)]
动态交互:JavaScript基础的学习
JavaScript是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用JavaScript来实现的。

