[javascript] 변수를 undefined로 설정하거나 undefined를 인수로 전달할 수 있습니까?

JavaScript undefinednull값 에 대해 약간 혼란 스럽습니다 .

if (!testvar)실제로 무엇을 합니까? 이 테스트 않습니다 undefinednull하거나 undefined?

변수가 정의되면 다시 변수를 지울 수 undefined있습니까 (따라서 변수를 삭제하십시오)?

undefined매개 변수로 전달할 수 있습니까 ? 예 :

function test(var1, var2, var3) {

}

test("value1", undefined, "value2");



답변

Javascript undefined & null에 대해 약간 혼란 스럽습니다.

에 대해 혼동하지 마십시오 null. 이는 일반적으로 대역 외 ‘널’, ‘없음’또는 ‘없음’개체에 대한 다른 스크립팅 언어의 개념과 유사하게 작동합니다.

undefined반면에, 이상한 자바 스크립트 문제입니다. 이것은 대역 외 값을 나타내는 단일 객체이며, 본질적으로 유사하지만 다른 두 번째 null입니다. 다음과 같이 나타납니다.

  1. function명령문 목록 의 인수 목록보다 인수가 적은 함수를 호출하면 전달되지 않은 인수가로 설정됩니다 undefined. 예를 들어 다음과 같이 테스트 할 수 있습니다.

    function dosomething(arg1, arg2) {
        if (arg2===undefined)
        arg2= DEFAULT_VALUE_FOR_ARG2;
        ...
    }

    이 방법을 사용하면 사이의 차이 말할 수 없습니다 dosomething(1)dosomething(1, undefined); arg2둘 다에서 동일한 값이됩니다. 차이점을 말해야하는 경우을 볼 수 arguments.length있지만 이와 같은 선택적 인수를 수행하는 것은 일반적으로 읽기 쉽지 않습니다.

  2. 함수가 없으면 함수가 return value;반환합니다 undefined. 일반적으로 이러한 반환 결과를 사용할 필요가 없습니다.

  3. var a블록에 명령문을 사용 하여 변수를 선언 했지만 아직 값을 지정하지 않은 경우 변수는 undefined입니다. 다시 말하지만, 실제로 그것에 의존 할 필요는 없습니다.

  4. 짜증 typeof연산자는 'undefined'피연산자가 존재하지 않는 단순한 변수 인 경우 참조하려고 할 때 일반적으로 발생하는 오류를 발생시키는 대신 반환합니다. (또한 간단한 변수를 괄호 로 묶을 수 있지만 존재하지 않는 변수를 포함하는 전체 표현식 은 제공 할 수 없습니다 .) 그다지 많이 사용하지는 않습니다.

  5. 이것은 논쟁의 여지가 있습니다. 존재하지 않는 객체의 속성에 액세스하면 다른 모든 언어와 같이 즉시 오류가 발생하지 않습니다. 대신 undefined객체 를 얻습니다 . (그리고 undefined나중에 스크립트에서 해당 객체 를 사용하려고 하면 JavaScript가 오류를 바로 던진 경우보다 추적하기가 훨씬 더 이상한 방식으로 잘못 진행됩니다.)

    이것은 종종 속성의 존재를 확인하는 데 사용됩니다.

    if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
       ...do something...

    그러나 undefined다른 값과 같이 지정할 수 있기 때문에 :

    o.prop= undefined;

    실제로 속성이 있는지 여부를 감지하지 못합니다. inJavaScript의 원래 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. 정의에 nullundefined같이 어느 쪽도 평가해서는 안 true이나 false,하지만 자바 스크립트들을 평가 nullfalse, 당신은 정의되지 않은 변수를 평가하려고하면 오류가 있습니다.

제대로 테스트하려면 undefined하거나 null, 이들을 사용 :

if(typeof(testvar) === "undefined") { ... }

if(testvar === null) { ... }


답변

기본적인 차이가 있다는 것입니다 undefinednull다른 개념을 나타냅니다.

null사용 가능한 경우에만 null성가신 오류 잡기를 사용하지 않으면 의도적으로 값으로 설정되었는지 또는 값이 아직 설정되지 않았는지 확인할 수 없습니다.

var a;

a == null; // This is true
a == undefined; // This is true;
a === undefined; // This is true;

그러나 의도적으로 값을로 설정하면 다음 null과의 엄격한 동등성이 undefined실패하므로 값 nullundefined값 을 구별 할 수 있습니다 .

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).

http://en.wikipedia.org/wiki/Undefined_value


답변

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, 명령 행에서 변수를 정의되지 않은 것으로 설정하는 방법 :

jsUbuntu 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