식 앞에 칠데는 무엇을 합니까?
var attr = ~'input,textarea'.indexOf( target.tagName.toLowerCase() )
? 'value'
: 'innerHTML'
대답에서 봤지만 본 적이 없어요
그것은 무엇을 뜻하나요?
~
는 오퍼랜드의 모든 비트를 플립하는 비트 연산자입니다.
를 들어,가 「」인 는, 「」입니다.1
IEEE 754 플로트의 바이너리 표현(JavaScript가 숫자를 처리하는 방법)은 다음과 같습니다.
0011 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
★★★★★★★★★★★★★★★★★.~
자바스크립트 32개
0000 0000 0000 0000 0000 0000 0000 0001
음수이면 2의 보수로 저장됩니다: 모든 비트를 반전하고 1을 더합니다.
...그리고 모든 조각들을 뒤집는다...
1111 1111 1111 1111 1111 1111 1111 1110
그럼 그게 무슨 소용이죠?언제 쓸 수 있을까?
그것은 꽤 많은 용도가 있다.낮은 수준의 글을 쓸 때는 편리합니다.응용 프로그램을 프로파일하고 병목 현상을 발견하면 비트 단위의 트릭(더 큰 가방에서 가능한 도구 중 하나)을 사용하여 성능을 향상시킬 수 있습니다.
또, (일반적으로) 애매한 트릭이기도 합니다.indexOf()
는 반환값을 truthy(위조로 발견되지 않음)로 검출하여 32비트로 숫자를 잘라내는 부작용(및 소수점 이하를 2배로 하는 것)으로 자주 사용합니다.Math.floor()
( 일일 ( ( )
나는 그것이 무엇에 사용되는지 즉시 명백하지 않기 때문에 불분명하다고 말한다.일반적으로 코드를 읽는 다른 사람에게 명확하게 전달하기를 원합니다.사용 중~
멋있어 보일 수도 있고, 보통 너무 영리해서 그 자체로 좋을 수도 있어요.:)
또한 JavaScript에 및 이 탑재되어 있기 때문에 관련성도 낮아집니다.이 값은 부울 값을 반환합니다.타깃 플랫폼이 지원하는 경우 문자열 또는 배열에 값이 있는지 테스트하기 위해 이 옵션을 사용하는 것이 좋습니다.
「 」의 에 indexOf()
식을 사용하면 직접 반환되는 숫자 인덱스 대신 진부한/경쾌한 결과를 얻을 수 있습니다.
이 "Dreturn"인 -1
, , , 「 」~-1
0
-1
1번으로 하다0보다 크거나 같은 값은 0이 아닌 결과가 됩니다.thus따는
if (~someString.indexOf(something)) {
}
야기하다if
"something이 " ""에때 실행하는 코드입니다.「 」를 ,.indexOf()
부울값으로 직접 지정하면 0이 반환되는 경우가 있기 때문에 작동하지 않습니다('something'이 문자열의 선두에 있을 때).
물론 이 방법도 유효합니다.
if (someString.indexOf(something) >= 0) {
}
훨씬 덜 신비롭죠
다음과 같은 경우도 있습니다.
var i = ~~something;
「 」의 ~
연산자를 두 번 사용하면 문자열을 32비트 정수로 빠르게 변환할 수 있습니다. 번째 ★★★★★★★★★★★★★★.~
이 이루어지며, 두 는 ""로 변환됩니다.~
비트를 플립백합니다.수 하면, 은 이 연산자를 받을 수 있습니다.NaN
결과적으로.(편집 - 실제로는 두 번째입니다).~
먼저 적용되지만 이해하실 수 있습니다.)
~
Bitwise NOT 연산자,~x
비슷비슷하다-(x+1)
그게 좀 더 이해하기 쉽죠. ★★★★★★★★★★★★★★★★:
~2; // -(2+1) ==> -3
-(x+1)
-1
하고, 「」를 할 수 .0
말하면, 「 」입니다.~
와 함께 '가짜'가 됩니다).false
부에서0
value 만 값 의) 값만 값-1
입력 값, 다른 트러스트 값을 입력합니다.입력값(그렇지 않은 경우)을 지정합니다.
우리가 알고 있는 대로-1
는 일반적으로 Sentinel 값이라고 불립니다.반환되는 많은 함수에 사용됩니다.>= 0
성공을 위한 가치관과-1
C언어 실패에 대한 설명입니다.JavaScript에서 반환값과 동일한 규칙입니다.
이러한 방법으로 다른 문자열의 서브스트링 유무를 확인하는 것이 일반적입니다.
var a = "Hello Baby";
if (a.indexOf("Ba") >= 0) {
// found it
}
if (a.indexOf("Ba") != -1) {
// found it
}
if (a.indexOf("aB") < 0) {
// not found
}
if (a.indexOf( "aB" ) == -1) {
// not found
}
이렇게 게 더 것 요.~
와 같이
var a = "Hello Baby";
~a.indexOf("Ba"); // -7 -> truthy
if (~a.indexOf("Ba")) { // true
// found it
}
~a.indexOf("aB"); // 0 -> falsy
!~a.indexOf("aB"); // true
if (!~a.indexOf( "aB" )) { // true
// not found
}
You Don't Know JS: 유형 & 문법 by Kyle Simpson
~indexOf(item)
자주 등장하고, 여기서의 답변은 훌륭합니다만, 아마 어떤 사람들은 그것을 어떻게 사용하는지 알고 이론을 "수정"할 필요가 있을 것입니다.
if (~list.indexOf(item)) {
// item in list
} else {
// item *not* in list
}
tilde 트릭을 사용하여 truthy 값을 생성하는 것을 고려하는 사용자용indexOf
그 결과, 위에서 메서드를 대신 사용하는 것이 보다 명확하고 마법이 적습니다.
'hello world'.includes('hello') //=> true
'hello world'.includes('kittens') //=> false
ES 2015의 새로운 표준 방식이기 때문에 구형 브라우저에서는 작동하지 않습니다.이것이 중요한 경우 String.protype.includes polyfill 사용을 고려해 주십시오.
이 기능은 동일한 구문을 사용하는 어레이에서도 사용할 수 있습니다.
['apples', 'oranges', 'cherries'].includes('apples') //=> true
['apples', 'oranges', 'cherries'].includes('unicorns') //=> false
오래된 브라우저 지원이 필요한 경우 Array.protype.에는 polyfill이 포함되어 있습니다.
1의 보완 연산자(~)는 단항 연산자로 0을 1로, 1을 0으로 변환합니다.
a = 10 = 1010 (Binary)
~a = ~1010
= -(1010 + 1)
= -(1011)
= -11 (Decimal)
Binary number 1’s complement
000 111
001 110
010 101
1의 덧셈의 주된 용도는 부호 있는 이진수를 나타내는 것입니다.이 외에도 덧셈, 뺄셈 등 다양한 산술 연산을 할 때도 사용된다.
부호 있는 이진수 표현에서는 양수와 음수를 모두 표현할 수 있습니다.
언급URL : https://stackoverflow.com/questions/12299665/what-does-a-tilde-do-when-it-precedes-an-expression
'IT' 카테고리의 다른 글
Mariadb 스레드에 '다음 명령에 대해 재설정' 상태가 고착됨 (0) | 2023.01.12 |
---|---|
목록의 파일을 재귀 하위 폴더 검색 및 반환하려면 어떻게 해야 합니까? (0) | 2023.01.12 |
판다 데이터 프레임에서 인덱스를 재설정하려면 어떻게 해야 합니까? (0) | 2023.01.12 |
Twig 템플릿에서 DateTime 개체를 렌더링하는 방법 (0) | 2023.01.12 |
Y는 2012를 반환하고 y는 SimpleDateFormat 2011을 반환한다. (0) | 2023.01.12 |