2017-11-06 18 views
0

私は、次のコードについて気づいてしまった:Javascriptでこれはどういう意味ですか?

> (123[45] = 67) == 67 
<- true 
> 123[45] 
<- undefined 

あなたも、ブラウザ内でそれを試すことができます。

何が起こっているのか分かりません。

123[45]は、最初の代入命令で配列のように扱われ、実際には次のテスト== 67に正当に応答します。 しかし、私がメモリ位置にアクセスしようとすると、123[45]私は未定義になった。

これは何ですか?

+0

ないが、ちょうど「オブジェクトのような」「配列のように」。 – Bergi

答えて

1

Primitive valuesはプロパティを持つことができません(これがオブジェクトと区別されます)。その件に関してStrings are not object then why do they have properties?,Why can't I add properties to a string object in javascript?およびWhat’s happening in this code with Number objects holding properties and incrementing the number?も参照してください。

実際には次のテスト== 67に正当に応答します。

プロパティアクセスではありません。代入式は、代入対象がどうなっても、常に右辺値に評価されます。

あなたが同様に実際のオブジェクトとのことを試すことができます。

var x = { 
    get p() { console.log("getting"); return 42; }, 
    set p(val) { console.log("setting "+val); } 
}; 
x.p = 2; // setting 2 
console.log(x.p); // getting 42 
console.log((x.p = 67) == 67); // setting 67 true - no "getting"! 
console.log(x.p); // still: getting 42 
関連する問題