在javascript中传递参数的问题

时间:2013-11-25 10:26:25

标签: javascript arguments

这是我的功能:

function findTextFromValue(source, id){
    var returnValue = '';
    //source = [{value:1, text:"Champagne"},{value:2, text:"Vallée de la Loire"},    {value:3, text:"Bordelais"},{value:4, text:"Sud-Ouest"},{value:5, text:"Languedoc-Roussillon"},{value:6, text:"Lorraine"},{value:7, text:"Alsace"},{value:8, text:"Jura"},{value:9, text:"Bourgogne"},{value:11, text:"Savoie"},{value:12, text:"Vallée du Rhône"},{value:13, text:"Provence"},{value:14, text:"Corse"},{value:15, text:"Coteaux du Lyonnais"},{value:16, text:"Bugey"}];
    //alert(source);
    $.each( source, function(key, value) {
        if(value.value == id){
            returnValue = value.text;
            return false;/* BREAK EACH ITERATION*/
        }
    });
    return returnValue;
}

当在函数内部设置源代码时,一切都运行良好。 当通过函数参数传递源时,我得到一个

TypeError: invalid 'in' operand e

硬编码数组是我从警报中复制/粘贴的数组,所以它应该是完全相同的。我错过了什么?

解决方案:

source = eval(source);

更好的解决方案

eval是邪恶的(我被告知......)好的答案是:

source = JSON.parse(source);

对于有此错误的人:

SyntaxError: JSON.parse: expected property name or '}'

这意味着您的JSON数组不包含双引号。示例:

[{"value":"1", "text":"Champagne"}, ...]

1 个答案:

答案 0 :(得分:1)

您几乎肯定会将字符串传递给函数而不是实际数组。我这样说是因为下面的代码重现了确切的错误:

var s = '[{value:1, text:"Champagne"},{value:2, text:"Vallée de la Loire"},    {value:3, text:"Bordelais"},{value:4, text:"Sud-Ouest"},{value:5, text:"Languedoc-Roussillon"},{value:6, text:"Lorraine"},{value:7, text:"Alsace"},{value:8, text:"Jura"},{value:9, text:"Bourgogne"},{value:11, text:"Savoie"},{value:12, text:"Vallée du Rhône"},{value:13, text:"Provence"},{value:14, text:"Corse"},{value:15, text:"Coteaux du Lyonnais"},{value:16, text:"Bugey"}]'

$.each(s,function(key, value) {
});

jsfiddle:http://jsfiddle.net/7VUgc/(观察控制台是否有错误)