javascript - 치환 - undefined 뜻




null이 객체이고, null과 undefined의 차이점은 무엇입니까? (14)

JavaScript에서 nullobject 로 간주되는 이유는 무엇입니까?

확인하고있다.

if ( object == null )
      Do something

같은

if ( !object )
      Do something

?

그리고 또한:

nullundefined 의 차이점은 무엇입니까?


null과 undefined의 차이점은 무엇입니까 ??

정의가없는 속성은 정의되지 않습니다. null는 객체입니다. 그 유형은 객체입니다. null은 "값 없음"을 의미하는 특수 값이며 undefined는 객체가 아니며 유형은 정의되지 않습니다.

변수를 선언하고 null로 설정하면 "null"이 "undefined"와 비교하여 인쇄되는 것을 제외하고는 동작이 동일합니다. 정의되지 않은 변수를 null로 비교하거나 그 반대로 비교할 수 있으며 조건은 true가됩니다.

 undefined == null
 null == undefined

자세한 내용 은 null과 undefined의 JavaScript 차이점을 참조하십시오.

그리고 새 편집

if (object == null)  does mean the same  if(!object)

객체가 false인지 테스트 할 때, false 일 경우에만 조건을 충족하지만 true 일 때는 조건을 충족하지 않습니다.

여기에서 확인하십시오 : Javascript gotcha


  1. Undefined는 변수가 선언되었지만 "값 없음"을 나타내는 변수에 Null을 할당 할 수있는 동안 값이 할당되지 않았 음을 나타냅니다 (Null은 대입 연산자 임).

2.Undefined는 유형 자체이며 Null은 객체입니다.

3.Javascript는 할당되지 않은 변수를 undefined로 초기화 할 수 있지만 변수의 값을 null로 설정할 수는 없습니다. 이것은 프로그래밍 방식으로 이루어져야합니다.


Nicholas C. Zakas의 "Object-Oriented Javascript의 원리"

하지만 객체가 null 일 때 왜 객체입니까? 사실, 이것은 JavaScript를 디자인하고 유지하는위원회 인 TC39에 의해 오류로 인정되었습니다. null은 빈 객체 포인터이므로 "객체"를 논리적 인 반환 값으로 만들지 만 여전히 혼란 스럽습니다.)

Zakas, Nicholas C. (2014-02-07). 객체 지향 자바 스크립트의 원리 (Kindle Locations 226-227). 아니 전분 압박. 킨들 에디션.

그것이 말했다 :

var game = null; //typeof(game) is "object"

game.score = 100;//null is not an object, what the heck!?
game instanceof Object; //false, so it's not an instance but it's type is object
//let's make this primitive variable an object;
game = {}; 
typeof(game);//it is an object
game instanceof Object; //true, yay!!!
game.score = 100;

정의되지 않은 경우 :

var score; //at this point 'score' is undefined
typeof(score); //'undefined'
var score.player = "felix"; //'undefined' is not an object
score instanceof Object; //false, oh I already knew that.

null과 undefined는 모두 값의 동일성에 대해 false입니다 (null == undefined). 둘 다 부울 false로 축소됩니다. 그것들은 같은 객체가 아닙니다 (null! == undefined).

undefined는 전역 객체 (브라우저의 "window")의 속성이지만 객체 자체는 아니고 원시 유형입니다. 그것은 초기화되지 않은 변수와 함수가 return 문없이 끝날 때의 기본값입니다.

null는 Object의 인스턴스입니다. null는, 빈 상태 (empty)의 결과를 나타내는 콜렉션 객체를 돌려주는 DOM 메소드로 사용되어 에러를 나타내지 않고 false 값을 제공합니다.


다음 함수는 차이점을 알아낼 수있는 이유와 가능성을 보여줍니다.

function test() {
        var myObj = {};
        console.log(myObj.myProperty);
        myObj.myProperty = null;
        console.log(myObj.myProperty);
}

전화하면

test();

너 점점 나아지고있어.

정의되지 않은

없는

첫 번째 console.log(...) 는 아직 정의되지 않은 myObj 에서 myProperty 를 가져 myProperty 따라서 "undefined"가 반환됩니다. null을 할당하면 myProperty 가 있기 때문에 두 번째 console.log(...) 가 "null"을 반환하지만 null 값이 할당됩니다.

이 차이를 쿼리 할 수 ​​있으려면 JavaScript에 nullundefined . null 은 - 다른 언어의 개체와 마찬가지로 사용할 수있는 인스턴스가 없기 때문에 undefined 를 개체로 사용할 수 없습니다.


몇 가지 정밀도 :

null과 undefined 서로 다른 두 값입니다. 하나는 이름에 대한 값 부재를 나타내고 다른 하나는 이름 부재를 나타냅니다.

