ES6之Symbol

一,什么是Symbol?

1.symbol 是es6新增的一个原始数据类型,代表独一无二的值。在ES5中javascript只有String Object Number undefined Boolean 五种数据类型,而Symbol就是第六种

二,Symbol语法

1.声明一个Symbol值,注意,虽然Symbol是一个构造函数,但不能使用new命令声明,这是因为生成的 Symbol 是一个原始类型的值,不是对象。也就是说,由于 Symbol 值不是对象,所以不能添加属性。

{
	let a = Symbol()
	let b = Symbol()
	console.log(a) // Symbol()
	console.log(b) // Symbol()
	console.log(a===b) // false 
	console.log(typeof a) // symbol
}

2.可以为Symbol值添加一个描述,便于区分。

{
	let a = Symbol('A')
	let b = Symbol('B')
	console.log(a) // Symbol('A')
	console.log(b) // Symbol('B')
	console.log(typeof a) // symbol
}

3.Symbol.prototype.description ES2019 提供了一个实例属性description,直接返回 Symbol 的描述

{
	let a = Symbol('A')
	let b = Symbol('B')
	console.log(a.description) // 'A'
}

三,Symbol作为对象的属性

1.Symbol作为对象的属性可以防止对象的键被误改覆盖。

{
	let mySymbol = Symbol();
	
	// 第一种写法
	let a = {};
	a[mySymbol] = 'Hello!'; // 注意,这里mySymbol不是字符串,是个Symbol值。
	
	// 第二种写法
	let a = {
	  [mySymbol]: 'Hello!'
	};
}

注意,Symbol 值作为对象属性名时,不能用点运算符,因为点运算后面会被解析成字符串,而不是Symbol

{
	const mySymbol = Symbol();
	const a = {};
	a.mySymbol = 'Hello!'; //这里的mySymbol是个字符串。
	a[mySymbol] // undefined
	a['mySymbol'] // "Hello!"
}

四,js内置的Symbol 值

1.Symbol.iterator: 对象的Symbol.iterator属性,指向该对象的默认遍历器方法,对象进行for...of循环时,会调用Symbol.iterator方法,返回该对象的默认遍历器,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值