山西网站建设软件,做拍拍拍拍网站,软件开发模型有几种并简述其特点,中建八局第一建设有限公司装饰ES6 symbol 是什么
ES5的对象属性名是字符串#xff0c;这容易造成属性名的冲突。symbol是一种机制#xff0c;保证每个属性的名字都是独一无二的。这样就从根本上防止属性名冲突。
它是一种原始数据类型Symbol,表示独一无二的值。它属于javaScript语言的原生数据类型之一。…ES6 symbol 是什么
ES5的对象属性名是字符串这容易造成属性名的冲突。symbol是一种机制保证每个属性的名字都是独一无二的。这样就从根本上防止属性名冲突。
它是一种原始数据类型Symbol,表示独一无二的值。它属于javaScript语言的原生数据类型之一。其他数据类型是,undefinde,null, 布尔值Boolean),字符串String),数值Number)大整数BigInt),对象(object)
symbol值通过symbol函数生成。这也就是说对象的属性名现在可以有两种类型一种是原来就有的字符串另一种是新增的Symbol类型。凡是属性名属于Symbol类型就都是独一无二的可以保证不会与其他属性名产生冲突
Symbol()函数不能使用new命令 否则会报错。这是因为Symbol是一个原始类型的值不是对象所以不能用new命令来调用。Symbol值不是对象所以也不能添加属性。基本上它是一种类似字符串的数据类型
Symbol函数的参数只是对当前Symbol值的描述因此相同参数的Symbol函数返回值是不相等的
Symbol值不能与其他类型的值进行运算会报错
Symbol函数创建symbol值时可以用参数添加一个描述
但是读取这个方法要将symbol显示转换为字符串
由于每一个symbol值都是不相等的这意味着只要symbol值作为标识符用于对象的属性名就能保证不会出现同名属性。这对于一个对象由多个模块构成的情况非常有用能防止某一个键不小心改写覆盖 属性名遍历
symbol值作为属性名遍历对象的时候该属性不会出现在for…in,for…of循环中也不会被object.keys(),object.getownproppertyNames(),json.stringify()返回 但是它也是一个私有属性有一个object.getownPropertysymbols()方法可以获取指定对象的所有symbol属性名。该方法返回一个数组成员是当前对象的所有用作属性名的symbol值
reflect.ownkeys()方法阶梯返回所有类型的键名包括常规键和symbol键名
有时我能希望使用同一个symbol值symbol.for方法可以做到这一点。它接受一个字符串作为参数然后搜索没有以该参数作为名称的symbol值。如果有就返回这个symbol值否则就新建一个以该字符串为名称的symbol值并将其注册到全局
symbol.for()与symbol()这两种写法都会生成新的symbol。它们的区别是前者会被登记在全局环境中共搜索后者不会。symbol.for()不会每次调用就返回一个新的symbol类型的值而是会先检查给定的key是否已经存在如果不存在才会新建一个值。
Symbol.keyFor()方法返回一个已登记的symbol类型的key
由于symbol没有登记机制所以用symbol创建的会返回undefinde