if 에서 일어나는 일은 if( o ) 대해 다음과 같이 진행됩니다.

괄호 안의 표현식이 평가되고 if 가 괄호 안의 표현식 값을 강제로 입력합니다.

자바 스크립트에서 거짓 (false로 변환) 값은 '', null, undefined, 0 및 false 입니다.


이것 좀봐:

   <script>
function f(a){
  alert(typeof(a));
  if (a==null) alert('null');
  a?alert(true):alert(false);
}
</script>
                                          //return:
<button onclick="f()">nothing</button>    //undefined    null    false
<button onclick="f(null)">null</button>   //object       null    false
<button onclick="f('')">empty</button>    //string               false
<button onclick="f(0)">zero</button>      //number               false
<button onclick="f(1)">int</button>       //number               true
<button onclick="f('x')">str</button>     //string               true


질문의 첫 번째 부분 :

JavaScript에서 null이 객체로 간주되는 이유는 무엇입니까?

그들은 지금 고칠 수없는 JavaScript 디자인 오류입니다. 형식이 null이거나 형식 개체가 아니거나 아예 있어야합니다. 실제 객체를 탐지 할 때 추가 검사 (때로는 잊어 버림)가 필요하며 버그의 원인입니다.

질문의 두 번째 부분 :

확인하고있다.


if (object == null)
Do something

같은

if (!object)
Do something

두 가지 검사는 다음을 제외하고 항상 둘 다 false입니다.

  • object가 미정 도리 또는 null의 경우, 양쪽 모두 true입니다.

  • 객체가 프리미티브이고 0, "" 또는 false : 먼저 false를 확인하고 두 번째는 true입니다.

객체가 원시 객체가 아니고 new Number(0) , new String("") 또는 new Boolean(false) 과 같은 실제 객체 인 경우 두 검사는 모두 false입니다.

따라서 '객체'가 실제 객체를 의미하는 것으로 해석되면 두 검사는 항상 동일합니다. 프리미티브가 허용되면 0, "" 및 false에 대해 검사가 다릅니다.

object==null 과 같은 경우에는 잘 알려지지 않은 결과가 버그의 원인이 될 수 있습니다. == 사용은 결코 권장되지 않으며 대신 === 사용하십시오.

질문의 세 번째 부분 :

그리고 또한:

null과 undefined의 차이점은 무엇입니까?

JavaScript에서 한 가지 차이점은 null은 object 유형이고 undefined는 undefined 유형입니다.

JavaScript에서는 null==undefined 가 true이고, type이 무시되면 null==undefined 간주됩니다. 왜 그들은 그것을 결정했지만, 0, "" 과 거짓은 동등하지 않습니다. 나는 모른다. 그것은 임의의 의견으로 보인다.

자바 스크립트에서 null===undefined 는 타입이 === 에서 동일해야하므로 true가 아닙니다.

사실, null과 undefined는 둘 다 존재하지 않기 때문에 동일합니다. 0, 그리고 그 문제에 대해서는 "" , 그리고 빈 컨테이너 []{} 있습니다. 동일한 종류의 여러 가지 유형이 버그에 대한 처방입니다. 하나의 유형 또는 전혀없는 것이 좋습니다. 나는 가능한 한 적게 사용하려고 노력할 것입니다.

'거짓', '참', '!' 예를 들어, if(!x)if(x) 만으로 충분하다면, 당신은 참과 거짓을 필요로하지 않을 것입니다.

선언 된 var x 는 값이 지정되지 않으면 undefined이지만 x가 전혀 선언되지 않은 경우와 동일해야합니다. 또 다른 버그 소스는 빈 아무것도없는 컨테이너입니다. 따라서 var x=1 처럼 함께 선언하고 정의하는 것이 가장 좋습니다.

사람들은이 다양한 유형의 모든 것을 알아 내려고 노력하면서 동그라미를 빙빙 돌았지만 복잡하고 다른 옷에는 모두 똑같습니다. 현실은

undefined===undeclared===null===0===""===[]==={}===nothing

그리고 어쩌면 모두 예외를 던져야합니다.


차이점을이 스 니펫에 요약 할 수 있습니다.

alert(typeof(null));      // object
alert(typeof(undefined)); // undefined

alert(null !== undefined) //true
alert(null == undefined)  //true

확인 중

object == nullif ( !object ) 를 검사 if ( !object ) 것과 다릅니다.

후자는 ! Boolean(object) ! Boolean(object) , 단항 ! 연산자는 오른쪽 피연산자를 부울로 자동 변환합니다.

Boolean(null) 은 false와 같기 때문에 !false === true .

