2010/09/22

[javascript]連想配列の要素の削除

このエントリーをはてなブックマークに追加
連想配列の要素の削除について、誤解しやすいポイントを書き留めておきます。

deleteを使う

obj[a] = null;
null指定だと、obj.aというプロパティがnullの値を持つとして、残ってしまいます。
残っていると、for~inに引っかかるため、都合が悪いことが起こる可能性があるわけです。

連想配列の要素の削除には、deleteを使用しましょう。
delete obj[a];

すべての要素を消す

すべての要素を消すためにはfor~inで回してあげればよいです。
var obj = {a:1,b:2,c:3,d:4};
for(var key in obj){
    delete obj[key];
}
配列が対象だと全体の配列数が変化してしまうので、注意しないといけません。
けれど、連想配列は平気のようです。ちゃんと消えます。

連想配列についての補足

オブジェクトというのはもれなく連想配列です。オブジェクトのプロパティを利用した構造を連想配列と呼んでいるのです。
obj["a"]という書き方は、obj.aと書いても同じです。

面白いのはobj["a.b"]と書くこともできることです(改行を入れることもできる)。
これはもちろん、obj["a.b"]とobj.a.bは意味が異なるので注意。
/* これでも余裕で動く */
var obj = {};
obj["\n"] = 1; 
alert(obj["\n"]); /* 1が表示されます */

2010/09/15

[javascript]canvasのgetImageData関数でSECURITY_ERRにはまる

このエントリーをはてなブックマークに追加
●getImageDataについてはこちら
createImageData, getImageData, putImageData メソッド - Canvasリファレンス - HTML5.JP
http://www.html5.jp/canvas/ref/method/getImageData.html

●解決にはここが参考になりました
canvas の getImageDataが少しめんどくさい(特にローカルで動かす場合) - 地平線に行く
http://d.hatena.ne.jp/chiheisen/20100815/1281885412


「SECURITY_ERR: DOM Exception 18」というメッセージはChromeのもので、FireFoxだと「Security error code: 1000」というメッセージがでるようです。

要するに、getImageData関数は、外部から引っ張ってきた画像に対しては利用できない決まりになってて、ローカルで実行させると外部画像扱いになってしまうみたいです。

んなもん、言ってくれないと解んないよねー。
一回はまって調べたはずなのに、そのときはあっさりスルーしてたもんで、また時間使っちまったよ。