http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262%205th%20edition%20December%202009.pdf
15.1.1 Value Properties of the Global ObjectECMAScript5 の仕様では undefined プロパティの Writable が flase となっていますので、値を変更することができなくなりました。
15.1.1.3 undefined
The value of undefined is undefined (see 8.1). This property has the attributes { Writable: false, Enumerable: false, Configurable: false }.
undefined はただのグローバル変数
こんなことだって可能
alert(undefined); // "undefined" |
自分の意思でundefinedを自由に書き換えることができる
つまり、undefinedは常にundefinedである保証はどこにもないから、undefinedを使うのを避けるべきとうことです。
対して、void演算子を使えば、常に本当のundefinedを返すので、安全です。
function test () {
var undefined = true; //undefinedを上書き
if(undefined){
console.log( 'undefined: ' + undefined );
}
if(void 0 ){
console.log( '決して実行されない' );
}
}
test();
voidを使わずにundefinedを獲得する方法
(function(a,b,undefined){
console.log(undefined)
})(1,2);
これはjQueryのソースでも使われている手法
無名関数をその場で実行し、実引数には1,2しか渡していないのに、仮引数のほうではa,b以外に、
もう一つundefinedという最初から渡されないと仮定した仮引数をセットすることで、安全にundefinedを獲得
○参考
`undefined`の代わりに、`void 0`を使ったほうがいい
http://liginc.co.jp/web/js/38494
0 件のコメント:
コメントを投稿