es6 新增了一个原始类型Symbol,代表独一无二的数据

  javascript 原来有6中基本类型, Boolean ,String ,Object,Number, null , undefined (typeof null 是等于object)

//es6 引进Symbol 表示独一无二的值
console.log(typeof(null)) //objert
let person = {
name: '2121'
}
console.log(typeof(person)) //objert let s = Symbol();
console.log(typeof(s)) //symbol

Symbol表示独一无二的值,所有创建的不同Symbol 一定不相等,Symbol 不是对象,不能使用new去创建 ,Symbol 不能与其他类型进行运算,会报错

let aa = Symbol('11')
let bb = Symbol('11')
console.log(aa===bb) //false //let cc = new Symbol() //报错 Symbol is not a constructor //aa + 1 //报错 Cannot convert a Symbol value to a number
//symbol 可以传入一个参数,主要代表 描述,无实际意义 //Symbol 作为一个独一无二的值,主要用来作为属性名 ,保证不会出现同名字属性,且不会被覆盖 let sym = Symbol();
let amains = {
[sym]: '123456'
}
console.log(amains[sym]) //使用 symbol作为属性名 一定是表达式属性名
//case 适合使用symbol , 不会出现重复的条件

symbol 可以用来消除魔术字符串,魔术字符串,一个在代码中出现多次的字符串,有时候语义还不明确,

  在强类型语言中,我们可以使用枚举类型, 枚举类型一定是 int 类型,独一无二,还可以定义描述,而symol刚好符合这些

let typebook = Symbol ('资源类型图书')

function getResourcetype (type) {
let price = 0
switch(type) {
case typebook:
price = 50
break;
default:
price = 30
break;
}
return price
}
console.log(getResourcetype(typebook))

属性名的遍历

  回顾一下对象的遍历

  对象遍历的一共有几种方式 1.for in  2. Object.keys() 3.Object.getOwnPropertyNames() 4.Object.Object.getOwnPropertySymbols 5.Reflect.oenKeys

  而对于属性名是symbil 只有第四和第五能读取的到,1,for in 是读取自身对象上和原型链上可枚举的属性 2.Object.keys 读取自身,可枚举,非Symbol 属性名
  3. Object.getOwnPropertyNames 读取自身,包括不可枚举,非Symbol 属性 4.Object.getOwnPropertySymbols 读取自身 Symbol 属性,包括不可枚举
  5.Reflect.ownKeys 反射,这个后端同学就恨熟悉了,不管啥,都给你读取出来,但是只读取自身上的属性
let typebook = Symbol ('资源类型图书')
let wfywxhs = {
[typebook]: '无人与我',
1: 'ddd',
'dsa': '是不是'
}
Object.defineProperty(wfywxhs,'zizun',{
writable: false,
enumerable: false,
value: 'czcz',
configurable: 'wozhis'
})
const proto = {
foo: 'hello'
} Object.setPrototypeOf(wfywxhs,proto)
console.log(wfywxhs)
for(let item in wfywxhs) {
console.log(item) // 1 dsa foo foo为原形上的属性 读取不到不可枚举zizun 和symbol
}
console.log(Object.keys(wfywxhs)) //["1", "dsa"] 读取不到原形上foo属性 he symbol
console.log(Object.getOwnPropertyNames(wfywxhs)) //["1", "dsa", "zizun"] 读取自身上所有部位symbol 属性,不可枚举也能读取到
console.log(Object.getOwnPropertySymbols(wfywxhs))// [Symbol ('资源类型图书')] //读取为symbol 的属性
console.log(Reflect.ownKeys(wfywxhs)) //["1", "dsa", "zizun", Symbol(资源类型图书)] 读取自身上所有的属性,包括不可枚举和Symbol

