자바스크립트 - == 및 ===

1. ==



Equality(==) - MDN

항등 연산자의 캄파리손은 대략 다음과 같이 요약할 수 있습니다.
  • 피연산자가 둘 다 개체인 경우 두 피연산자가 동일한 개체를 참조하는 경우에만 true를 반환합니다.

  • let a = { food: "pork", fruit: "watermelon" };
    let b = a;
    console.log(a == b); //true
    let c = { ...a }; //or other object-copy operations
    console.log(a == c); //false
    


  • 한 피연산자가 null이고 다른 피연산자가 undefined이면 true를 반환합니다.

  • console.log(undefined == null); //true
    console.log(null == undefined); //true
    



  • 피연산자의 유형이 동일한 경우 다음과 같이 비교됩니다.
  • 문자열: 두 피연산자의 문자가 같은 순서로 같은 경우에만 true를 반환합니다.

  • console.log("abcd" == "abcd"); //true
    console.log("abcd" == "abcde"); //false
    

  • 숫자: 두 피연산자의 값이 같은 경우에만 true를 반환합니다. +0-0는 같은 값으로 취급됩니다. 피연산자 중 하나가 NaN 이면 false 를 반환합니다.

  • console.log(1 == 1); //true
    console.log(1 == 2); //false
    console.log(+0 == -0); //true
    console.log(NaN == NaN); //false
    

  • 부울: 피연산자가 둘 다 true 또는 둘 다 true인 경우에만 false를 반환합니다.



  • 피연산자의 유형이 다른 경우 비교하기 전에 피연산자를 동일한 유형으로 변환해 보십시오.
  • 숫자를 문자열과 비교할 때 문자열을 숫자 값으로 변환해 보십시오.

  • console.log(1 == "1"); //true
    

  • 피연산자 중 하나가 부울인 경우 부울 피연산자가 true이면 1로, false이면 0으로 변환합니다.

  • console.log(true == 1); //true
    console.log(false == 0); //true
    console.log(0 == !!null); // true. !null is true, !true is false, false is 0
    console.log(0 == !!undefined); // true. !undefined is true, !true is false, false is 0
    

  • 피연산자 중 하나가 객체이고 다른 하나가 숫자나 문자열인 경우 객체의 valueOf()toString() 메서드를 사용하여 객체를 프리미티브로 변환해 보십시오.
  • Object.prototype.valueOf() : 지정된 객체(문자열, 숫자, bigint, 부울, 기호 유형의 객체)의 기본 값을 반환합니다. 객체에 기본 값(객체 유형의 객체)이 없으면 객체 자체를 반환합니다.

  •   // objects of type string, number, bigint, boolean, symbol
      let a = 1;
      console.log(a.valueOf()); // 1
      // objects of type object
      let b = { name: "Kitty" };
      console.log(b.valueOf()); // { name: 'Kitty' }
    

  • Object.prototype.toString() : 객체(문자열, 숫자, bigint, 부울, 기호 유형의 객체)를 나타내는 문자열을 반환합니다. 객체에 기본 값(객체 유형의 객체)이 없으면 [object Type] 를 반환합니다.

  •   // objects of type string, number, bigint, boolean, symbol
      let a = 1;
      console.log(a.toString()); // "1"
      // objects of type object
      let b = { name: "Kitty" };
      console.log(b.toString()); // [object Object]
    

  • Array.prototype.toString() : 배열 객체가 객체의 메서드 toString()을 재정의합니다. 배열의 요소를 나타내는 문자열을 반환합니다.

  •   let arr = ["kitty"];
      console.log(arr.toString()); // 'kitty'
    





    // object == string
    let obj = { name: "kitty" };
    console.log(obj == "kitty"); //false. obj.valueOf(): { name: "kitty" }, obj.toString(): [object Object]
    // array == string
    let arr = ["kitty"];
    console.log(arr == "kitty"); //true. arr.valueOf(): ['kitty'], arr.toString(): 'kitty'
    


    2. ===



    Strict equality(===) - MDN

    같음 연산자와 달리 완전 같음 연산자는 항상 서로 다른 형식의 피연산자를 서로 다른 것으로 간주합니다.
  • 피연산자의 유형이 다른 경우 false 를 반환합니다.

  • consol.log("3" === 3); //false
    console.log(true === 1); //false
    console.log(null === undefined); //false
    


  • 두 피연산자가 객체이면 동일한 객체를 참조하는 경우에만 true를 반환합니다.

  • let obj1 = { name: "kitty", age: 1 };
    let obj2 = obj1;
    console.log(obj1 === obj2);
    let obj3 = { name: "kitty", age: 1 };
    console.log(obj1 === obj3);
    let obj4 = { ...obj1 };
    console.log(obj1 === obj4);
    


  • 두 피연산자가 모두 null이거나 두 피연산자가 모두 undefined이면 true를 반환합니다.

  • console.log(null === null); // true
    console.log(undefined === undefined); // true
    


  • 피연산자 중 하나가 NaN 이면 false 를 반환합니다.

  • console.log(NaN === NaN); // false
    



  • 그렇지 않으면 두 피연산자의 값을 비교합니다.
  • 숫자는 동일한 숫자 값을 가져야 합니다. +0-0는 같은 값으로 간주됩니다.

  • console.log(+0 === -0); //true
    console.log(1 === 1); //true
    console.log(0 === 1); //false
    

  • 문자열에는 같은 순서로 같은 문자가 있어야 합니다.

  • console.log("kitty" === "kitty"); //true
    console.log("kitty" === "kity"); //false
    

  • 부울은 둘 다true이거나 둘 다false여야 합니다.

  • =====의 가장 눈에 띄는 차이점은 피연산자의 유형이 다른 경우 == 연산자는 비교하기 전에 피연산자를 동일한 유형으로 변환하려고 시도한다는 것입니다.

    좋은 웹페이지 즐겨찾기