!!~ (tilde/bang bang tilde가 아님) 'contains/included' Array 메서드 호출의 결과를 어떻게 변경합니까?
jQuery 에서 .inArray여기에 흥미로운 선언문이 있습니다.
!!~jQuery.inArray(elm, arr)
, 는 를 으로 이라고 가 이라고 으로 는 를 가 boolean이 , 를 의 true수 입니다. 가 은 이 를 인가 입니다 하는 할 입니다 인가 하는 를 (~오퍼레이터가 이 모든 것에?
var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }
의 (의 리팩토링if문:
if (!!~jQuery.inArray("one", arr)) { alert("Found"); }
내역:
jQuery.inArray("one", arr) // 0
~jQuery.inArray("one", arr) // -1 (why?)
!~jQuery.inArray("one", arr) // false
!!~jQuery.inArray("one", arr) // true
저는 또한 타일을 앞에 놓으면 결과적으로-2.
~!!~jQuery.inArray("one", arr) // -2
저는 이곳의 틸트의 목적을 이해할 수 없습니다.누가 설명을 해주시거나 자료를 알려주실 수 있습니까?
이 가끔 될 가 있습니다~한 앞에 $.inArray.
기본적으로.
~$.inArray("foo", bar)
하는게 더 짧은 방법입니다.
$.inArray("foo", bar) !== -1
$.inArray첫 번째 인수가 발견되면 배열에 있는 항목의 인덱스를 반환하고, 발견되지 않으면 -1을 반환합니다.이는 "이것이 배열에 있는 값입니까?"의 부울을 찾는다면 -1이 참값이므로 부울 비교를 할 수 없으며 $.inArray가 0(거짓 값)을 반환하면 배열의 첫 번째 요소에서 실제로 발견됨을 의미합니다.
하기 적용하기~트자인즈인자를 발생시킵니다.-1가 되다0 0 '-1'이 되게 .따라서 배열에서 값을 찾지 못하고 bitwise NOT를 적용하면 위변조 값 (0)이 발생하고, 다른 값들은 모두 0이 아닌 숫자를 반환하며, 참된 결과를 나타냅니다.
if (~$.inArray("foo", ["foo",2,3])) {
// Will run
}
그리고 의도대로 될 겁니다.
!!~expr 평가합니다.falseexpr이다 ㅇ-1그렇지 않으면true.
.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의 비트가됩니다. 값이 됩니다.의가 0됩니다 를 적용합니다. 반전하면 truth 값이 생성됩니다. 적용됩니다.! 값은 true를 합니다. truth에두번가울를 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
*!!~8589934591를 거짓으로 평가하므로 이 혐오를 테스트하는 데 확실하게 사용할 수 없습니다.-1.
tild 연산자는 실제로 jQuery의 일부가 아닙니다. 자바스크립트 자체에서는 약간 현명한 연산자가 아닙니다.
당신이 실험에서 이상한 숫자를 얻게 된 것은 정수에 대해 약간의 논리적 연산을 수행하기 때문입니다. (내가 아는 한, 두 개의 보어 같은 것으로 저장될 수도 있습니다.)
2의 보어는 숫자를 이진법으로 표현하는 방법을 설명합니다.제가 옳았던 것 같아요.
~foo.indexOf(bar)는인다다을 나타내는 .foo.contains(bar)그 이유는contains함수가 존재하지 않습니다.
일반적으로 자바스크립트의 "falsey" 값 개념 때문에 cast to boolean은 불필요합니다.은 Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ,true아니면false.
jQuery.inArray()다-1found"의("not found"우그,어의 ()~)는 )입니다0.따라서,~jQuery.inArray()값을 ey을합니다()0를 "찾을 수 없음"으로 지정하고 "찾을 수 있음"을 나타내는 진리값(음의 정수).!! boolean위을면제 /로다할l할eln로/en을l위false/true.그렇게,!!~jQuery.inArray()줄을 줄 true" 및 "found"에 대한false"Not found"(찾지 않음)의 경우.
~4바이트 모두에 대해int 공식과 같음과음이음과s-(N+1)
그렇게
~0 = -(0+1) // -1
~35 = -(35+1) // -36
~-35 = -(-35+1) //34
Tilde는 비트 단위가 아닙니다. 값의 각 비트를 반전시킵니다.으로 ①을 ~숫자에서 기호가 반전되고, 그 다음에 1이 차감됩니다.
그래서 당신이 할 때~0을 반전하면 -1π π(0π π -0, π 1π -1)를.
이것은 본질적으로 항상 부울(Boolean)인 값을 얻기 위한 정교한 초미세 최적화 방식입니다.
~연산자는 비트 와이즈 상보 연산자입니다.수의 정수 결과는inArray()는 원소를 찾을 수 없을 때 -1이거나 음이 아닌 정수입니다.0.-1수의로시트위로)다는시0든e로트(수1o위로tetfet1-(d .음이 아닌 정수의 비트 단위 상보는 항상 0이 아닙니다.
따라서,!!~i될 것이다true이 아닌 "i"이닌일때고가,때고rn일이false"i"히 -1때일 때
:~는 항상 피연산자를 정수로 강제합니다. 즉, 정수가 아닌 부동 소수점 값을 정수로 강제합니다.
맞아요. 이 는 이코드는반환됩니다반환됩니다를 반환합니다.false그 때에indexOf반환하며, 않으면은 -1을 반환합니다. 그렇지 않으면true.
당신의 말대로, 다음과 같은 것을 사용하는 것이 훨씬 더 현명할 것입니다.
return this.modifiedPaths.indexOf(path) !== -1;
~연산자는 비트와이즈 NOT 연산자입니다.이것이 의미하는 것은 그것이 이진 형태의 숫자를 취하고 모든 0을 1로 그리고 1을 0으로 바꾼다는 것입니다.
를 들어,은 를 에서 0 0000000은 , -1 인 11111111은. 로 1은00000001는 2π -2π입니다.11111110.
제 추측으로는 그것이 몇 글자 더 짧기 때문인 것 같습니다(도서관 저자들이 항상 추구하는).또한 네이티브 코드로 컴파일할 때 몇 개의 기계 사이클만 걸리는 연산을 사용합니다(숫자와 비교하는 것과는 반대로).
오버킬이라는 또 다른 답변에 동의하지만, 결과적으로 엄격한 루프에서 이해가 될 수도 있습니다(성능 향상 추정이 필요하지만 그렇지 않을 경우 조기 최적화로 판명될 수도 있습니다).
나는 그것이 약간 현명한 연산이기 때문에 경로가 수정된 경로에 나타나는지를 확인하는 가장 빠른 (계산적으로 저렴한) 방법이라고 생각합니다.
~하듯이(~(-1)) === 0, 그래서:
!!(~(-1)) === Boolean(~(-1)) === Boolean(0) === false
언급URL : https://stackoverflow.com/questions/9316612/how-does-not-not-tilde-bang-bang-tilde-alter-the-result-of-a-contains-inc
'programing' 카테고리의 다른 글
| 비주얼 스튜디오 내 파워셸 (0) | 2023.09.11 |
|---|---|
| DIV 랩 안하는 법? (0) | 2023.09.11 |
| Android Word-Wrap 편집 텍스트 텍스트 (0) | 2023.09.11 |
| Changed behaviour of java.sql.Date after OJBC client upgrade (0) | 2023.09.11 |
| IE 문자열에 숫자를 지정할 수 있습니다. (0) | 2023.09.11 |