[Symbol(‘es’)]不太能理解到

来源:3-14 代理Proxy(上)

Panda_io

2020-11-09

问题(1)请问老师这里的代理方法为什么会被调用两次?第二次还传入了“length”

let arr1 = []
arr1 = new Proxy(arr1,{
    set(target,prop,val){
        console.log(target,prop,val)
        if(typeof val === 'number'){
            target[prop] = val
            return true
        }else {
            throw new Error('请传入number类型的数值')
        }
    }
})
arr1.push(4)
arr1.push(6)

图片描述

问题(2)老师请问这里的Symbol为什么要加[ ],老师说Symbol是一种基本数据类型,加[]表明它是一个变量,我们要用变量的值来作为对象的key,我理解的基本数据类型 != 变量,这里就很懵逼。

//ownKeys
let obj3 = {
    name: 'imooc',
    [Symbol('es')]:'es'
}
console.log(Object.getOwnPropertyNames(obj))
写回答

1回答

谢成

2020-11-10

1、使用 push 方法给数组添加值的时候,length 属性会自动增加,所以也会拦截到length属性的变化

2、这是对象的属性名表达式的写法,这样拆开下应该更好理解:

const s = Symbol('es');

const obj = {

    name: 'imooc',

    [s]: 'es'

};


0
1
Panda_io
收到谢谢老师!
2020-11-10
共1条回复

JavaScript ES(6-11)全版本语法 前端都需要的基础课

前端无门槛学习,从ES6到ES11,一套课程掌握JS最新语法

1328 学习 · 296 问题

查看课程