0

私はこのようなJavaScriptオブジェクトを持っています

var obj={
    a:{x: "someValue", y:"anotherValue"},
    b:{x: "bValue", y:"anotherbValue"}
};

そして、私はこのように参照しようとしています

function(some_value){
    alert("some_value is " + some_value + " with type " + typeof some_value);
    // prints  some_value is a  with type  string 
    var t;
    t=obj[some_value]["x"];   // doesn't work   
    some_value="a";
    t=obj[some_value]["x"];  // this does work
    t=obj["a"]["x"];     // and so does this
}

ここで何が起こっているのかを本当に理解したいと思います。理想的には、関数に渡された値でオブジェクトを参照したいと思います。ありがとう

4

2 に答える 2

1

変数some_valueに値が含まれていてはならないとしか思えませんa。余分な空白文字が含まれている可能性があります。

于 2012-04-29T01:46:37.457 に答える
0

JS では、プロパティが存在しない場合、undefined. 次のコードの場合、変数に含まれる値がのプロパティとしてsome_value存在しない場合は未定義です。objt

//if some_value is neither a nor b
t = obj[some_value] // t === undefined

値からプロパティを抽出しようとするとundefined、ブラウザーはエラーを報告します。

//if some_value is neither a nor b
t = obj[some_value]["x"] // error

を使用してアクセスする前に、プロパティの存在を確認できますhasOwnProperty()

if(obj.hasOwnProperty(somevalue)){
    //exists
} else {
    //does not exist
}

「ゆるいチェック」を行うことはできますが、値があっても「偽」であると「存在しない」と呼ばれるため、信頼できません。

if(obj[somevalue]){
    //is truthy
} else {
    //obj[somevalue] either:
    //does not exist
    //an empty string
    //a boolean false
    //null
    //anything "falsy"
}
于 2012-04-29T01:47:06.637 に答える