2016-09-10 4 views
3

У меня есть некоторые переменныеОценить строку в JavaScript без Eval

var a = true; 
var b = false; 
var c = true; 

и массив

var array = ['a', 'b', 'c']; 

Как можно оценить элементы соответствующих их значение истинности?

Я знаю, что могу использовать eval(), но так как считается вредным, есть ли другие варианты?

В некоторых случаях я предпочел бы «правда» о назначении в качестве

var truth = {'a': true, 'b': false, 'c': true}; 

и, кажется, eval() не принимает другой вариант (например eval('a+b', {a: 1, b: 3}) = 4)

+0

Знаете ли вы скобки обозначения, такие как 'окна [ 'а'] == true', если 'a' является глобальной переменной? – 4castle

+0

Не ссылайтесь на переменные, используя строки. Зачем вам это нужно? Переменные, имена которых заданы элементами, уже имеют значения - зачем их «оценивать» их? Ваш последний пример можно легко обрабатывать как функцию, написанную 'add (({a, b}) => a + b) ({a: 1, b: 3})'. –

+0

Давайте будем ясно, хотя ... 'eval' - это инструмент, который обычно используется для зла. Его можно использовать отлично и правильно, если использовать осторожно и экономно. Я никогда не отправлял с ним какой-либо библиотечный код, но я также, вероятно, никогда не столкнулся с каким-то безумием, которое вы пытаетесь сделать. :) В самом деле, ваша проблема, скорее всего, заключается в том, как вы пытаетесь атаковать ее в первую очередь, а не в какой-то магической потребности в конструкции, подобной eval. –

ответ

0

В то время как это не отвечает на вопрос, он должен делать то, что вам нужно сделать.

Вместо того, чтобы создавать эти переменные, вы можете сделать их свойствами локального объекта, а затем использовать их.

var obj = { 
    a: true, 
    b: false, 
    c: true 
}; 

var array = ['a', 'b', 'c']; 

array.forEach(function(val) { 
    console.log("Value ", val, "is ", obj[val]); 
}); 

Из-за того, как вещи названы, вы также можете получить доступ к

obj.a = false; 

или

obj["b"] = true; 
+0

То, что мне нужно. благодаря – Jamgreen

0

Javascript, к сожалению, только обеспечивает eval, который работает с областями, которые находятся вне контроля программиста (в Python вместо этого вы можете указать, что должно быть глобальной и локальной средой).

Для достижения того, что вы хотите, решение реализует ваш собственный язык. Это может показаться огромной вещью, но на самом деле это может быть выполнимым и даже разумным в зависимости от того, для чего вам это нужно.

Если это необходимо только для конфигурации, то решение в мире Javascript должно использовать один объект JSON, отказываясь от возможности иметь небольшие вспомогательные функции или условные обозначения в самой конфигурации.

0

Если ваши переменные глобальны, вы можете использовать window или this (когда this указывает на объект окна).

var a = true; 
 
var b = false; 
 
var c = true; 
 
var array = ['a', 'b', 'c']; 
 
for(var i = 0; i < array.length; i++){ 
 
    console.log(this[array[i]]); 
 
}

+1

Чтобы сделать его более понятным для OP, глобальные переменные в javascript являются ключами объекта 'window'. – Jashwant

Смежные вопросы