これは、配列に入力すると、すべてのタイプの未定義のエントリも取得される配列を示すサンプルです。
これは firefox 19.0/firebug で発生したもので、他のブラウザで発生するかどうかは不明です。
基本的な流れ:
- オブジェクトが初期化されます (一番下)
- 「ロード」と呼びます
- ajax がロードで戻ると、data.objects には json オブジェクトの配列が含まれます。この配列には未定義のエントリはありません。
- setObjects が呼び出され、ajax 呼び出しからのすべてのオブジェクトが this.objects にコピーされます。
- それらがコピーされると、未定義のエントリがfirebugに表示されることがわかります。配列をもう一度渡さずに未定義のエントリをスプライスすると、テンプレート内の配列の要素にアクセスしようとすると口ひげが壊れます。
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( );