복붙노트

[JQUERY] 어떻게! ~ (안되지 물결 / 플레이 플레이 물결표)는 '포함 / 포함'배열 메서드 호출의 결과를 변경?

JQUERY

어떻게! ~ (안되지 물결 / 플레이 플레이 물결표)는 '포함 / 포함'배열 메서드 호출의 결과를 변경?

해결법


  1. 1.물결표 연산자는 전혀 실제로 jQuery를의 일부가 아닙니다 - 그것은 자바 스크립트 자체의 비트 NOT 연산자입니다.

    물결표 연산자는 전혀 실제로 jQuery를의 일부가 아닙니다 - 그것은 자바 스크립트 자체의 비트 NOT 연산자입니다.

    물결표 (~)의 위대한 신비를 참조하십시오.

    당신이 정수에 비트 단위 논리 연산을 수행하고 있기 때문에 (모든 I의 노하우에 대한 2의 보수 또는 같은 무언가로 저장 될 수있다, ...) 실험에 이상한 번호를 얻고있다

    2의 보수 바이너리에 숫자를 표현하는 방법에 대해 설명합니다. 내가 옳다고 생각합니다.


  2. 2.가끔 ~ $ .inArray 앞에 적용 볼 특정의 이유가있다.

    가끔 ~ $ .inArray 앞에 적용 볼 특정의 이유가있다.

    원래,

    ~$.inArray("foo", bar)
    

    할 수있는 짧은 방법입니다

    $.inArray("foo", bar) !== -1
    

    첫 번째 인수가 발견되면 $ .inArray 배열에서 항목의 인덱스를 반환하고, 반환 -1의 발견되지 않는 경우는. 당신의 부울을 찾고 있다면하는 것이이 수단 "배열이 값이?"는 truthy 값이며, 이후 -1, 당신은 부울 비교를 할 수없는 $ .inArray 0 (A falsy 값을 반환 할 때 ), 실제로 어레이의 첫 번째 요소는 검색된 의미한다.

    ~ 비트 연산자 원인을 적용 -1 0되고, '가 0이 발생합니다 -1. 따라서, 어레이 내의 값을 찾아서 비트 단위가 아닌 falsy 값 (0)의 결과에 적용하고, 다른 모든 값들은 0이 아닌 숫자를 반환하고 truthy 결과를 나타내는 것이다 없다.

    if (~$.inArray("foo", ["foo",2,3])) {
        // Will run
    }
    

    의도 한대로 그리고 그것은 작동합니다.


  3. 3.expr이 -1, 그렇지 않으면 허위 사실을! ~ EXPR의 평가합니다. 그것은 EXPR과 동일합니다! = -1 만 깨진 *

    expr이 -1, 그렇지 않으면 허위 사실을! ~ EXPR의 평가합니다. 그것은 EXPR과 동일합니다! = -1 만 깨진 *

    자바 스크립트 비트 연산은 2의 보수 형식으로 부호있는 32 비트 정수 피연산자를 변환하기 때문에 작동합니다. 다음과 같이 따라서! ~ -1 평가 :

       -1 = 1111 1111 1111 1111 1111 1111 1111 1111b // two's complement representation of -1
      ~-1 = 0000 0000 0000 0000 0000 0000 0000 0000b // ~ is bitwise not (invert all bits)
       !0 = true                                     // ! is logical not (true for falsy)
    !true = false                                    // duh
    

    이외의 값은 -1 이상의 비트 세트에 제로를 가질 것이다; 그것은 truthy 값을 생성한다 반전; 지원 ! truthy 값 반환에 두 번 연산자는 true 부울입니다.

    .indexOf (사용) 및 결과는 -1하지 않을 경우 우리는 확인하려는 경우 :

    !!~"abc".indexOf("d") // indexOf() returns -1, the expression evaluates to false
    !!~"abc".indexOf("a") // indexOf() returns  0, the expression evaluates to true
    !!~"abc".indexOf("b") // indexOf() returns  1, the expression evaluates to true
    

    *! ~이 가증는 신뢰성에 대해 테스트를 false로 8,589,934,591 평가하여 사용할 수 없도록 -1.


  4. 4.~ foo.indexOf (바)는 존재하지 않는 기능을 포함하고 있기 때문에 foo.contains (바)를 표현하는 일반적인 속기이다.

    ~ foo.indexOf (바)는 존재하지 않는 기능을 포함하고 있기 때문에 foo.contains (바)를 표현하는 일반적인 속기이다.

    일반적으로 부울로 캐스팅으로 인해 "falsy"값의 자바 스크립트의 개념을 필요가 없습니다. 이 경우는 참 또는 거짓으로 함수의 출력을 강제로 사용된다.


  5. 5.jQuery.inArray () -1을 리턴 "없는"에 대한, 그의 보체 (~)는 따라서 0이다 ~ jQuery.inArray는 () "을 찾을 수 없습니다"라는 falsy 값 (0), 및 truthy 값 (음을 반환 정수)은 "발견". !! 다음 실제 부울 참 / 거짓에 falsy / truthy 공식화됩니다. 그래서! ~ jQuery.inArray은 ()에 대한 사실 줄 것이다 "발견"과 "을 (를) 찾을 수 없습니다"에 대한 허위.

    jQuery.inArray () -1을 리턴 "없는"에 대한, 그의 보체 (~)는 따라서 0이다 ~ jQuery.inArray는 () "을 찾을 수 없습니다"라는 falsy 값 (0), 및 truthy 값 (음을 반환 정수)은 "발견". !! 다음 실제 부울 참 / 거짓에 falsy / truthy 공식화됩니다. 그래서! ~ jQuery.inArray은 ()에 대한 사실 줄 것이다 "발견"과 "을 (를) 찾을 수 없습니다"에 대한 허위.


  6. 6.이 수식 같다 INT 4 바이트의 ~ - (N + 1)

    이 수식 같다 INT 4 바이트의 ~ - (N + 1)

    그래서

    ~0   = -(0+1)   // -1
    ~35  = -(35+1)  // -36 
    ~-35 = -(-35+1) //34 
    

  7. 7.~ 연산자는 비트 보수 연산자입니다. inArray ()로부터 정수 결과는 두 -1, 소자가 발견, 또는 음이 아닌 정수가 아닌 경우. (모든 1 비트 이진 표현) -1 비트 보수는 0이다. 어떤 음이 아닌 정수의 비트 단위 보수는 항상 제로가 아닌.

    ~ 연산자는 비트 보수 연산자입니다. inArray ()로부터 정수 결과는 두 -1, 소자가 발견, 또는 음이 아닌 정수가 아닌 경우. (모든 1 비트 이진 표현) -1 비트 보수는 0이다. 어떤 음이 아닌 정수의 비트 단위 보수는 항상 제로가 아닌.

    정수 "내가"거짓이 아닌 양의 정수이고, 때 "나는"정확히 때 따라서! ~ 난 사실 -1.

    항상 정수 피연산자를 강제 변환 ~ 그 참고; 즉, 그것은 정수 부동 소수점 값을 비 - 정수뿐만 아니라, 숫자가 아닌 값을 강제로.


  8. 8.물결표는 비트 NOT - 그것은 값의 각 비트를 반전시킵니다. 당신이 수에 ~를 사용하는 경우 엄지 손가락의 일반적으로, 그 기호는 다음 (1)가 차감됩니다 반전됩니다.

    물결표는 비트 NOT - 그것은 값의 각 비트를 반전시킵니다. 당신이 수에 ~를 사용하는 경우 엄지 손가락의 일반적으로, 그 기호는 다음 (1)가 차감됩니다 반전됩니다.

    당신이 0 ~ 할 때 따라서, 당신은 (0 -0 반전 (1) -1 빼기) -1 얻을.

    그것은 본질적으로 항상 부울의 값을 얻기의 정교한, 슈퍼 마이크로 최적화 방법입니다.


  9. 9.네 말이 맞아 :이 코드는 false를 돌려줍니다 때 같이 IndexOf 호출이 반환 -1; 그렇지 않으면 사실.

    네 말이 맞아 :이 코드는 false를 돌려줍니다 때 같이 IndexOf 호출이 반환 -1; 그렇지 않으면 사실.

    당신이 말하는 것처럼, 같은 것을 사용하는 것이 훨씬 더 현명한 것

    return this.modifiedPaths.indexOf(path) !== -1;
    

  10. 10.~ 연산자는 비트 NOT 연산자입니다. 이것이 의미하는 것은 바이너리 형식에 숫자를 취 1과 0으로 사람과 사람에 모두 0을 전환한다는 것입니다.

    ~ 연산자는 비트 NOT 연산자입니다. 이것이 의미하는 것은 바이너리 형식에 숫자를 취 1과 0으로 사람과 사람에 모두 0을 전환한다는 것입니다.

    마찬가지로 -1 11111111 동안 예를 들어, 이진 숫자 0은 11,111,110 동안 -2 1 이진수 00000001이며, 0,000,000이다.


  11. 11.내 생각은 (라이브러리 저자 후 항상있는) 몇 가지 문자가 짧은 때문에이 있다는 것입니다. 또한 네이티브 코드로 컴파일 할 때 몇 머신 사이클을 취하는 것이 작업을 사용 (숫자로 비교 반대로.)

    내 생각은 (라이브러리 저자 후 항상있는) 몇 가지 문자가 짧은 때문에이 있다는 것입니다. 또한 네이티브 코드로 컴파일 할 때 몇 머신 사이클을 취하는 것이 작업을 사용 (숫자로 비교 반대로.)

    나는 그것이 꽉 루프에 적합 할 수 있습니다 아마 잔인한하지만 또 다른 대답에 동의 (성능 향상 추정을 필요로하지만, 그렇지 않은 경우 조기 최적화 판명 수 있습니다.)


  12. 12.그것은 비트 연산이기 때문에 나는 그것이 modifiedPaths의 경로를 표시할지 여부를 확인하는 가장 빠른 (계산 싼) 방법, 가정합니다.

    그것은 비트 연산이기 때문에 나는 그것이 modifiedPaths의 경로를 표시할지 여부를 확인하는 가장 빠른 (계산 싼) 방법, 가정합니다.


  13. 13.로 (~ (-1)) === 0, 그래서 :

    로 (~ (-1)) === 0, 그래서 :

    !!(~(-1)) === Boolean(~(-1)) === Boolean(0) === false
    
  14. from https://stackoverflow.com/questions/9316612/how-does-not-not-tilde-bang-bang-tilde-alter-the-result-of-a-contains-inc by cc-by-sa and MIT license