2012年1月6日金曜日

undefinedという値について

引数に「undefined」って指定してあるのなんで?と言っていた人がいた。 jQueryの話だったけど、JavaScriptの癖(癌)を利用したトリックだと推測。 undefinedはグローバルスコープの変数だから、 引数に対してundefinedを代入して、ローカルスコープに持って来て ロジックによっては処理を早くしたり、 undefinedの値をローカル内で保証できる状況になるという仮説を立てたけど、 「引数間違って指定したら失敗するんじゃね?」 と思ったので試してみた。
<script type="text/javascript">
<!--

function undefinedTest1(arg1) {
 if ( arg1 === undefined ) {
  console.log("1");
 }
}

function undefinedTest2(arg1,undefined) {
 if ( arg1 === undefined ) {
  console.log("2");
 }
}

var val;
console.log("undefined");
undefinedTest1(val);
undefinedTest2(val);

console.log("変数に値を入れてみる");
undefined = true;
undefinedTest1(val);
undefinedTest2(val);

console.log("第2引数に値を入れてみる");
undefinedTest2(val,"test");

// -->
</script>
でコンソールは
undefined
1
2
変数に値を入れてみる
2
第2引数に値を入れてみる
まず、関数が正常に動作している事を確認。 グローバルスコープのundefinedに値を代入すると関数1の値は不可能になり、 間違って引数指定をすると、undefinedに値が代入されて、関数2もアウト。 まぁ十分テストされていれば第2引数の指定はないだろうから危なくはないのかな? 思ったとおりの動きだったのでひとまず満足。

0 件のコメント: