>웹 프론트엔드 >JS 튜토리얼 >실제 세계의 자동 유형 변환

실제 세계의 자동 유형 변환

Lisa Kudrow
Lisa Kudrow원래의
2025-02-24 08:30:11324검색

Automatic Type Conversion In The Real World

코어 포인트

JavaScript의 자동 유형 변환은 다른 상황에서 장점이자 단점입니다. 핵심 함수로서, 연산자 또는 문이 특정 데이터 유형을 기대할 때 데이터를 예상 유형으로 변환합니다.

변환 결과에 따르면 JavaScript 값을 "True 값"또는 "False 값"이라고합니다. 6 가지 오용 값이 있습니다 : , ,
    ,
  • ,
  • , (빈 문자열) 및 false 유형 변환이 어떻게 평가에 영향을 미치는지 신중하게 고려해야합니다. 예를 들어, 선택적 매개 변수의 기본값을 정의 할 때는 고장을 방지하기 위해 알려진 데이터의 진실을 보장해야합니다. undefined 를 사용하는 명시 적 테스트는 항상 안전하지만 자동 유형 변환을 사용하는 것은 파일이 더 빨리로드되고 대역폭을 적게 사용하므로 파일 크기 고려 사항에 도움이됩니다. 그러나 프로그래밍 언어가 어떻게 유형 변환을 처리하는지 이해하는 것이 예기치 않은 결과를 피하기 위해 중요합니다. null 0 JavaScript에서 흔한 표현이 있지만 일부 프로그래밍 순수 주의자들은 그들이 결코 좋은 생각이 아니라고 말할 것입니다. 이러한 표현은 공통적으로 가지고있는 것은 자동 유형 변환, 즉 JavaScript의 핵심 기능에 의존한다는 것입니다. 이는 상황과 관점에 따라 유리하고 단점입니다. "" 이 기사에서는이 두 표현에 특별한주의를 기울이고 어떤 경우에는 좋은 아이디어이며 좋은 아이디어가 아닌 것을 고려하고 싶습니다. NaN 첫 번째 표현식은 간단한 조건입니다 :
  • 두 번째 표현식은 선택적 값을 가진 가변 할당입니다.
  • 두 예제 모두에서 부울이라면, 표현식은 간단합니다. 에, 그렇지 않으면 typeof
  • 를 할당합니다.
그러나 단순한 부울 값이 아니라면

가 객체, 문자열 또는 인 경우 어떻게해야합니까?

가 다른 데이터 유형이라면 어떻게됩니까? 이러한 표현식이 어떻게 계산되는지 이해하려면 JavaScript가 데이터 유형을 자동으로 변환하는 방법을 이해해야합니다.

자동 유형 변환

javaScript는 "느슨하게 입력 된"언어입니다. 즉, 연산자 또는 명령문이 특정 데이터 유형을 기대할 때마다 JavaScript는 자동으로 데이터를 해당 유형으로 변환 함을 의미합니다. 첫 번째 예제에서

문장은 부울 값을 기대하므로 괄호 안에 정의 된 내용은 부울 값으로 변환됩니다. 및 명령문에 대해서도 마찬가지입니다. if() 그러한 전환의 결과 (예 : 참 또는 거짓)에 따라 JavaScript 값을 종종 "true"또는 "false 값"이라고합니다. 그것을 이해하는 가장 쉬운 방법은 다음과 같습니다. 값이 잘못된 값으로 알려져 있지 않으면, 값은 사실

six 거짓 값이 있습니다.

