2012-02-14 35 views
1

isset変数を定義し、nullでないかどうかを確認する関数を作成しました。 は、ここに私のコードです:Javascript isset function

isset = function(a) { 
    if ((typeof (a) === 'undefined') || (a === null)) 
     return false; 
    else 
     return true; 
}; 
var a = []; 

// Test 1 
alert(isset(a['not']); // Alerts FALSE -> works OK 
// Test 2 
alert(isset(a['not']['existent'])); // Error: Cannot read property 'existent' of undefined 

テスト2のための私の機能を動作させるために、任意の提案?おかげさまで

+0

は 'typeof'が演算子関数ではなく、あなたは取り除く必要がありますあなたがテストしている値の周りの '()'の値を返します。 – Quentin

+0

@Quentin:コードの整合性と読みやすさを高めるために、すべての制御文に括弧を使用する方が望ましいと言えるでしょう。例えば、 'return true'の代わりに' return(true) 'を書く方が好きです。それは好みの問題です(そして質問とは無関係です)。 – haylem

+0

[Javascript isset()相当]の複製が可能(http://stackoverflow.com/questions/2281633/javascript-isset-equivalent) – Gajus

答えて

4

未定義のオブジェクトのプロパティをチェックしようとしています。それは意味をなさない。あなたはこのように書くことができます:値の解像度は「ISSET」関数呼び出し、およびランタイムエラーで結果の前に「[ 『存在』] [ 『ない』]」ので

alert(isset(a['not']) && isset(a['not']['existent'])); 
+1

あなたは正しいです。私はちょうどisset関数のようなPHPを作成することが可能かどうか疑問に思っていた。 PHPでこれを行うことができます:var_dump(isset($ a ['not'] ['exists'])); お返事ありがとうございます! –

1

テスト2は動作しません。

3

これは動作しません。動作させることはできません。 何が起こるのですか: jsエンジンは['not']を評価しようとし、getは "undefined"を取得しようとすると、未定義の 'existent'プロパティを評価しようとします。 そのすべてのあなたの関数に前にコールを起こる...あなたは何ができるか

のようなものです:

var isset = function(obj, props) { 
    if ((typeof (obj) === 'undefined') || (obj === null)) 
     return false; 
    else if (props && props.length > 0) 
     return isset(obj[props.shift()], props); 
    else 
     return true; 
}; 

、あなたはこのようにそれを呼び出す:

var a = []; 

// Test 1 
alert(isset(a, ['not']); 
// Test 2 
alert(isset(a, ['not', 'existent'])); 

( **これはちょうど擬似コードですが、実際に動作させるには少し修正する必要があります)

0

まあ、これは正しく行うことができます:

1)私たちは、PHPで行うよう:

$vara = "abc"; 
$a =0; 

while(isset($vara[a]){ 
a++; 
} 

2)私はJavaScriptで行うよう:

vara = "abc"; 
while (vara[a] != null){ 
a++; 
}