es6实现枚举
枚举特点
枚举值不能重复
不能被修改
switch case可以直接判断
Object.freeze()Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。(来自)
总结:让被冻结的对象,不能再修改。
SymbolES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol的原因。(来自)
总结:凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。
实现 体现不可更改 const EnumSex = Object.freeze({ man: Symbol('男'), woman: Symbol('女') }) EnumSex.man = 1; console.log(EnumSex.man); // Symbol(男) 体现值的唯一性 const EnumSex = Object.freeze({ man: Symbol('男'), woman: Symbol('男') }) console.log(EnumSex.man === EnumSex.woman); // false 需要注意的地方开始实现体现值的唯一性的时候,看到man和woman都是Symbol(‘男‘),感觉执行的时候应该会报错,结果没有报错,还有点怀疑Symbol的唯一性。最后一对比发现是不同的。
Symbol中的参数只是对Symbol的一个描述,为了我们好区分它。
js学习-es6实现枚举
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/41562.html