(물론!)
  • false
  • (숫자 0) (빈 문자열) undefined (비 번호)
  • 주목할만한 예외는 "0"(String Zero) 및 모든 유형의 객체입니다 - 실제 값 - 여기에는 ALL
  • 기본 생성자가 포함되며, 이는 null 계산 결과를 의미합니다! (약간 혼란 스럽지만 실제로는 그런 기본 값을 만들 필요가 없습니다.)
  • . 참고 : 두 가지 잘못된 값을 비교한다고해서 두 가지 값이 모두 잘못된 값이더라도 ()와 같이 기대할 수있는 결과가 항상 생성되는 것은 아닙니다. 평등 평가가 어떻게 작동하는지 결정하는 몇 가지 복잡한 알고리즘이 있으며,이를 논의하는 것은이 기사의 범위를 벗어납니다. 그러나 자세한 내용에 관심이 있으시면 ECMAScript 5.1에서 추상 평등 비교 알고리즘을 확인할 수 있습니다.
  • 0 조건부 바로 가기
  • 예제는 처음에 보여준 예는 표현을 부울 값으로 변환합니다. 객체는 항상 true로 평가되고 ""가 False로 평가되므로 그러한 조건을 사용하여 DOM을 테스트 할 수 있습니다. 요소의 존재 :
  • DOM 사양에 존재하지 않는 요소가 반환해야하기 때문에 DOM 요소를 처리 할 때 항상 안정적으로 작동합니다.
  • 그러나 다른 상황은이 예와 같이 명확하지 않습니다. NaN 이러한 조건은 종종 foo 매개 변수가 "
  • 로 정의되면 "를 나타내는 데 사용되지만 실패를 유발할 수있는 몇 가지 상황이 있습니다. 예를 들어, 부울 값 이거나 빈 문자열 인 경우

    가 이미 정의 된 경우에도 조건부 코드가 실행되지 않습니다. 우리가 원하는 것은 이것입니다 : 정의되지 않은 매개 변수 (및 기타 변수)의 데이터 유형은 ""입니다. 따라서 비교기를 사용하여 매개 변수의 데이터 유형을 테스트 할 수 있으며 가 완전히 정의되면 항상 조건이 전달됩니다. 물론, 표현식은 여전히 ​​부울 값을 계산하고 있지만, 그것이 계산하는 부울 값은 new Boolean(false) 표현의 결과입니다.

    할당 바로 가기 처음에 보여준 두 번째 예제는 논리 연산자를 사용하여 변수에 할당되어야하는 두 값 중 어느 것을 결정합니다. null != false 논리 연산자는 부울 값을 반환하지 않지만 여전히

    부울 값을 기대하므로 전환 및 계산이 내부적으로 발생합니다. 가 true로 평가되면 의 값이 반환됩니다. 이것은 매우 유용합니다. 이 표현식은 일반적으로 이벤트 처리기에서 볼 수 있으며 지원되는 모델을 기반으로 이벤트 매개 변수를 정의하는 데 사용됩니다.

    따라서
    <code class="language-javascript">if (foo) {
    }</code>
    는 부울 값으로 계산됩니다. 이벤트 매개 변수 모델이 지원되는 경우 (이벤트 객체), 그렇지 않으면 잘못된 값 (); 그렇지 않으면 <.>를 반환합니다.

    동일한 유형의 표현식은 종종 이벤트 속성을 할당하는 데 사용되며 각 가능성을 평가하여 지원되는 속성을 찾습니다. e 따라서 따라서, 이러한 각 참조는 차례로 (왼쪽에서 오른쪽으로) 평가되며 첫 번째 계산은 사실입니다. 첫 번째 사례는 표준 모델을 처리하고 두 번째 사례는 인터넷 익스플로러를위한 것이고 세 번째 사례는 인터넷 익스플로러 (undefined 속성없이) 이벤트가 트리거 될 수있는 인터넷 익스플로러입니다. e 그러나 그러나이 표현은 데이터의 진실을 알지 못하고 실패하기 쉽다. 예를 들어, 또 다른 공통 사용 사례는 선택적 매개 변수의 기본값을 정의하는 것이지만 이것은 좋지 않습니다 : . window.event 지금, 당신이 확실하다면, 당신이 확실하다면,

    는 항상

    또는
    <code class="language-javascript">var x = foo || bar;</code>
    이며, 빈 문자열을

    로 취급 해야하는 경우 표현식은 안전합니다. 그러나 그렇지 않은 경우, 예를 들어보다 정확한 컨텐츠로 재정의해야합니다. srcElement "문자열"에 대해 유형을 테스트함으로써 다양한 사례 -

    정의되지 않은 사례와 비 스트링 값으로 잘못 정의되는 경우를 처리 할 수 ​​있습니다. 이 경우 빈 줄을 유효한 입력으로 허용하지만 빈 문자열을 제외하려면 두 번째 조건을 추가해야합니다.

    문제를 일으킬 수있는 놀랍도록 미묘한 상황이 있습니다. 예를 들어 입력 타임 스탬프가 선택적으로 정의되지 않는 한 UNIX 타임 스탬프를 생성하는 날짜 함수가있을 수 있습니다.

    입력이 0이면 0은 오류 값이지만 유효한 타임 스탬프이기 때문에 실패합니다.
    <code class="language-javascript">var element = document.getElementById("whatever");
    if (element) {
      // 元素存在
    } else {
      // 元素不存在
    }</code>

    일반 원칙 foo 이 모든 것에서 배운 일반적인 교훈은 간단합니다 - 유형 변환이 어떻게 평가에 영향을 미치는지 생각하고 우리가 겪는 함정에 빠지지 않도록주의하십시오. 적절한주의와주의로 자동 유형 변환을 사용하여 적절한 경우 조건과 논리 표현을 단축 할 수 있습니다. 그러나 이것은 질문을 제기합니다. 우리가 를 사용하는 것이 항상 안전하다는 것을 알고 있다면 자동 유형 변환에 의존하는 것이 때때로 안전하지 않다는 것을 알고 있다면 undefined 항상 undefined가 명확하지 않습니까? 물론, 문법이 짧은 문법을 선호하는 이유가 단순히 더 빠르게 입력되기 때문입니다. 이것은 게으르고 조잡한 이유입니다.

    그러나 진실은 JavaScript가 일반적으로 공개 네트워크를 통해 실행되며,이 경우 파일 크기가 중요합니다. 작은 파일이 더 빨리로드되고 대역폭을 적게 사용하며 작은 구문 단축키가 실제로 축적 될 수 있습니다.
    <code class="language-javascript">function doStuff(foo) {
      if (foo) {
        ...
      }
    }</code>
    더 짧은 표현을 사용하는 것은 최적화 자체가 아니라 언어 기능을 최대한 활용하는 프로그래밍 스타일 일뿐입니다.

    (원본 텍스트의 FAQ 섹션은이 부분의 내용이 기사의 주제와 약하게 관련되어 있고 더 길기 때문에 여기서 생략되므로 의사 원리 작품을 유지하는 데 적합하지 않습니다).

위 내용은 실제 세계의 자동 유형 변환의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.