따라서 객체가 null아니고 false 또는 0 또는 "" 인 경우 다음과 같은 이유로 검사가 통과합니다.

alert(Boolean(null)) //false
alert(Boolean(0))    //false
alert(Boolean(""))   //false

null객체아니고 원시 값 입니다. 예를 들어, 속성을 추가 할 수 없습니다. typeof null"object" 반환하기 때문에 사람이 typeof null 로 객체라고 가정하는 경우가 있습니다. 하지만 실제로는 버그입니다 (ECMAScript 6에서도 수정 될 수 있음).

nullundefined 의 차이점은 다음과 같습니다.

  • undefined : 자바 스크립트에서 사용되며 "가치 없음"을 의미합니다. 초기화되지 않은 변수, 누락 된 매개 변수 및 알 수없는 변수는 해당 값을가집니다.

    > var noValueYet;
    > console.log(noValueYet);
    undefined
    
    > function foo(x) { console.log(x) }
    > foo()
    undefined
    
    > var obj = {};
    > console.log(obj.unknownProperty)
    undefined
    

    그러나 알 수없는 변수에 액세스하면 예외가 발생합니다.

    > unknownVariable
    ReferenceError: unknownVariable is not defined
    
  • null : 프로그래머가 "값 없음"을 나타낼 때 사용합니다 (예 : 함수의 매개 변수).

변수 검사 :

console.log(typeof unknownVariable === "undefined"); // true

var foo;
console.log(typeof foo === "undefined"); // true
console.log(foo === undefined); // true

var bar = null;
console.log(bar === null); // true

일반적으로 JavaScript에서는 === 및 never ==를 사용해야합니다 (==는 예기치 않은 결과를 생성 할 수있는 모든 종류의 변환 을 수행 합니다 ). x == null 검사는 nullundefined 모두에서 작동하기 때문에 가장자리 경우입니다.

> null == null
true
> undefined == null
true

변수에 값이 있는지 여부를 확인하는 일반적인 방법은 값을 부울로 변환하고 이것이 true 인지 확인하는 것 true . 이 변환은 if 문과 부울 연산자에 의해 수행됩니다! ("아니").

function foo(param) {
    if (param) {
        // ...
    }
}
function foo(param) {
    if (! param) param = "abc";
}
function foo(param) {
    // || returns first operand that can't be converted to false
    param = param || "abc";
}

이 방법의 단점 : 다음 값은 모두 false 평가되므로주의해야합니다 (예 : 위의 검사는 undefined0 구분할 수 없음).

  • undefined , null
  • 부울 : false
  • 숫자 : +0 , -0 , NaN
  • 문자열 : ""

Boolean 을 함수로 사용하여 Boolean 로 변환을 테스트 할 수 있습니다 (일반적으로 new 와 함께 사용되는 생성자).

> Boolean(null)
false
> Boolean("")
false
> Boolean(3-3)
false
> Boolean({})
true
> Boolean([])
true

null 는 객체입니다. 유형이 null입니다. undefined 는 객체가 아닙니다. 그 유형은 정의되지 않습니다.


(name is undefined)

당신 : name 은 무엇입니까? (*)
자바 스크립트 : name ? name 뭐니? 네가 무슨 말하는지 모르겠다. 전에 어떤 name 도 언급하지 않았습니다. (클라이언트) 측에서 다른 스크립팅 언어를보고 있습니까?

name = null;

당신 : name 은 무엇입니까?
자바 스크립트 : 잘 모르겠습니다.

간단히 말해서; undefined 는 사물의 개념이 존재하지 않는 곳이다. 형식이 없으며 이전에 해당 범위에서 참조 된 적이 없습니다. null 은 존재하는 것으로 알려진 곳이지만 값이 무엇인지는 알려져 있지 않습니다.

한 가지 기억해야 할 점은 null 은 개념적으로 false 또는 "" 등등과 같지 않다는 것입니다.

name = false;

당신 : name 은 무엇입니까?
JavaScript : Boolean false입니다.

name = '';

당신 : name 은 무엇입니까?
JavaScript : 빈 문자열

* :이 문맥에서의 name 은 한번도 정의되지 않은 변수를 의미합니다. 정의되지 않은 변수 일 수 있습니다. 그러나 name은 거의 모든 HTML 양식 요소의 속성입니다. 그것은 돌아 간다. 그리고 id 앞에 잘 제정되었다. ID는 고유해야하지만 이름은 같아야 할 필요가 없기 때문에 유용합니다.


var x = null;

x는 null로 정의됩니다.

y는 정의되어 있지 않습니다. // 정의하지 않았기 때문에 //

if (!x)

null는 false로서 평가됩니다.





typeof