这是一个示例,演示了一个数组,当您填充它时,它也会在其中获取所有类型的未定义条目。
这是在 firefox 19.0/firebug 上,不确定它是否发生在其他浏览器上。
基本流程:
- 对象已初始化(非常底部)
- 它称为“负载”
- 当 ajax 在加载中返回时,data.objects 包含一个 json 对象数组。该数组上没有未定义的条目。
- setObjects 被调用,所有来自 ajax 调用的对象都被复制到 this.objects。
- 当它们被复制时,我可以看到未定义的条目出现在萤火虫中,如果我没有第二次传递数组并拼接出未定义的条目,它会在尝试访问模板中的数组元素时破坏胡子。
为什么 javascript 会自动用未定义的条目填充 this.objects 数组?
这是代码:
function MailerFromProfile( )
{
// privileged
this.objects = [];
this.load( );
}
MailerFromProfile.prototype.setObjects = function( objects )
{
for( var i in objects )
{
if( 'undefined' !== objects[ i ] )
{
this.objects[ objects[ i ].id ] = objects[ i ];
}
}
// I should not have to do this:
for( var i = 0; i < this.objects.length; i++ )
{
if( typeof this.objects[ i ] === 'undefined' )
{
this.objects.splice( i, 1 );
i--;
}
}
}
MailerFromProfile.prototype.setTemplate = function( n, v )
{
this.template[ n ] = v;
}
MailerFromProfile.prototype.load = function( )
{
jQuery.post(
MAILER_PATH,
{ session: MAILER_SESSION,
object : 'from_profile',
action : 'list'
},
function( data )
{
if( typeof data.objects !== 'undefined' )
{
g_mailer_from_profiles.setObjects( data.objects );
}
},
'json' );
}
var g_mailer_from_profiles = new MailerFromProfile( );