考虑这段代码:
var a = {
b: {
c: true
},
d: {
e: false
}
};
function toggle() {
var prop='';
for (var i = 0; i<arguments.length; i++) {
prop += '.' + arguments[i];
}
eval('a'+prop+"=!a"+prop);
}
toggle('b', 'c');
console.log('a.b.c : ', a.b.c);
console.log('a.d.e : ', a.d.e);
toggle('d', 'e');
console.log('a.b.c : ', a.b.c);
console.log('a.d.e : ', a.d.e);
toggle('b', 'c');
console.log('a.b.c : ', a.b.c);
console.log('a.d.e : ', a.d.e);
toggle('d', 'e');
console.log('a.b.c : ', a.b.c);
console.log('a.d.e : ', a.d.e);
调用toggle('b', 'c')
or将分别翻转ortoggle('d', 'e')
的布尔值。a.b.c
a.d.e
除了邪恶(当然,它不是:))eval
之外,在这里使用有什么缺点吗?eval
如果是这样,有什么替代方案?