Symbol数据类型的创建和使用
文章目录
- 一、Symbol是什么?
- symbol对象不能用于数据运算,包括+、-、*、/等
- 二、Symbol类型的创建
- 三、Symbol的使用
一、Symbol是什么?
Symbol是ES6新增的基本数据类型。它的值通过Symbol函数生成,相同Symbol 函数返回的值是唯一的。
Symbol函数可以接收字符串作为参数,但是即使相同参数返回的也是唯一值。
即使是长得一样的,其实是不一样的两个东西。
示例:Symbol(’ miaov’) != Symbol(’ miaov’ )
symbol对象不能用于数据运算,包括+、-、*、/等
二、Symbol类型的创建
Symbol 类型都是独一无二的,可以保证不会与其他属性名产生冲突
let firstName = Symbol();
let person = {};
person[firstName] = "hhh";
console.log(person[firstName]); // "hhh"
注意: 由于Symbol 是一个原始类型的值,会返回一个属于自己的类型symbol,而不是什么string、object之类的,所以Symbol函数前不能使用new命令,否则会产生TypeError的报错。
let symbol = Symbol("test_symbol");
console.log(typeof symbol); // "symbol"
三、Symbol的使用
1、代码如下(简单示例):
var Person = (function() {var symbol = Symbol('n');function P(name) {this.name = name;this[symbol ] = 10;}return P;
})();
var p1 = new Person('莫涛');
console.log(p1); // P {name: "莫涛",Symbol(n): 10}
console.log(p1[Symbo1('n')]); //undefined; p1[Symbo1('n')等于调用了一次Symbol
2、属性私有化-数据保护(消除魔术字符串):
const shapeType = {triangle: Symbol()
};function getArea(shape, options) {let area = 0;switch (shape) {case shapeType.triangle:area = .5 * options.width * options.height;break;}return area;
}getArea(shapeType.triangle, { width: 100, height: 100 });
3、使用Symbol替代常量(防止对象属性名称冲突):
let mySymbol = Symbol();
// 第一种写法
let a = {};
a[mySymbol] = 'Hello!';
// 第二种写法
let a = {[mySymbol]: 'Hello!'
};
// 第三种写法
let a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });
// 以上写法都得到同样结果
a[mySymbol] // "Hello!"
Symbol数据类型的创建和使用相关推荐
- ES6 Symbol 数据类型
ES6-Symbol 类型 ES5 除类数组对象(类数组对象名可以为数字,对象必须有 length 属性,可以用数组下标的方式访问对象属性,但不能通过点的方式访问)外,对象属性名都是字符串,这很容易造 ...
- ES6学习笔记01:Symbol数据类型
ES6学习笔记01:Symbol数据类型 1.Symbol定义 浏览demo01.html: 2.Symbol作对象属性名 Symbol函数可以接收一个字符串作为参数,表示对Symbol实例的描述,输 ...
- JavaScript重难点解析1(数据类型——var、let、const区别,类型补充,“===”、“typeof”、“instanceof”区别,Symbol数据类型)
JavaScript重难点解析1(数据类型) var.let.const区别: 类型补充 "==="."typeof"."instanceof&quo ...
- js中的Symbol数据类型
最近,在学习vue的过程中碰到了一种从没有遇到过的数据类型:Symbol 查阅资料后,发现这是一种在ES6 中新添加的数据类型,好奇之下研究了下. Symbol 本质上是一种唯一标识符,可用作对象的唯 ...
- ES6 rest参数,扩展运算符,Symbol数据类型,迭代器和生成器 【详解加案例 】(二)
文章目录 1.ES6 rest 参数 2. ES6 扩展运算符 2.1 ES6 简介 2.2 应用 3. ES6 Symbol 数据类型 3.1 Symbol两种创建方式 3.2 Symbol注意事项 ...
- mysql 数据表创建字段类型_MySQL 数据类型简介 创建数据表及其字段约束
数据类型介绍 MySQL 数据类型分类 整型 浮点型 字符类型(char与varchar) 日期类型 枚举与集合 具体数据类型见这篇博客 MySQL表操作中的约束 primary key 主键约束 非 ...
- 听说ES6中新增了能够与众不同的Symbol数据类型
前言 小伙伴们大家好.不知道大家有没有遇到这样一种情况:在我们日常开发中,有时候可能会用到一些别人提供的对象,并且业务需要想要在这个对象的基础上进行一些扩展,添加一些属性或方法等.这个时候如果我们不了 ...
- MATLAB 基础知识 数据类型 表 创建和使用表
本文说明如何根据工作区变量创建表,使用表数据,并将表写入文件以供日后使用.table 是一个数据类型,可将异构数据和元数据属性(例如变量名称.行名称.说明和变量单位)收集到一个容器中. 表适用于列向数 ...
- 数据库——MySQL(一)(数据库常用命令、数据类型、创建表与修改表结构、约束、约束修改添加)
MySQL数据库的概述: MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库信息增.删.查.改管理 - ...
- MATLAB 基础知识 数据类型 时间表 创建时间表
本文演示如何创建时间表.合并时间表以及将多个时间表中的数据调整到一个公共时间向量中.公共时间向量可以包含其中一个时间表或两个时间表中的时间,也可以是一个您指定的全新时间向量.以下示例演示如何计算和显示 ...
最新文章
- 在windowsXP系统下,如何通过手机蓝牙让电脑上网
- 自定义标签报 无法为TAG [my2:hello]加载标记处理程序类[null]
- NET问答: C# 中是否有最高效的方式对大文件做 checksum ?
- LeetCode 988. 从叶结点开始的最小字符串(DFS)
- Hibernate之Session merge与update方法
- jrtplib的编译方法
- struts2 log4j_Struts2和Log4j集成示例项目
- delphi之模拟按键
- 常见查找算法之—二分查找
- 计算机辅助遥感制图的基本过程,南京信息工程大学2018年遥感原理与应用考研初试大纲...
- SpringCloud微服务---学习笔记(二)--多级缓存
- java标书_java软件项目投标技术标书.doc
- mysql查询出现ambiguous的问题
- 【Jquery练习】tab栏切换
- 哈尔滨学计算机编程学校,哈尔滨中小学生编程学校排名
- C# 数据操作系列 - 13 SugarSql初探
- 解决 - Adobe Acrobat/Adobe Reader 的 Windows 任务栏图标异常
- 英雄联盟手游登录注册地与服务器不匹配,英雄联盟手游提示Unable to login地区不支持怎么解决 地区不支持解决方法_手心游戏...
- 关于显著性检验,有你想要的!
- maven项目搭建步骤