[ActionScript 3.0] delete演算子の注意点

2011 年 6 月 21 日 Tags: , ,

delete演算子の機能

  1. 動的に追加したプロパティを削除する
  2. オブジェクトの参照を削除

オブジェクトの参照を削除

動的に追加したプロパティの値の参照を切る。delete後は、undefinedとなる。
(C/C++のdeleteとは違い、あくまで参照を切るのみ)

// 動的に追加したプロパティ
var obj:Object = new Object;
obj["sample"] = "Sample";

delete obj["sample"];
// ドット演算子でも同じ
// delete obj.sample;

trace(obj["sample"]); // output : undefined

配列の値の参照を削除。


// 配列
var arr:Array = ["aaa", "bbb", "ccc"];
delete arr[0];

trace(arr);
// output : ,bbb,ccc - index 0がundefinedと表示されていないことに注意

trace(arr[0]);
// output : undefined

// あくまで値のほうの参照を削除するだけのため、
// Array#lengthはそのまま
trace(arr.length); // output : 3

// 対象のindexそのものを削除したければ、Array#shift()/ pop()/ splice()などを使う
arr.shift();

動的に追加したプロパティを削除

deleteの対象がObject/ Dictionary/ dynamic class(動的クラス)のプロパティの場合、上記のように参照を切るだけでなく動的に追加したプロパティそのものを削除する。

			var obj:Object = new Object;
			obj["sample"] = "Sample";
			delete obj["sample"];
			
			trace(obj["sample"]); // output : undefined
			
			for (var key:String in obj) {
				trace("exists"); // プロパティは削除されているので、何も表示されない
			}

var 宣言された変数や静的に定義されたクラスのメンバ・メソッドは、プロパティも参照もdeleteできない。

			// いずれもコンパイルエラー
			var spr:Sprite = new Sprite;
			delete spr.alpha; // エラー

			var sample:Object = new Object;
			delete sample; // エラー

参照を切りたい場合は、もちろんnullを代入する。

			var spr:Sprite = new Sprite;
			spr = null;