Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用eval()JS动态创建对象_Javascript_Jquery_Dom - Fatal编程技术网

Javascript 使用eval()JS动态创建对象

Javascript 使用eval()JS动态创建对象,javascript,jquery,dom,Javascript,Jquery,Dom,我正在尝试用javascript动态创建一个对象。以下是我编写的JS代码: var table = $("#eidtPersonalInfoTbl"); var trs = table.find('tr'); var obj = { }; $(trs).each(function(index, row){ var field = $(row).find('td').eq(0).html(); var value = $(row).find('td').eq(1).html

我正在尝试用javascript动态创建一个对象。以下是我编写的JS代码:

var table = $("#eidtPersonalInfoTbl");
var trs = table.find('tr');

var obj = { };

$(trs).each(function(index, row){
     var field = $(row).find('td').eq(0).html();
     var value = $(row).find('td').eq(1).html();
     eval('obj.' + field + ' = ' + value );
});
下面是表格的HTML标记:

<table class="table" border="1" id="eidtPersonalInfoTbl">
<tr> 
    <td class="span3 hidden-phone" > Name </td>
    <td class="span5"> Name </td>       
</tr>
<tr>
    <td class="span3 hidden-phone"> Address</td>
    <td class="span5"> Address </td>
</tr>
<tr>
    <td class="span3 hidden-phone">Area</td>
    <td class="span5"> Area</td>                                        
<tr>
<tr>
    <td class="span3 hidden-phone">Gender</td>
    <td>Male</td>                                                       </tr>           
<tr> 
    <td class="span3 hidden-phone" > Salutation </td>
    <td class="span5"> Dr</td>                                      
</tr>   
<tr>
    <td class="span3 hidden-phone">State</td>
    <td class="span5"> State </td>                                          
<tr>
    <tr>
    <td class="span3 hidden-phone">City</td>
    <td class="span5"> City </td>                                       
</tr>
<tr> 
    <td class="span3 hidden-phone" > Postel Code </td>
    <td class="span5"> Postel Code </td>                                        
</tr>
<tr> 
    <td class="span3 hidden-phone" > Phone# </td>
    <td class="span5"> 04128741 </td>                                       
</tr>
<tr> 
    <td class="span3 hidden-phone" > Mobile# </td>
    <td class="span5"> 03218741525</td>                                     
</tr>
<tr> 
    <td class="span3 hidden-phone" > Cover Letter </td> 
    <td>Cover letter goes here</td>
</tr>                       
<tr>
    <td> <input type="submit" name="per-det" class="btn btn-success span5" value="Update and Cont."></td>
</tr>                                       

名称
名称
住址
住址
地区
地区
性别
男性的
打招呼
博士
状态
状态
城市
城市
邮政编码
邮政编码
电话#
04128741
移动电话
03218741525
求职信
求职信在这里

每当我尝试执行这个时,它都会给我这个错误

未定义的变量名


使用它更容易、更安全、更快:

obj[field] = value;
。。。而不是
eval('obj.+field+'=“'+value+'”)
,这显然具有相同的目的

您现在看到的是因为
value
应该用引号括起来。例如,如果
字段
都等于
'Name'
(字符串),则当前的求值表达式将如下所示

obj.Name = Name
。。。显然导致“未定义变量名”错误


这里有两个旁注。首先,在这一行中,在jQuery对象中再次包装
trs
是没有意义的

$(trs).each(function(index, row)
。。。因为它已经是jQuery对象(table.find('tr'))的结果)。如果遵循一个简单的约定,这种冗余更容易看到:使用
$
存储jQuery对象的所有变量的前面的名称:

var $table = $("#eidtPersonalInfoTbl");
var $trs   = $table.find('tr');
// ...

// $($trs) - obviously redundant
其次,在这些行中两次遍历DOM有点浪费:

 var field = $(row).find('td').eq(0).html();
 var value = $(row).find('td').eq(1).html();
我宁愿把它改写成这样:

 var $tds = $(row).find('td');
 var field = $tds.eq(0).html(); // or just $tds[0].innerHTML;
 var value = $tds.eq(1).html(); // or just $tds[1].innerHTML;

使用它更容易、更安全、更快:

obj[field] = value;
。。。而不是
eval('obj.+field+'=“'+value+'”)
,这显然具有相同的目的

您现在看到的是因为
value
应该用引号括起来。例如,如果
字段
都等于
'Name'
(字符串),则当前的求值表达式将如下所示

obj.Name = Name
。。。显然导致“未定义变量名”错误


这里有两个旁注。首先,在这一行中,在jQuery对象中再次包装
trs
是没有意义的

$(trs).each(function(index, row)
。。。因为它已经是jQuery对象(table.find('tr'))的结果)。如果遵循一个简单的约定,这种冗余更容易看到:使用
$
存储jQuery对象的所有变量的前面的名称:

var $table = $("#eidtPersonalInfoTbl");
var $trs   = $table.find('tr');
// ...

// $($trs) - obviously redundant
其次,在这些行中两次遍历DOM有点浪费:

 var field = $(row).find('td').eq(0).html();
 var value = $(row).find('td').eq(1).html();
我宁愿把它改写成这样:

 var $tds = $(row).find('td');
 var field = $tds.eq(0).html(); // or just $tds[0].innerHTML;
 var value = $tds.eq(1).html(); // or just $tds[1].innerHTML;

您忘记了值字符串周围的引号。尝试
eval('obj.'+field+'=“+value+”)。您忘记了值字符串周围的引号。尝试
eval('obj.'+field+'=“+value+”)。我同意这个答案。别忘了javascript对象只不过是一个关联数组。我同意这个答案。不要忘记javascript对象只不过是一个关联数组。