ES6中的Symbol数据类型

ES6引入了Symbol数据类型,用于创建独一无二的属性标识,防止对象属性名冲突。Symbol值通过Symbol()函数生成且不可变,每个调用都返回不同的值。Symbol可用于创建私有属性,如在Object中定义私有成员。此外,Symbol.iterator用于定义对象的默认迭代器,可配合for...of循环使用。本文还探讨了Symbol与for...in迭代的关系,以及其在对象中的表现。
摘要由CSDN通过智能技术生成

Symbol:在ES5中,对象属性名都是字符串容易造成属性名冲突。为了避免这种情况的发生,ES6引入了一种新的原始数据类型Symbol,表示独一无二的值。
symbol 是js在ES6 中一种基本数据类型。Symbol() 函数返回的是 Symbol 类型的值,该类型具有静态方法和静态属性。
1.用法:
Symbol([desc])
[desc]是一个可选参数,字符串,可用于调试,但是不能访问Symbol自身

2.每一个 Symbol() 返回的值都是唯一的。

console.log(Symbol('foo') === Symbol('foo'))  // false

3.不可以使用new

var sym = new Symbol(); // TypeError报错

4、结合 Object() 函数,创建一个 Symbol 包装器对象

const name = Symbol()
const person = {
    [name]:'wyy', //私有成员,外部访问不到
    say(){
        console.log('hi,' , this[name])
    }
}
person.say()  // hi,wyy

5、迭代 Symbol.iterator
该方法为每一个对象定义了默认的迭代器。该迭代器可以被 for… of 循环使用。
自定义迭代器

const sym = Symbol()
console.log(sym.length)
var myIterator = {};
myIterator[Symbol.iterator] = function* () {
    yield 1;
    yield 2;
    yield 3;
};
console.log([...myIterator])  // [1, 2, 3]

Symbols 和 for… in 迭代
Symbol对象值访问不到

var obj = {};
obj[Symbol("a")] = "a";
obj[Symbol.for("b")] = "b";
obj["c"] = "c";
obj.d = "d";
console.log(obj)  // { c: 'c', d: 'd', [Symbol(a)]: 'a', [Symbol(b)]: 'b' }
for (var i in obj) {
   console.log(i);  // c  d
}

补充:
js数据类型:
值类型:String,Number,Boolean,Symbol,null,undefined。
引用类型:Object。
再补充:BigInt 长数字,还没正式标准化,预计要等到下个版本

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值