0

変数fooが未定義の場合、通常は次のようなことができます。

!foo;
foo === undefined;
foo !== 'some value';

しかし、私が現在取り組んでいるコードベースには、これ以外の未定義の変数に対する操作に対して例外をスローするようにブラウザーのインタープリターに指示しているように見えるものが含まれています。

typeof foo !="undefined";

私は通常使用しているのと同じブラウザ(ChromeとFirefox)で作業しています。でも今回はゼロから始めるのではなく、途中でこのプロジェクトに取り掛かっています。これは、Backbone.js、アンダースコア、ハンドルバー、jQuery、yepnopeを使用したdJangoプロジェクトです。

この動作"use strict"は、グローバル名前空間のどこかに表示される命令が原因である可能性がありますか?プロジェクトで「usestrict」というテキスト文字列を検索したところ、Twitterからのものと思われるコードで見つかりました。

    ファイル:bootstrap.js
           script.js
    差出人:http://twitter.github.com/bootstrap/javascript.html#transitions

json2ファイルにもあります。ただし、前回このファイルを使用したときに、このファイルが問題を引き起こさなかったと確信しています。

    ファイル:json2.js
    差出人:http://www.JSON.org/json2.js

私が知っている限りでは、これはどこかに「厳密に使用」が含まれていることが原因ではありません...

何か案は?

本当にありがとう!

4

2 に答える 2

2

変数が宣言されていない場合、比較に使用することはできません。

undeclaredvar = 1;

動作するのはこれだけですundeclaredvar。グローバル名前空間で暗黙的に宣言されます。

関数内の厳密なモード宣言は、グローバルスコープへの厳密さを「漏らす」ことはありません。したがって、"use strict";Twitterのブートストラップ/ JSON2では、スクリプトの厳密さには影響しません。

于 2012-07-23T17:54:56.293 に答える
1

未定義未宣言の間には重要な違いがあります。

function test() {
    var foo;
    if (foo) { /* not executed */ }
}

が宣言されているのでこれは問題ありませfooんが、その値は未定義です。

function test() {
    if (foo) { /* exception! */ }
}

が宣言されていないため、これは例外( ReferenceError)をスローします。(ない限り。)foowindow.foo

于 2012-07-23T17:57:49.780 に答える