>

다음과 같은 개체를 사용하여 작업을 수행하기 전에 유효성 검사를 수행해야합니다. <올>

  • 해당 개체가있는 경우
  • 존재하는 경우 특정 속성도 존재합니다.
  • 예를 들어

    var obj = {
        key: "value"
    }
    
    

    이제 가장 일반적인 방법은-

    if(obj) {
        if(obj.hasOwnProperty('key') {
            //Do some action (validity check pass)
            //For Example- console.log(obj.key);
        }
    }
    
    

    그러나이 문제를 해결 해야하는보다 빠르고 효율적인 방법을 찾고 있습니다.


    • 답변 # 1

      할 일 :

      if ( typeof obj != "undefined" && obj.hasOwnProperty('key') ) 
      { 
          console.log('found'); 
      } 
      else 
      { 
          console.log('not found');
      }
      
      

    • 답변 # 2

      좋아요?

      var obj = {
          key: "value"
      }
      var objx = null;
      
      if(obj && "key" in obj){
      	document.getElementById("check_one").innerHTML = "is valid";
      }else{
      	document.getElementById("check_one").innerHTML ="is not valid";
      }
      if(obj && "notkey" in obj){
      	document.getElementById("check_two").innerHTML = "is valid";
      }else{
      	document.getElementById("check_two").innerHTML ="is not valid";
      }
      if(objx && "key" in objx){
      	document.getElementById("check_three").innerHTML = "is valid";
      }else{
      	document.getElementById("check_three").innerHTML ="is not valid";
      }
      
      
      <p>
      Check One (should be valid): <span id="check_one"></span>
      </p>
      <p>
      Check Two (should be invalid): <span id="check_two"></span>
      </p>
      <p>
      Check Three (should be invalid) <span id="check_three"></span>
      </p>
      
      

      필요한 브라우저 지원에 따라 Reflect.has를 사용할 수도 있습니다

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has

      좋아요

      Reflect.has(obj, 'key');
      
      

      이전 IE를 지원하려면 HasOwnProperty와 함께 가야 할 것 같습니다. 다른 가능성은 없습니다-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

    • 답변 # 3

      @Stuart와 @phuzi가 언급 한 것처럼 두 문장을 하나로 결합 할 수 있습니다.

      if(!!obj && obj.hasOwnProperty('key')
      
      

      또한 hasOwnProperty  프로토 타입을 통해 제공되는 모든 상속 된 속성을 무시합니다. 상속 된 속성을 포함하려면 in  여기에서 연산자를 사용할 수 있습니다.

      if (!!ob && (prop in ob))
      
      

    • 답변 # 4

      프로토 이프 체인에 관심이 있다면 더 좋은 방법은 없습니다. 체인에서모든링크를 확인해야합니다.

      그렇지 않고 속성이 존재하는 경우 속성에 액세스하고 예외를 포착하는 것이 가치가 있지만 성능 테스트를 사용하여 확인하십시오.

      하지만 문제는 입력에 대해 충분히 제한적이지 않다는 것입니다. 코드 호출자가 객체를 제공하고 처리하도록 요구하십시오.

      나에게 그것은 "객체가 존재 하는가?"라는 기본값과 "객체가이 속성을 가지고 있는가?"라는 두 가지 별도의 문제처럼 "냄새가 나는"비즈니스 로직이다.

      그렇다면 표준 패턴을 사용하여 기본값을 설정하십시오 : "obj = obj || {};" 예를 들어;그런 다음 테스트는 단일 호출이되어 "빠르게"만들기가 어렵습니다.

  • 이전 php - 드루팔 8 컬 60 오류
  • 다음 c# - 세 가지 유형의 Specflow 플러그인 (런타임, 생성기, 런타임/생성기)의 차이점은 무엇입니까?