2010-11-20 5 views
4

대 점 표기법을 사용하여이 자바 스크립트는자바 스크립트 : 다른 행동 브라켓 표기법

var x = window.foo; 
window.x = null; 
alert(window.bar === undefined); 

경고 "true"로 니펫을. 그러나

,이 조각

var x = window.foo; 
window[x] = null; 
alert(window.bar === undefined); 

경고 "거짓".

여기에 무슨 일이 일어나고 있습니까?

는 (나는 거기에 다른 자바 스크립트 코드와 HTML 페이지 내부의 최신 크롬 브라우저에서이 코드를 실행하고 있습니다.)

업데이트

@elusive 영리하게 자신의 의견에 요약으로 아래에서 나는 실수로 window.xwindow[x]이 동일한 것으로 가정합니다. 그건 맞지 않아. window.xwindow["x"]과 같습니다.

+0

우리는'window.foo'의 내용이 무엇인지 물어볼 수 있습니까? –

+4

'window.x'는'window [x ']'not'window [x]'와 동일합니다. – jwueller

+0

@elusive 네, 한 문장으로 요약했습니다 :) –

답변

3

전역 객체의 undefined 속성이 어떤 ECMAScript를 3 기반 구현에 변경할 수 있기 때문에입니다 발생하는 동작을. (최신 Chrome 버전은 ES5를 구현하고 있지만이 동작은 여전히 ​​존재합니다).

이의 두 번째 조각을 살펴 보자 다음 foo 속성이 존재하지 않기 때문에

var x = window.foo; 
window[x] = null; 
alert(window.bar === undefined); 

x 변수는 undefined 값을 개최한다. 당신이 window.x = null를 할당 할 때

window[x] = null; // is equivalent to 
window['undefined'] = null; // or 
window.undefined = null; // 

(첫 번째 조각에서, 당신은 window 객체에 "x"라는 이름의 속성을 만드는 : window[x] = null을 할당하여

, 당신은 undefined 속성 값을 무시하고 있습니다.두 번째 조각에 따라서)

()를 undefined 속성이 null를 개최하고, window.bar 생산됩니다 undefined :

undefined 속성은 그의 친구와 함께 ECMAScript를 3, (에 { ReadOnly }로서 지정되어 있지 않은
alert(window.bar === undefined); // false 
alert(undefined === null); // false 

NaN, Infinity).

ECMAScript 5에서이 내용이 변경되었으므로 해당 속성은 쓰기 가능 파일로 설명됩니다.

+0

@CMS 크롬뿐만 아니라 모든 브라우저에서 '정의되지 않은'전역 속성이 변경 가능하지 않습니까? –

+0

@ Šime, * * ES3 기반 구현에서 변경할 수 있어야합니다 *. 내가 테스트 한 최신 브라우저 버전 (Firefox, WebKit, IE9, Chrome)에서 Chrome은 Chrome 9.0.583.0에서도 쓰기가 가능한 'undefined'가있는 유일한 브라우저입니다. – CMS

+0

@CMS 이것은 내가 얻는 결과가 아닙니다. 최신 버전의 Chrome, Firefox 및 Opera를 사용하면 '정의되지 않은'전역 속성의 값을 변경할 수 있습니다. IE9 베타와 Safari만이이를 허용하지 않습니다. –

1
var x = window.foo; // set the local variable x to the contents of window.foo 
window.x = null; // set property x on window to null 

바로 여기에서 x을 null로 직접 설정하고 있습니다.

var x = window.foo; // set the local variable x to the contents of window.foo 
window[x] = null; // set they key with the value of x to null 

여기

당신은 윈도우 객체에 key로 사용하여 속성을 설정하고 있습니다. 어떤 열쇠입니까? 자, x의 값에 따라 다릅니다. xbar이면 일 때 xblub이면 window.blub = null이됩니다.

이에 대한 자세한 정보는 MDC까지 머리를해야 :
https://developer.mozilla.org/en/JavaScript/Reference/Operators/Member_Operators

+2

사실 이것은 글로벌 코드이므로 x는 글로벌 변수입니다. –

+0

대답은 같습니다. window.x는 'x'라는 속성을 설정합니다. window [x]는 'value-of-global-variable-x'라는 속성을 설정합니다. – GolezTrol