if(xx)와 비교 연산자 a==b의ture/false의 판단

3410 단어
먼저 다음 코드를 살펴보겠습니다.
if ([0]) {
  console.log([0] == true);//false
  console.log(!![0]);//true
}

if ("potato") {
  console.log("potato" == false);//false
  console.log("potato" == true);//false
}

위의 두 단락의 코드에서 알 수 있듯이 if( )a == b는ture/false에 대한 판단이 다르다.다음은 우리가 범례를 통해 깊이 이해하고자 한다.

if(조건 판단)


Undefined,null
if(undefined){console.log("true")}; //    
if(null){console.log("true")};//    

Boolean
if(true){console.log("true")};// true
if(false){console.log("true")};//    

Number
if(0){console.log("true")};//    
if(NaN){console.log("true")};//    
if(0.0){console.log("true")};//    
if(1){console.log("true")};// true
if(-1){console.log("true")};// true

String
if(""){console.log("true")};//    
if(" "){console.log("true")};// true
if("0"){console.log("true")};// true
if("false"){console.log("true")};// true

Object
if({}){console.log("true")};// true

위의 예에서 규칙을 요약하면 다음과 같습니다.
타입
결실
Undefined
false
Null
false
Boolean
직접 판단
Number
0, 또는 NAN은 false, 기타는true
String
빈 문자열은false이고 기타는true
Object
true

비교 기호 표현식


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

Number == String
console.log(6 == "6");//  true
console.log(6.1 == "6.1");//  true
console.log(6 == "six");// false

Boolean == Number/String
console.log(true == 1);// true
console.log(false == 0);// true
console.log(true == "1");//  true
console.log(false == "0");//  true

Object == Number/String
fn = new String("2");
fn == 2; // true
fn == "2"; // true
fn == 1; // false

규칙 요약:
  • 비교하기 전에 == 양쪽의 서로 다른 유형의 값을 먼저 전환한다. 전환 규칙은 다음과 같다.
  • 타입
    변환 결과
    Boolean
    수치로 변환,ture==>1,false==>0
    String
    숫자 "123"==> 2, "abc"===> NaN으로 변환
    Object
    원래 유형으로 변환(PrimitiveValue), 즉 먼저 호출.valueOf, 정의가 없으면 호출 시도.toString.
  • 양쪽의 수치 유형이 같으면 비교한다.

  • 우리 다시 돌아와서 처음의 예를 설명하자
    if ([0]) {
      console.log([0] == true);//false
      console.log(!![0]);//true
    }
    

    //수조[0]를 대상으로 하기 때문에if문장에서true로 판정한다.[0] == true에 대해 먼저 [0].valueOf (), 수조의 valueOf () 방법이 자신에게 되돌아오기 때문에 결과는 원시 형식이 아닙니다. 계속 호출 [0].toString().배열의 경우 toString () 방법의 알고리즘은 모든 요소를 문자열 형식으로 변환한 다음 쉼표로 연결한다. 따라서 최종 결과는 문자열"0"이고 이것은 원시 형식의 값이다.이 때 표현식은 '0' = = true 두 동작 수가 문자열 형식, 부울 형식으로 바뀌었습니다.앞에서 정리한 규칙에 따라'0'은 수치 0으로,true는 수치 1로 전환한다.표현식은 0==1이(가) 되고 결과는 false가 됩니다.
    if ("potato") {
      console.log("potato" == false);//false
      console.log("potato" == true);//false
    }
    

    //potatoif문장에서 문자열이므로true로 판정됩니다.다시 보면 표현식"potato" == false", 선유형 변환"potato" 문자열 유형은 NaN,false는 0으로 변환되어 결과는false이다.

    좋은 웹페이지 즐겨찾기