Symbol数据类型深入理解
之前学习过Symbol数据类型,但是仅仅是了解一些,没有过多深入了解。今天写这篇博客就是对这个数据类型的一些用法,以及内置属性的理解。
Symbol是一种原始数据类型,其创建之后会在栈内存中存在,并不会向引用值数据类型在堆内存中存在。其存在就是为了确保对象属性唯一,不会存在属性冲突。
一、基本用法
①Symbol()
<script>
let s1 = Symbol();
let s2 = Symbol();
console.log(s1===s2); //false
let s3 = Symbol("2021");
let s4 = Symbol("2021");
console.log(s3===s4); //false
</script>
②Symbol.for()
<script>
let s1 = Symbol.for("2021");
let s2 = Symbol.for("2021");
console.log(s1===s2); //false
</script>
解析:Symbol()中,当创建一个实例,无论传给Symbol的值是否相同,都会在内存中新建一个Symbol实例。Symbol.for()中,当实例化一个对象,这个对象就会在Window中存在,也就类似于全局变量,此时就会从全局中找是否存在Symbol.for()相同的实例,如果存在,就返回原来值,如果不存在就新开辟一个内存空间。所以Symbol.for()为true。
③Symbol.keyfor()取出Symbol.for()中的key值
let s1 = Symbol.for("name");
let key = Symbol.keyFor(s1);
console.log(key); //name
一个简单的Symbol例子
<script>