2016-06-02 7 views
0

以下のコードはReferenceErrorをスローします: "a"は定義されていません。 それを回避し、変数をnullとして扱うことはできますか?nashorn - 回避する方法 "ReferenceError:" a "は定義されていません"

 ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); 
     Map<String, String> s = new HashMap<String, String>(); 
//  s.put("a", "a"); 
     Bindings bindings = engine.createBindings(); 
     bindings.putAll(s); 
     Object res = engine.eval("!a", bindings); 
     System.out.println(res); 
+1

Nashornには慣れていませんが、ECMAScript標準と互換性がないため、これは疑問です。それを 'null'にしたいのであれば、そのように宣言しなければなりません。多分、Nashornは地球環境の束縛を事前定義する方法を持っています。 –

答えて

1

名前で任意の変数を持っていない場合は「」あなたのスコープチェーンで定義され、その後にReferenceErrorがECMAScript仕様に従ってスローする必要があります。

//  s.put("a", "a"); 

行の場合、 "a"が定義されているため、ReferenceErrorは定義されていません。

"typeof"演算子を使用して変数が定義されているかどうかを確認できます。 "typeof a == 'undefined'"は未定義変数 "a"に対してfalseと評価されます。未定義の変数についてはReferenceErrorを取得しません。これも標準に準拠した動作です。

関連する問題