JavaScript undefined
와 null
값 에 대해 약간 혼란 스럽습니다 .
if (!testvar)
실제로 무엇을 합니까? 이 테스트 않습니다 undefined
및 null
하거나 undefined
?
변수가 정의되면 다시 변수를 지울 수 undefined
있습니까 (따라서 변수를 삭제하십시오)?
undefined
매개 변수로 전달할 수 있습니까 ? 예 :
function test(var1, var2, var3) {
}
test("value1", undefined, "value2");
답변
Javascript undefined & null에 대해 약간 혼란 스럽습니다.
에 대해 혼동하지 마십시오 null
. 이는 일반적으로 대역 외 ‘널’, ‘없음’또는 ‘없음’개체에 대한 다른 스크립팅 언어의 개념과 유사하게 작동합니다.
undefined
반면에, 이상한 자바 스크립트 문제입니다. 이것은 대역 외 값을 나타내는 단일 객체이며, 본질적으로 유사하지만 다른 두 번째 null
입니다. 다음과 같이 나타납니다.
-
function
명령문 목록 의 인수 목록보다 인수가 적은 함수를 호출하면 전달되지 않은 인수가로 설정됩니다undefined
. 예를 들어 다음과 같이 테스트 할 수 있습니다.function dosomething(arg1, arg2) { if (arg2===undefined) arg2= DEFAULT_VALUE_FOR_ARG2; ... }
이 방법을 사용하면 사이의 차이 말할 수 없습니다
dosomething(1)
와dosomething(1, undefined)
;arg2
둘 다에서 동일한 값이됩니다. 차이점을 말해야하는 경우을 볼 수arguments.length
있지만 이와 같은 선택적 인수를 수행하는 것은 일반적으로 읽기 쉽지 않습니다. -
함수가 없으면 함수가
return value;
반환합니다undefined
. 일반적으로 이러한 반환 결과를 사용할 필요가 없습니다. -
var a
블록에 명령문을 사용 하여 변수를 선언 했지만 아직 값을 지정하지 않은 경우 변수는undefined
입니다. 다시 말하지만, 실제로 그것에 의존 할 필요는 없습니다. -
짜증
typeof
연산자는'undefined'
피연산자가 존재하지 않는 단순한 변수 인 경우 참조하려고 할 때 일반적으로 발생하는 오류를 발생시키는 대신 반환합니다. (또한 간단한 변수를 괄호 로 묶을 수 있지만 존재하지 않는 변수를 포함하는 전체 표현식 은 제공 할 수 없습니다 .) 그다지 많이 사용하지는 않습니다. -
이것은 논쟁의 여지가 있습니다. 존재하지 않는 객체의 속성에 액세스하면 다른 모든 언어와 같이 즉시 오류가 발생하지 않습니다. 대신
undefined
객체 를 얻습니다 . (그리고undefined
나중에 스크립트에서 해당 객체 를 사용하려고 하면 JavaScript가 오류를 바로 던진 경우보다 추적하기가 훨씬 더 이상한 방식으로 잘못 진행됩니다.)이것은 종종 속성의 존재를 확인하는 데 사용됩니다.
if (o.prop!==undefined) // or often as truthiness test, if (o.prop) ...do something...
그러나
undefined
다른 값과 같이 지정할 수 있기 때문에 :o.prop= undefined;
실제로 속성이 있는지 여부를 감지하지 못합니다.
in
JavaScript의 원래 Netscape 버전이 아니었지만 현재 어디에서나 사용할 수 있는 연산자 를 사용하는 것이 좋습니다 .if ('prop' in o) ...
요약하면 undefined
모든 사람을 혼란스럽게하는 JavaScript 관련 혼란입니다. JS가 더 우아한 메커니즘을 가지고 있지 않은 선택적 함수 인수 외에도 undefined
피해야합니다. 언어의 일부가되어서는 안됩니다. null
(2)와 (3)에서 잘 작동했을 것입니다. (4)는 JavaScript에 예외가 없었기 때문에 존재하는 오해입니다.
if (!testvar)
실제로 무엇을 합니까? undefined 및 null 또는 undefined를 테스트합니까?
이러한 ‘truthiness’에 대한 시험 검사 false
, undefined
, null
, 0
, NaN
및 빈 문자열. 그러나이 경우에는 그렇습니다 undefined
. IMO, 그것에 대해 더 명시 적으로 말해야 if (testvar!==undefined)
합니다.
변수가 정의되면 정의되지 않은 변수로 되돌릴 수 있습니다 (따라서 변수를 삭제하십시오).
확실히 할당 undefined
할 수는 있지만 변수는 삭제되지 않습니다. delete object.property
운영자 만 물건을 제거합니다.
delete
실제로 변수가 아닌 속성을 의미합니다. 브라우저를 사용하면 straight로 벗어날 수 delete variable
있지만 좋은 아이디어는 아니며 ECMAScript Fifth Edition의 엄격 모드에서는 작동하지 않습니다. 가비지 수집 될 수 있도록 무언가에 대한 참조를 비우려면 더 일반적 variable= null
입니다.
undefined를 매개 변수로 전달할 수 있습니까?
예.
답변
(? 안) 정의되지 않은 같은 변수가 더 이상 정의되지 것처럼 당신은 아무것도를 정의 할 수 없습니다 – 당신은 그냥 정의 뭔가를.
undefined
함수에 전달할 수 없습니다 . 빈 값을 전달하려면 null
대신 사용하십시오.
이 명령문 if(!testvar)
은 부울 true / false 값을 검사하며이 특정 값은로 testvar
평가 되는지 여부를 테스트합니다 false
. 정의에 null
와 undefined
같이 어느 쪽도 평가해서는 안 true
이나 false
,하지만 자바 스크립트들을 평가 null
로 false
, 당신은 정의되지 않은 변수를 평가하려고하면 오류가 있습니다.
제대로 테스트하려면 undefined
하거나 null
, 이들을 사용 :
if(typeof(testvar) === "undefined") { ... }
if(testvar === null) { ... }
답변
기본적인 차이가 있다는 것입니다 undefined
및 null
다른 개념을 나타냅니다.
null
사용 가능한 경우에만 null
성가신 오류 잡기를 사용하지 않으면 의도적으로 값으로 설정되었는지 또는 값이 아직 설정되지 않았는지 확인할 수 없습니다.
var a;
a == null; // This is true
a == undefined; // This is true;
a === undefined; // This is true;
그러나 의도적으로 값을로 설정하면 다음 null
과의 엄격한 동등성이 undefined
실패하므로 값 null
과 undefined
값 을 구별 할 수 있습니다 .
var b = null;
b == null; // This is true
b == undefined; // This is true;
b === undefined; // This is false;
“요약하면 undefined는 JavaScript 관련 혼란으로 모든 사람을 혼란스럽게한다”는 말을 무시하고 말을하는 사람들에게 의존하는 대신 여기에서 참조를 확인하십시오. 당신이 혼란 스럽다고해서 그것이 엉망이라는 것을 의미하지는 않습니다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
이 문제가 자바 스크립트를 특정하지 않고는 부울 결과가 될 수있는 일반화 된 개념을 완료 true
, false
알 수없는 ( null
) 값 없음 ( undefined
), 또는 문제가 발생했습니다 ( error
).
답변
null 값을 확인하는 가장 좋은 방법은
if ( testVar !== null )
{
// do action here
}
정의되지 않은
if ( testVar !== undefined )
{
// do action here
}
정의되지 않은 변수를 할당 할 수 있습니다.
testVar = undefined;
//typeof(testVar) will be equal to undefined.
답변
그렇습니다 . undefined가 undefined로 정의 되어 있기 때문에 가능 합니다.
console.log(
/*global.*/undefined === window['undefined'] &&
/*global.*/undefined === (function(){})() &&
window['undefined'] === (function(){})()
) //true
너의 경우:
test("value1", undefined, "value2")
자신 만의 정의되지 않은 변수를 만들 수도 있습니다 .
Object.defineProperty(this, 'u', {value : undefined});
console.log(u); //undefined
답변
첫 번째 질문에 답하기 위해 not 연산자 ( !
)는 부울 값으로 주어진 모든 것을 강제합니다. 그래서 null
, 0
, false
, NaN
과 ""
(빈 문자열)은 모든 거짓 표시됩니다.
답변
JavaScript, 명령 행에서 변수를 정의되지 않은 것으로 설정하는 방법 :
js
Ubuntu 12.10에서 Java와 함께 제공 되는 javascript 명령 행 터미널 에서 변수를 undefined로 설정하십시오 .
el@defiant ~ $ js
js> typeof boo
"undefined"
js> boo
typein:2: ReferenceError: boo is not defined
js> boo=5
5
js> typeof boo
"number"
js> delete(boo)
true
js> typeof boo
"undefined"
js> boo
typein:7: ReferenceError: boo is not defined
자바 스크립트에서 변수를 undefined로 설정 한 경우 :
이것을 myjs.html에 넣으십시오.
<html>
<body>
<script type="text/JavaScript">
document.write("aliens: " + aliens);
document.write("typeof aliens: " + (typeof aliens));
var aliens = "scramble the nimitz";
document.write("found some aliens: " + (typeof aliens));
document.write("not sayings its aliens but... " + aliens);
aliens = undefined;
document.write("aliens deleted");
document.write("typeof aliens: " + (typeof aliens));
document.write("you sure they are gone? " + aliens);
</script>
</body>
</html>
이것을 인쇄합니다 :
aliens: undefined
typeof aliens: undefined
found some aliens: string
not sayings its aliens but... scramble the nimitz
aliens deleted
typeof aliens: undefined
you sure they are gone? undefined
경고! 변수를 undefined로 설정하면 변수를 다른 변수로 설정하게됩니다. 교활한 사람이 실행되면 undefined = 'rm -rf /';
변수를 undefined로 설정할 때마다 해당 값을받습니다.
처음에 정의되지 않은 값의 외계인을 출력하고 여전히 실행할 수 있는지 궁금 할 것입니다. 자바 스크립트 게양 때문입니다 : http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html