使js对象循环冗余

问题描述 投票:0回答:1

我是JS api的测试员。用户将直接调用我们的方法。

例:

function funcWeGiveToUser(objFromUsers){
    // here we will loop over user provided object
}

开发人员以这样的方式编写funcWeGiveToUser,我们盲目地循环objFromUsers,所以我试图通过盲目地使用该对象来证明没有验证会发生坏事。

现在我想看看,如果通过提供包含getter的objFromUsers,我可以以某种方式破坏代码(我已经通过这个访问私有数据了,是的!)。

我想要的是让对象永远改变,这样当我们的API循环它时,它将是多余的 - 但我无法实现这一点。

我试着写这样一个对象:

var objFromUsers = {
    get addNewOne(){
        this.counter = this.counter || 1;
        this["element"+ (this.counter++)] = "some value";
        return 2;
    }
}

但如果我自己循环,这就是结果:

for (el in objFromUsers) console.log(el+": "+objFromUsers[el]);
// addNewOne: 2
console.log(objFromUsers)
// {counter: 2, element1: "some value"}

再次循环我确实得到了以前添加的元素:

for (el in objFromUsers) console.log(el+": "+objFromUsers[el]);
// addNewOne: 2
// counter: 3
// element1: some value
console.log(objFromUsers)
// {counter: 3, element1: "some value", element2: "some value"}

但是,我实际上希望循环将永远看到一个新的密钥,因此它将继续迭代。是否有可能实现这种循环冗余?

javascript getter-setter getter
1个回答
1
投票

for..in如何通过不受信任的输入失败的一个例子是一个Proxy对象,它在ownKeys陷阱中做了一些令人讨厌的事情:

evil = new Proxy({}, {
    ownKeys() {
        console.log('got ya');
        return [];
    }
});


for(x in evil) {
    console.log(x)
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.