在js已有的基本类型(字符串,数值,布尔型,null和undefined)之外,es6引入了一种新的基本类型:符号(Symbol)。符号起初被设计用于创建对象私有成员。

符号没有字面量形式,你可以使用全局Symbol函数来创建一个符号值。

let firstName = Symbol();
let person = {}; person[firstName] = "nicolas";
console.log(person[firstName]);

Symbol还可以接受一个额外的参数用于描述符号值。建议始终给符号提供描述信息,以便更好的阅读代码和进行调试。

使用符号值

let firstName = Symbol("first name");
let person = {
[firstName]: "nicolas"
} //让改属性变成只读的
Object.defineProperties(person, firstName, {
writable: false
}); let lastName = Symbol("last name");
Object.defineProperties(person, {
[lastName]: {
value: "cc",
writable: false
}
});
person[lastName] = "dd";
console.log(person[firstName]);//nicolas
console.log(person[lastName]);//cc

共享符号值

如果要创建共享符号值,应使用Symbol.for()方法而不是Symbol()方法。Symbol.for()接受单个字符串类型的参数,作为目标符号值的标识符,同时此参数也会成为该符号的描述信息。

let uid = Symbol.for("uid");
let object = {};
object[uid] = "12345";
console.log(object[uid]);//12345
console.log(uid);//Symbol(uid)

Symbol.for()方法首先会搜索全局符号注册表,看是否存在一个键值为“uid”的符号值。

检索符号属性

Object.keys()和Object.getPropertyNames()方法可以检索对象的所有属性和名称,前者返回所有的可枚举属性名称,后者返回所有属性名称而无视其是否可枚举。es6新增了Object.getOwnPropertySymbols()方法,以便可以检索对象的符号类型属性。

let uid = Symbol.for("uid");

let first = Symbol("first name");
let object = {
name: "cc",
age: 26
}; object[uid] = "12345";
object[first] = "111"; console.log(Object.getOwnPropertyNames(object));//["name","age"]
console.log(Object.getOwnPropertySymbols(object));//[Symbol(uid),Symbol(first name)]

深入理解ES6之—符号与符号属性的更多相关文章

  1. 【读书笔记】【深入理解ES6】#6-Symbol和Symbol属性

    在ES5及早期版本中,JS语言包含5中原始类型: 字符串型 数字型 布尔型 null undefined ES6引入了第六种原始类型: Symbol 创建Symbol let firstName = ...

  2. 深入理解ES6之—对象

    Object新方法 Object.is()方法 在js中比较两个值时,你可能会用相等运算符==或者严格相等运算符 ===.为了避免在比较时发生强制类型转换,许多开发者更倾向于使用后者. Object. ...

  3. 深入理解javascript对象系列第二篇——属性操作

    × 目录 [1]查询 [2]设置 [3]删除[4]继承 前面的话 对于对象来说,属性操作是绕不开的话题.类似于“增删改查”的基本操作,属性操作分为属性查询.属性设置.属性删除,还包括属性继承.本文是对 ...

  4. 《CSAPP》符号和符号表

    符号和符号表 每个可重定位目标模块m都有一个符号表,它包含m所定义和引用的符号的信息. 有三种不同的符号: 由m定义并能被其他模块引用的全局符号.对应非静态的C函数以及不带C static属性的全局变 ...

  5. 理解 ES6 Generator-next()方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 前端知识体系:JavaScript基础-原型和原型链-理解 es6 中class构造以及继承的底层实现原理

    理解 es6 中class构造以及继承的底层实现原理 原文链接:https://blog.csdn.net/qq_34149805/article/details/86105123 1.ES6 cla ...

  7. (js) 输入框只能输入中文、英文、数字、@符号和.符号

    只能输入中文.英文.数字.@符号和.符号<input type="text" onkeyup="value=value.replace(/[^\a-\z\A-\Z0 ...

  8. maven 在clean package时,出现:找不到符号 [ERROR] 符号: 方法 sqlDdlFilter(java.lang.String) 解决办法

    另一个项目中增加了,sqlDdlFilter 在调用的项目中clean package时,出现 找不到符号[ERROR] 符号: 方法 sqlDdlFilter(java.lang.String) 原 ...

  9. VS2013 warning C4018 "<” 有符号/无符号不匹配

    1, VS2013 warning C4018 "<” 有符号/无符号不匹配" 警告 出错代码: void show(const vector<int>& ...

  10. package.json中^符号和~符号前缀的区别

          开发中经常会使用npm install 安装依赖包,经常会看到^符号和~符号,现将二者的区别总结如下:     版本号 x.y.z : z :表示一些小的bugfix, 更改z的号, y ...

随机推荐

  1. Swift入门(五)——数组(Array)

    集合 集合的定义 Swift中提供了两种数据结构用于存放数据的集合,各自是数组(Array)和字典(Dictionary). 他们的主要差别在于数组中的元素由下标确定.而字典中的数据的值由数据的键(K ...

  2. AB串

    题目: 给定n个A和2n个B.用这些字符拼成一个字符串.要求这个串的全部前缀和后缀B的个数始终不少于A. (一个字符串的前缀是仅仅从开头到某个位置为止的子串,后缀是仅仅从某个位置到结尾的子串). 输入 ...

  3. EL表达式的简单实用

    EL表达式 EL(Expression Language) 是为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方 ...

  4. 解决iOS手势冲突问题

    今天在做一个效果的时候,由于子视图和父视图都有响应的事件,子视图的事件理所当然被父视图拦截掉了,接下来就做分析解决 1.  tableviewcell可以触发点击,同时tableview的父视图有点击 ...

  5. 《JavaScript语言精粹》【PDF】下载

    <JavaScript语言精粹>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382204 内容简介 javascript曾是&q ...

  6. SoapUI模拟REST MockService

    一.新建REST工程 二.添加URI 物流查询接口测试地址:http://www.kuaidi100.com/query?type=快递公司代号&postid=快递单号 三.输入入参,测试一下 ...

  7. js实现文字逐个出现动效

    效果 首先看下效果,这是在h5页面中常见的一中文字展现方式,那么是怎么实现的呢?其实很简单 思路 用一个定时器将预制的文字通过.substring(0, i)方法不断的赋给要显示的区域,i在定时器里面 ...

  8. 用keras作CNN卷积网络书本分类(书本、非书本)

    本文介绍如何使用keras作图片分类(2分类与多分类,其实就一个参数的区别...呵呵) 先来看看解决的问题:从一堆图片中分出是不是书本,也就是最终给图片标签上:“书本“.“非书本”,简单吧. 先来看看 ...

  9. bzoj 3653 [湖南集训]谈笑风生

    题目描述 设 T 为一棵有根树,我们做如下的定义: • 设 a 和 b 为 T 中的两个不同节点.如果 a 是 b 的祖先,那么称"a 比 b 不知道高明到哪里去了". • 设 a ...

  10. Servlet与Jsp的结合使用实现信息管理系统一

    PS:1:先介绍一下什么是Servlet? Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地 ...