最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Dynamically creating an object using eval() JS - Stack Overflow

programmeradmin5浏览0评论

I am trying to dynamically create an object in javascript. Here is the JS code that I have written:

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 );
});

And here is the HTML markup for the table:

<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>                                       

Whenever I try to execute this, it gives me this error

Undefined variable Name

I am trying to dynamically create an object in javascript. Here is the JS code that I have written:

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 );
});

And here is the HTML markup for the table:

<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>                                       

Whenever I try to execute this, it gives me this error

Undefined variable Name

Share Improve this question asked Nov 13, 2013 at 8:49 Kamran AhmedKamran Ahmed 12.5k23 gold badges72 silver badges103 bronze badges 1
  • You forgot the quotes around the value string. Try eval('obj.' + field + ' = "' + value + '"' );. – Aioros Commented Nov 13, 2013 at 8:51
Add a ment  | 

1 Answer 1

Reset to default 9

It's far easier, safer and faster to use this:

obj[field] = value;

... instead of eval('obj.' + field + ' = "' + value + '"'), which obviously has the same purpose.

You see what you see now because value should be wrapped in the quotation marks. For example, if both field and value are equal to 'Name' (string), the evalled expression as it stands now will look like...

obj.Name = Name

... obviously causing the 'Undefined variable Name' error.


Two sidenotes here. First, there's no sense wrapping trs in jQuery object again in this line...

$(trs).each(function(index, row)

... as it already IS a jQuery object (result of table.find('tr')). This redundancy is easier to see if you follow a simple convention: preceding names of all the variables that are used to store jQuery objects with $:

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

// $($trs) - obviously redundant

Second, it's a bit wasting to go through DOM twice in these lines:

 var field = $(row).find('td').eq(0).html();
 var value = $(row).find('td').eq(1).html();

I'd rather have it rewritten it like this:

 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;
发布评论

评论列表(0)

  1. 暂无评论