如何加强省市级政门户网站建设建设银行上海分行招聘网站
如何加强省市级政门户网站建设,建设银行上海分行招聘网站,版面设计绘画,网站建设的相关新闻1. Symbol概念以及引入原因
ES6 引入了的一种新的原始数据类型Symbol#xff0c;表示独一无二的值。它是 JavaScript 语言的第七种数据类型#xff0c;前六种是#xff1a;undefined、null、布尔值#xff08;Boolean#xff09;、字符串#xff08;String#xff09;、…1. Symbol概念以及引入原因
ES6 引入了的一种新的原始数据类型Symbol表示独一无二的值。它是 JavaScript 语言的第七种数据类型前六种是undefined、null、布尔值Boolean、字符串String、数值Number、对象Object。
重点
Symbol作用保证每个对象属性的名字都是独一无二的Symbol 可以接收字符串作为参数Symbol参数参数为对象会调用toString()作为key参数相同值也不同没有参数值也不同Symbol 值不能与其他类型的值进行运算会报错。Symbol 值可以显式转为字符串和布尔值不能转为Number数值。Symbol.iterator属性是一种特殊的key。指向该对象的默认遍历器方法凡是具有Symbol.iterator属性的对象都可以使用for...of进行遍历
2.Symbol作用保证每个对象属性的名字都是独一无二的
问题对象直接设置key为对象会将对象调用toString()方法转为[Object,Object]第二个值就覆盖第一个值了 let obj1 {a:1}let obj2 {a:2}let obj {};// 想要将obj的key设置为obj1的值obj[{a:1}] 1obj[obj1] 1;obj[obj2] 2;// 发现只有一个值且返回的obj键转成了[object Object]值为21被覆盖console.log(obj);// [object Object] 2
使用Symbol进行定义后发现就不会被覆盖 let obj1 Symbol({a:1})let obj2 Symbol({a:2})let obj {};obj[obj1] 1;obj[obj2] 2;console.log(obj); 3.Symbol 可以接收字符串作为参数
Symbol函数可以接受一个字符串作为参数表示对 Symbol 实例的描述主要是为了在控制台显示或者转为字符串时比较容易区分。
如下即使字符串相同s1和s2也不是一个 let s1 Symbol(foo);let s2 Symbol(foo);console.log(s1 s2); //false 3.Symbol参数参数为对象会调用toString()作为key参数相同值也不同没有参数值也不同
注意1 Symbol 的参数是一个对象就会调用该对象的toString方法将其转为字符串然后才生成一个 Symbol 值。
注意2Symbol函数的参数只是表示对当前 Symbol 值的描述因此相同参数的Symbol函数的返回值是不相等的。
注意3Symbol函数的参数没有值也不同 // 没有参数的情况let s1 Symbol();let s2 Symbol();s1 s2 // false// 有参数的情况let s1 Symbol(foo);let s2 Symbol(foo);s1 s2 // false
4.Symbol 值不能与其他类型的值进行运算会报错。 let sym Symbol(My symbol);console.log( your symbol is sym);//Uncaught TypeError: Cannot convert a Symbol value to a stringlet num Symbol(1);console.log(num1);Uncaught TypeError: Cannot convert a Symbol value to a string
5.Symbol 值可以显式转为字符串。 let sym Symbol(My symbol);console.log(String(sym));//Symbol(My symbol)console.log(sym.toString());//Symbol(My symbol)
6.Symbol 值也可以转为布尔值但是不能转为数值。 let sym2 Symbol();console.log(Boolean(sym2));//trueconsole.log(!sym2);//falseconsole.log(Number(sym2));//Uncaught TypeError: Cannot convert a Symbol value to a number
7.Symbol.iterator属性
可以看作一种特殊的key对象的Symbol.iterator属性指向该对象的默认遍历器方法。对象进行for...of循环时会调用Symbol.iterator方法返回该对象的默认遍历器。 凡是具有Symbol.iterator属性的对象都可以使用for...of进行遍历如果想让其可以通过for...of进行遍历就使用Symbol.iterator给其添加一个可遍历的属性
8. Symbol中Object.getOwnPropertySymbols方法获取指定对象的所有 Symbol 属性名。
Symbol类型时不可枚举的即属性上有Symbol时遍历不出来如果想要获取上面的Symbol属性就需要使用Object.getOwnPropertySymbols方法。Object.getOwnPropertySymbols方法可以获取指定对象的所有 Symbol 属性名。Object.getOwnPropertySymbols方法返回一个数组成员是当前对象的所有用作属性名的 Symbol 值。 const obj {};let a Symbol(a);let b Symbol(b);obj[a] Hello;obj[b] World;const objectSymbols Object.getOwnPropertySymbols(obj);console.log(objectSymbols); //[Symbol(a), Symbol(b)
9.Symbol的实际使用私有属性常量枚举
9.1作为常量进行枚举
常量枚举 js没有枚举类型的 // 常量枚举 js没有枚举类型的// 产生一个问题 1 2 不能重复 重复的话判断就会出错// symbol 哪怕你写重复了也没问题// const CODE_ONE 1;// const CODE_TWO 2;const CODE_ONE Symbol(1)const CODE_TWO Symbol(2)console.log(CODE_ONE CODE_TWO);
9.2作为私有属性对象进行遍历时不会遍历具有Symbol类型的数据
对象进行遍历时不会遍历具有Symbol类型的数据 // 私有属性let private Symbol(private)var obj {_name: 张三,[private]: 私有的属性,say: function () {console.log(this[private])}}console.log(Object.keys(obj))//[_name, say]
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89559.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!