symbol(唯一)

symbol

symbol是一种类型 我们之前学过六种类型 分别是 string number boolean undefined null object
symbol是什么意思 ==> 唯一
var b = "a";
var obj ={
	a:1,
	[b]:2
}
console.log(obj) // {a:2}  覆盖了
每次使用symbol都是一个新的值
var a = Symbol("a");
var b = Symbol("b");
var obj = {
	[a]:1,
	[b]:2,
	[Symbol()]: 3  // 永远拿不到这个值
}
console.log(obj) // Symbol(a): 1  Symbol(b): 2
console.log(obj[Symbol("a")]) // undefined
console.log(obj[a])// 1

对象的key必须是字符型 或者是symbol 如果不是以上两种类型 会自动转换为字符串
var obj = {}
var a = [1]
obj[a] =3 // 转换成了字符串1
console.log(obj["1"]) 3

var o1 = {a:1,b:2};
console.log(o1.toString()) // [object Object]


var o1 = {a:1}
obj[o1] = 3;
console.log(obj[{b:2}]) // 3   不管是啥都是[object Object]

变量也可以使用Symbol
const LEFT = Symbol(), RIGHT = Symbol();
var state = 'left';
function fn(state){
	 // 判断的唯一性,去除魔术字符串
	switch(state){
		case LEFT;
			console.log(111)
			break;
		case:RIGHT;
			console.log(222)
			break;
	}
}
fn(RIGHT)
for in 不能遍历Symbol属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`Symbol` 是 JavaScript 中的一种原始数据类型,用于创建唯一的、不可枚举的属性标识符,尤其是在需要存储在对象上的特殊键或属性时非常有用。它主要用于解决 ES5 及更早版本中对象键不可预测性和易冲突的问题。 ### `Symbol` 的特性: 1. **唯一性**:每个 `Symbol` 都是一个独一无二的值,这意味着两个 `Symbol` 对象只有通过 `.toString()` 方法获取其字符串表示形式才能判断它们是否相等,但在内部,它们确实是不同的对象实例。这种特性使得 `Symbol` 成为区分对象属性的理想选择。 2. **不可枚举性**:`Symbol` 创建的属性默认不会出现在 for...in 循环或 Object.keys() 返回的结果中,除非显式地将其标记为可枚举。 3. **常量**:在声明 `Symbol` 后,其值就是固定的,并且无法改变。一旦创建了 `Symbol`,其内部实现细节是无法修改的。 4. **兼容性**:现代浏览器及 Node.js 环境均支持 `Symbol` 类型,但在较老版本的 JavaScript 引擎中可能存在限制。 ### 使用示例 ```javascript const id = Symbol('id'); const obj = { [id]: 'uniqueId' }; console.log(obj[id]); // 输出 'uniqueId' console.log(Object.keys(obj)); // 不会输出'id' // 检查两个symbol是否相等 console.log(Symbol('test') === Symbol('test')); // false console.log(Symbol('test') == Symbol('test')); // false ``` ### 相关问题: 1. `Symbol` 和其他数据类型的比较,如 `String` 或 `Number`? 2. 如何使用 `Symbol` 来避免对象属性名称的冲突? 3. `Symbol` 是否可以用于创建事件类型或其他自定义标识符?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值