undefined 값을 설정하면 어떻게됩니까?
아래의이 줄은 무엇을합니까?
undefined = 'A value';
값을 변경하지 않으면 undefined
무대 뒤에서 어떤 일이 발생합니까?
undefined
전역 개체의 속성입니다. 즉 전역 범위의 변수입니다. 의 초기 값은undefined
기본 값undefined
입니다.
참조 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined를
그래서 그것은 단지 변수 일 뿐이며 특별한 것은 없습니다. 이제 질문에 답하려면 :
undefined = 'A value';
'A value'
전역 변수에 문자열 할당을 시도 합니다.undefined
- 이전 브라우저에서는 값이 변경
undefined === 'A value'; // true
됩니다. 엄격 모드의 최신 브라우저에서는 작업으로 인해 오류가 발생합니다.
브라우저 콘솔에서 다음을 테스트 할 수 있습니다 (여기서는 최신 브라우저-Google Chrome을 사용하고 있습니다).
undefined = true;
console.log(undefined); // undefined
// in older browsers like the older Internet Explorer it would have logged true
undefined
위의 예에서 의 값은 변경되지 않습니다. 이것은 (강조 내) 때문입니다.
최신 브라우저 (JavaScript 1.8.5 / Firefox 4 이상)에서 undefined는 ECMAScript 5 사양에 따라 구성 할 수없고 쓸 수없는 속성 입니다.
엄격 모드에서 :
'use strict';
undefined = true; // VM358:2 Uncaught TypeError: Cannot assign to read only property 'undefined' of object
상황이 좋아 달리 true
, 123
또는 null
, undefined
하지 않은 것입니다 리터럴 . 즉, undefined
식별자를 사용하는 것이 정의되지 않은 값 을 얻는 확실한 방법이 아님을 의미 합니다 . 대신 void
연산자를 사용할 수 있습니다 ( 예 :) void 0
.
기본적으로 전역 개체undefined
의 속성 , 즉 전역 변수를 정의했습니다. ECMAScript 5 이전에는 해당 속성이 쓰기 가능 했으므로
undefined = "A value";
값이 window.undefined
지역 변수에 의해 가려지지 않는다고 가정하고 의 값을 대체했습니다 . 그런 다음 사용 "A value" === undefined
하면 true
. 그리고 void 0 === undefined
생성 할 것이다 false
.
ECMAScript 5는이 동작을 변경했으며 이제 속성에 쓰기 또는 구성이 불가능합니다. 따라서에 대한 할당 undefined
은 비 엄격 모드에서 무시되고 예외가 엄격 모드에서 발생합니다. 후드,
undefined = "A value";
A는 단순 할당- 이는 PutValue 를 사용
"A value"
하여 전역 객체, 참조 된 이름"undefined"
및 엄격 모드에서 할당 된 경우 엄격한 플래그 가있는 참조에 값을 넣습니다 . - 전역 개체 의 [[Put]] 내부 메서드를 호출하여
"undefined"
속성 이름,"A value"
값으로 전달 하고 strict 플래그를 throw 플래그로 전달합니다. - 전역 개체 의 [[DefineOwnProperty]] 내부 메서드를 호출하여
"undefined"
, 속성 설명자{[[Value]]: "A value"}
및 throw 플래그를 인수로 전달합니다. - 즉, throw 플래그가 true이면 TypeError 예외를 throw하고 그렇지 않으면 false를 반환합니다.
그러나 여전히 지역 undefined
변수 를 선언 할 수 있습니다 .
(function() {
var undefined = "A value";
alert(undefined); // "A value";
})();
나는 약간의 POC를 만들었습니다 strict mode
.
효과는 strict mode
모든 것을 사용하지 않으면 잘된다는 것입니다. 당신이 사용한다면 당신은 strict mode
좋은 것입니다 :
TypeError : 읽기 전용 속성 'undefined'에 할당 할 수 없습니다.
이제 POC를 살펴 보겠습니다.
"use strict"
var c;
if (c === undefined) {
console.log("nothing happened")
}
undefined = "goofy"
c = "goofy"
if (c === undefined) {
console.log("c is 'goofy' and it's equal to undefined.. gosh.. we broke js")
}
이제 말했듯이 엄격 모드를 사용 하면 스크립트 TypeError
를 제거하면 잠시 동안 얻을 수 "use strict"
있으며 출력은 간단 nothing happened
합니다.
더 많은 것을 알고 싶다면 이 Q / A 가 도움이 될 수 있음을 발견 했습니다.
참고 : Node.js
.
참고 URL : https://stackoverflow.com/questions/36519946/what-happens-if-we-set-the-value-of-undefined
'Development Tip' 카테고리의 다른 글
편집기 창 분할 바로 가기는 무엇입니까? (0) | 2020.12.12 |
---|---|
Java 컴파일러가 연결할 수없는 then 문에 대해 연결할 수없는 문 오류를 생성하지 않는 이유는 무엇입니까? (0) | 2020.12.12 |
동적 할당없이 런타임에 배열 크기가 허용됩니까? (0) | 2020.12.12 |
WPF 컨트롤에 대한 Binding.Mode = Default의 기본값은 무엇입니까? (0) | 2020.12.12 |
sh의 소스 대체 (0) | 2020.12.12 |