1.Symbol是一个新的基本数据类型 是一个值类型的
1.使用Symbol函数执行得到一个Symbol数据类型
let sym1 = Symbol("foo");
let sym2 = Symbol("foo");
console.log(typeof sym1);//"symbol"
2.Symbol跟字符串类型相似 但是使用Symbol函数得到一个数据,每一个都是完全不同的
console.log(sym2===sym1);//false sym1和sym2没有关系
3.Symbol可以接受一个参数() 这个是对Symbol数据的一个描述
即使描述一样 但是值也是不一样的
4.一般当做对象的属性 因为任意一个Symbol()得到的值都是不同的 避免了同名属性被覆盖属性值的情况
let obj = {
[sym1]:"hello"
};
console.log(obj);//{Symbol(foo): "hello"}
obj[sym2] = "good";
console.log(obj);//{Symbol(foo): "hello", Symbol(foo): "good"} 同名的属性 但是并没有被覆盖掉 说明两个Symbol命名的属性不相干
5.Symbol值不可以跟其他值计算 也不可以进行字符串拼接
6.Symbol值是无法转数字的
console.log(Symbol("1") + 1);//报错: Cannot convert a Symbol value to a number
7.可以转为Boolean值
console.log(!Symbol("1"));//false
8.可以toString变成 显示字符串
console.log(Symbol("good").toString());//"Symbol(good)"
9.Symbol.for() 如果之前有相同描述(参数)的Symbol值,找到这个值返回 如果没有就得到一个包含这个参数的新值
使用Symbol.for() 参数相同 值就相同
let Aq1 = Symbol("hello");
let Aq2 = Symbol.for("hello");
let Aq3 = Symbol.for("hello");
console.log(Aq2 === Aq3);//true
console.log(Aq1 === Aq2);//false 因为Symbol值是完全不同的
10.Symbol.leyFor(Symbol值) 找到使用Symbol.for创建的值的描述(参数)
如果使用的是Symbol()创建的 是无法用keyFor获取的
console.log(Symbol.keyFor(Aq2));//"hello"
console.log(Symbol.keyFor(Aq1));//undefined 看来只能找到用Symbol.for() 创建的值的描述
本文深入探讨了JavaScript中Symbol数据类型的特点与应用。Symbol是一种不可变的原始数据类型,用于创建唯一的键名,避免属性名冲突。文章详细讲解了Symbol的创建、比较、描述以及与字符串、数字等类型的转换规则,并介绍了Symbol.for()和Symbol.keyFor()的使用场景。
1800

被折叠的 条评论
为什么被折叠?



