@NagaJolokia が指摘しているように、コンソールはコードの実行にdelete
使用しているため、Firebug コンソールでは動作が異なります。eval()
delete
通常のコードと の下の両方でa をテストすると、同じ効果が動作で確認できますeval()
。このページを保存し、開発者コンソールを開いた状態でブラウザーにロードします。
<!DOCTYPE html>
<html>
<head>
<title>Eval/Delete Test</title>
<script>
console.log( 'Normal code, a = 1' );
var a = 1;
console.log( 'a is', typeof a, a );
console.log( 'window.a is', typeof window.a, window.a );
console.log( 'delete a OK?', delete a );
console.log( 'delete window.a OK?', delete window.a );
console.log( 'a is now', typeof a, window.a );
console.log( 'window.a is now', typeof window.a, window.a );
console.log( ' ' );
console.log( 'Eval code, b = 1' );
eval( 'var b = 1;' );
console.log( 'delete b OK?', delete b );
console.log( 'b is now', typeof b, window.b );
</script>
</head>
<body>
</body>
</html>
コードはログに記録します:
Normal code, a = 1
a is number 1
window.a is number 1
delete a OK? false
delete window.a OK? false
a is now number 1
window.a is now number 1
Eval code, b = 1
delete b OK? true
b is now undefined undefined
また、同じコードをすぐに実行できるようにフィドルを作成しました。上記と同じ出力が生成されます。フィドルにはFirebug Liteが含まれているため、開発者コンソールを開く必要はありません。
より完全な説明については、NagaJolokia の回答と、この記事の Firebug の混乱に関するセクションを参照してください。