ES6-03 symbol数据类型,代理,遍历的使用

一,Symbol
类型:基本数据类型
目的:解决对象的属性名冲突。
注意点:
(1),symbol永远都是独一无二的值,即使相同参数,描述相同,两个symbol也是不相等的
(2),symbol类型的值作为对象的属性名的时候,一定要用中括号[ ],不能用点运算符
(3),for...in,for...of,keys( )以上几种方法都无法获取到symbol类型的属性。
symbol的方法
(1),Object.getOwnPropertySymbols()
找到symbol类型的属性并且返回一个数组(注意:用该方法前必须定义symbol类型)
let name =Symbol()
let age =Symbol()
let person ={
    [age]:"张三",
    [name]:12,
};
var n=Object.getOwnPropertySymbols(person);
console.log(n)//[Symbol(), Symbol()]

(2),Reflect.ownKeys
一次性获取所有类型的属性,不管它是字符串类型还是symbol类型
let name =Symbol()
let age =Symbol()
let person ={
    [age]:"张三",
    [name]:12,
    sex:"男"
};
console.log(Reflect.ownKeys(person))//Array(3)0:"sex"1:Symbol()2:Symbol()

(3),Symbol.for
根据参数名,去全局环境中搜索是否有以该symbol.for()参数为名的symbol值,有就返回它,没有就以该参数名来创建一个新的symbol值。所以如果用symbol.for()写两次相同的描述的时候,只是把同一个地址的symbol给了 两个变量而已,所以这两个变量全等
let name =Symbol.for()
let age =Symbol.for()
console.log(name===age)//true

(4),Symbol.keyFor
和symbol.for()用法相同
二,代理(proxy)
代理的步骤
1,首先需要先有一个目标对象,让它被代理
// 创建个人账户包含RMB和dollar
var personCount = { RMB:10,dollar:0};

2,创建代理实例
传入两个参数,第一个参数是被代理的对象,第二个参数是代理的距离实现对象
// 创建一个代理实例
var banker = new Proxy(personCount,{
get:function(target,property){
    if(target[property]>0){
        return target[property]
    }else{
        return '余额不足'
    }
},
set:function(target,property,value){
    // console.log(value)
    if(Number.isInteger(value)){
        console.log('请设置正确得数字') 
    }
        target[property] = value;
}
}) 

3,取消代理
let object = Proxy.revocable(personCount,banker)
console.log(object) //{proxy: Proxy, revoke: ƒ}
object.revoke();// 真正取消代理操作

...未完待续
三,新增遍历的使用
(1),for...of
for...of可遍历的对象包括数组,对象,字符串,set和map结构等具有iterator 接口的数据结构。
(2),for...of和for...in的区别
 for...of可以设置终止,通过if判断和break,continute的结合使用,for...in必须遍历完才会终止
 for...of 获取的索引或者其他内容,可以是数字类型,而for...in 一定是字符串类型
 for...of不可以遍历对象的属性,for...in可以遍历对象的属性

原因:能够被for...of正常遍历的,都需要实现一个遍历器Iterator。而数组,Set和Map结构,早就内置好了遍历器Iterator(又叫迭代器),它们的原型中都有一个Symbol.iterator方法;而Object对象并没有实现这个接口,使得它无法被for...of遍历
原文地址:https://www.cnblogs.com/adylz111/p/13419656.html