練炭ブログ

萌え壁紙、Irvine、DMonkey、Proxomitron などの情報を扱ってます。

DMonkey: 配列中のオブジェクトを pop()/shift() するとエラーになる

コメントなし»

Irvine 1.3.1.127 & DMScript 0.3.12

var y = {}, x = [ y ];
try {
  x.pop ();
  alert (x.length);
}
catch (e) { alert (e); }
finally { alert ('a'); }
alert ('b');

Irvine のメニューバーのツール → スクリプト → スクリプトを直接実行から、上記スクリプトを実行すると 0 → a → b と表示されます(正常)。

ところが1行目を var x = [ {} ]; に変えて実行すると、a → Invalid pointer operation. と表示されてしまいます。

また1行目を var x = [ [] ]; に変えた場合は、a だけが表示されます。

いずれも3行目で x.shift (); としても同様ですが、x.splice (0, 1); であれば正常動作します。

[2014-10-16 追記] 元のコードでエラーにならないのは、y から {} への参照が残ったままスクリプトが終了しているから、かもしれません。2行目に y = null; を入れるとエラーになります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です