2017-11-06 13 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