次のコードを検討してください。
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
(もちろん、そうではありません:))?
もしそうなら、代替手段は何ですか?