es6 Symbol类型的更多相关文章

  1. ES6 Symbol类型 附带:Proxy和Set

    七种数据类型 ·Symbol ·undefined ·null ·Boolean ·String ·Number ·Object let a = Symbol('this is a symbol'); ...

  2. 用vue.js学习es6(四):Symbol类型

    一.Symbol类型: 1.ES6引入了一种新的原始数据类型Symbol,表示独一无二的值.它是JavaScript语言的第七种数据类型,前六种是:Undefined.Null. 布尔值(Boolea ...

  3. ES6笔记(4)-- Symbol类型

    系列文章 -- ES6笔记系列 Symbol是什么?中文意思是标志.记号,顾名思义,它可以用了做记号. 是的,它是一种标记的方法,被ES6引入作为一种新的数据类型,表示独一无二的值. 由此,JS的数据 ...

  4. ES6中的Symbol类型

    前面的话 ES5中包含5种原始类型:字符串.数字.布尔值.null和undefined.ES6引入了第6种原始类型——Symbol ES5的对象属性名都是字符串,很容易造成属性名冲突.比如,使用了一个 ...

  5. ES6中关于数据类型的拓展:Symbol类型

    ES5中包含5种原始类型:字符串.数值.布尔值.null.undefined.ES6引入了第6种原始类型——Symbol. ES5的对象属性名都是字符串,很容易造成属性名冲突.比如,使用了一个他人提供 ...

  6. ES6学习----let、const、解构赋值、新增字符串、模板字符串、Symbol类型、Proxy、Set

    这篇es6的学习笔记来自于表哥 表严肃,是我遇到过的讲课最通透,英文发音最好听的老师,想一起听课就去这里吧 https://biaoyansu.com/i/hzhj1206 ES6就是JS6,JS的第 ...

  7. JavaScript 为什么要有 Symbol 类型?

    Symbols 是 ES6 引入了一个新的数据类型 ,它为 JS 带来了一些好处,尤其是对象属性时. 但是,它们能为我们做些字符串不能做的事情呢? 在深入探讨 Symbol 之前,让我们先看看一些 J ...

  8. ES6 Symbol的应用场景

    一.简介 具体使用请参考:API ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值.它是 JavaScript 语言的第七种数据类型,前六种是:undefined.null.布尔值(B ...

  9. Symbol类型是不可枚举的

    const info = { [Symbol('a')]: 'b' } console.log(info)//{Symbol('a'): 'b'} console.log(Object.keys(in ...

随机推荐

  1. XLua基础

    一.Lua文件加载 1).Resources加载xluaTest文件 2).通过loader加载  3).自定义Loader(相当于Resources加载和loader加载结合)    先自定义Loa ...

  2. tag cloud的相关资料

    http://reverland.org/python/2013/01/28/visualize-your-shell-history/ https://github.com/reverland/sc ...

  3. ASP.NET Core Web App应用第三方Bootstrap模板

    引言 作为后端开发来说,前端表示玩不转,我们一般会选择套用一些开源的Bootstrap 模板主题来进行前端设计.那如何套用呢?今天就简单创建一个ASP.NET Core Web MVC 模板项目为例, ...

  4. JAVA高性能I/O设计模式

    Java中的IO方式 主要分为3种:BIO(同步阻塞).NIO(同步非阻塞)和AIO(异步非阻塞). BIO 同步阻塞模式.在JDK1.4以前,使用Java建立网络连接时,只能采用BIO方式,在服务器 ...

  5. 实战深度学习(上)OpenCV库

    在如今人工智能的浪潮下,无数模拟机器学习和深度学习的开发者工具倍出,其中在计算机图形学和计算机视觉里面最流行的一个库就是OpenCV库了.计算机图形学和计算机视觉学在我们的自动驾驶和仿生机器人当中有着 ...

  6. Spring相关问题

    1.什么是 Spring 框架?Spring 框架有哪些主要模块?Spring 框架是一个为 Java 应用程序的开发提供了综合.广泛的基础性支持的 Java 平台.Spring帮助开发者解决了开发中 ...

  7. vue项目实践-添加axios封装api请求

    安装 axios npm install axios --save 创建实例 (utils/fetch.js) axios 默认提交格式为:application/json 可使用 qs 模块(需要安 ...

  8. 动态规划----最长公共子序列(LCS)问题

    题目: 求解两个字符串的最长公共子序列.如 AB34C 和 A1BC2   则最长公共子序列为 ABC. 思路分析:可以用dfs深搜,这里使用到了前面没有见到过的双重循环递归.也可以使用动态规划,在建 ...

  9. Java设计模式之单例模式,笔记完整到不敢想象

    单例模式: 作用 保证一个类只有一个实例,并且提供一个访问该实例的全局访问入口 单例模式的常用 1.Windows的任务管理器2.Windows的回收站,也是一个单例应用3.项目中的读取配置文件的对象 ...

  10. Redis 设计与实现 (八)--排序、慢查询日志、监视器

    一.排序 SORT <key>  对一个数字值的key进行排序 1.alpha 对字符串类型的键进行排序 2.asc / desc redis 默认升序排序asc desc 与之相反 3. ...