2012年1月6日金曜日

undefinedという値について

引数に「undefined」って指定してあるのなんで?と言っていた人がいた。 jQueryの話だったけど、JavaScriptの癖(癌)を利用したトリックだと推測。 undefinedはグローバルスコープの変数だから、 引数に対してundefinedを代入して、ローカルスコープに持って来て ロジックによっては処理を早くしたり、 undefinedの値をローカル内で保証できる状況になるという仮説を立てたけど、 「引数間違って指定したら失敗するんじゃね?」 と思ったので試してみた。
  1. <script type="text/javascript">  
  2. <!--  
  3.   
  4. function undefinedTest1(arg1) {  
  5.  if ( arg1 === undefined ) {  
  6.   console.log("1");  
  7.  }  
  8. }  
  9.   
  10. function undefinedTest2(arg1,undefined) {  
  11.  if ( arg1 === undefined ) {  
  12.   console.log("2");  
  13.  }  
  14. }  
  15.   
  16. var val;  
  17. console.log("undefined");  
  18. undefinedTest1(val);  
  19. undefinedTest2(val);  
  20.   
  21. console.log("変数に値を入れてみる");  
  22. undefined = true;  
  23. undefinedTest1(val);  
  24. undefinedTest2(val);  
  25.   
  26. console.log("第2引数に値を入れてみる");  
  27. undefinedTest2(val,"test");  
  28.   
  29. // -->  
  30. </script>  
でコンソールは
  1. undefined  
  2. 1  
  3. 2  
  4. 変数に値を入れてみる  
  5. 2  
  6. 第2引数に値を入れてみる  
まず、関数が正常に動作している事を確認。 グローバルスコープのundefinedに値を代入すると関数1の値は不可能になり、 間違って引数指定をすると、undefinedに値が代入されて、関数2もアウト。 まぁ十分テストされていれば第2引数の指定はないだろうから危なくはないのかな? 思ったとおりの動きだったのでひとまず満足。

0 件のコメント: