Страницы

Поиск по вопросам

вторник, 31 марта 2020 г.

Использование переменных в eval

#javascript


Есть такой код:

            function getResult(result) {
                response = result.langs;
                for (key in response){
                    switch (response[key][0]){
                        case 'A':
                        eval('core_object.language_code.a.'+key+'='+response[key]+';')
                            break;
    //Анологично до конца алфавита
}


Значение response это объект со множеством значений типа:

    {
    af: 'Afrikaans',
    am: 'Amharic'
    //И так далее
    }


Значение key = af и так далее, а response[key] = 'Afrikaans' и так далее.

Тут возникает проблема разобраться в сути которой я не могу: в коде eval('core_object.language_code.a.'+key+'='+response[key]+';')
переменная key, как и предполагалось используется как строка содержащая значение 'af'
а вот строка содержащаяся в response[key] используется как переменная из за чего получается
ошибка: ReferenceError: Afrikaans is not defined.

Почему и как это исправить?
    


Ответы

Ответ 1



Строка, которая подается в eval: core_object.language_code.a.af = Afrikaans; То, что справа от знака "равно", понимается как переменная. Но такой переменной нет. eval('core_object.language_code.a.'+key+'="'+response[key]+'";') Получится core_object.language_code.a.af = "Afrikaans";. Или eval('core_object.language_code.a.'+key+'=response.'+key+';') Получится core_object.language_code.a.af = response.af;. Или без eval: core_object.language_code.a[key] = response[key];

Ответ 2



А зачем там вообще eval? По моему так будет то же самое: case 'A': core_object.language_code.a[key] = response[key]; break;

Комментариев нет:

Отправить комментарий