javascript 형식 암시 적 변환

이 글 은 라 이 프 의 leanote 블 로그 에서 전 환 됩 니 다. http://leanote.com/blog/view/5357c38e1a91087246000001
+ 언제 숫자 로, 언제 문자열 로 바 꿉 니까?
  • + 단일 항목 을 숫자 로 전환
  • + 두 눈 을 문자열 로 변환 (숫자 + 숫자 = 숫자 제외)
  • 연산 자 '+' 양쪽 하 나 는 숫자 형식 이 고 하 나 는 문자열 형식 일 때 js 엔진 은 산술 가산 이 아 닌 문자열 연결 연산 을 규정 합 니 다.
    1 + "a" == "1a"

    하지만:
    #     +,        ,            
    +[] == 0
    +[1] == 1
    +[1, 2] => NAN
    +"1" == 1
    
    #   +  ,         !!!
    1+[] == "1"
    1+[2,3] == "12,3"
    
    #     
    1+1+"a" == "2a"

    *, - 모두 숫자 로 전환
    대상 변환
    모든 대상 이 boolean 으로 바 뀌 는 것 은 true!!![] 와 {} 포함
    대상 문자열
  • toString () 을 먼저 호출 하고 문자열 이나 원본 값 을 되 돌려 주면 문자열 로 전환 합 니 다
  • else 호출 value Of () 문자열 로 변환
  • 대상 회전 숫자
  • valueOf () 를 먼저 호출 하고 원시 값 을 되 돌려 주면 숫자
  • 로 전환 합 니 다.
  • else 호출 valueOf ()
  • 주의 하 다.
    +[] == 0
    +{} => NAN //   object  toString()    "[object Object]"

    기억 하 세 요: +두 눈 을 문자열 로 변환 (숫자 + 숫자 = 숫자 제외)
    []+{} == "[object Object]" 
    ""+{} == "[object Object]"
    
    {}+"" == 0 //    +"",    {}
    {}+0 == 0 //    +0
    0+{} == "0[object Object]" //      !!
    
    {}+{} == +{} => NAN

    자 바스 크 립 트 가 첫 번 째 를...  {}  빈 코드 블록 (code block) 으로 설명 하고 무시 하 였 습 니 다.
    레 퍼 런 스
    http://justjavac.com/javascript/2012/12/20/object-plus-object.html
    http://justjavac.com/javascript/2012/05/24/can-you-explain-why-10.html 
    http://stackoverflow.com/questions/7202157/why-is-10  Why is ++[[]][+[]]+[+[]] = “10”?
    http://www.ituring.com.cn/article/53351

    좋은 웹페이지 즐겨찾기