programing

누가 이 '이중 부정' 속임수를 설명할 수 있나요?

copyandpastes 2023. 1. 2. 23:16
반응형

누가 이 '이중 부정' 속임수를 설명할 수 있나요?

저는 Javascript의 전문가는 아니지만 Mark Pilgrim의 "Dive into HTML5" 웹 페이지를 읽고 있는데, 그가 제가 좀 더 이해하고 싶은 것을 언급했습니다.

그는 다음과 같이 말한다.

마지막으로 이중 음의 트릭을 사용하여 결과를 부울 값(참 또는 거짓)으로 강제 설정합니다.

function supports_canvas() {
  return !!document.createElement('canvas').getContext;
}

조금이라도 더 잘 설명해 주시면 감사하겠습니다!

논리 NOT 연산자!는 논리값과 반대되는 부울값으로 값을 변환합니다.

두 번째!는 이전 부울 결과를 원래 논리 값의 부울 표현으로 변환합니다.

Logical NOT 연산자에 대한 다음 문서로부터:

단일 오퍼랜드를 true로 변환할 수 있으면 false를 반환하고 그렇지 않으면 true를 반환합니다.

그래서 만약에getContext"허위" 값을 얻을 수 있습니다.!!부울 값을 반환합니다.false그렇지 않으면 다시 돌아옵니다.true.

false 값은 다음과 같습니다.

  • false
  • NaN
  • undefined
  • null
  • ""(빈 문자열)
  • 0

Javascript에는 부울이 예상되는 컨텍스트에 배치되었을 때 "참"과 "거짓"으로 간주되는 것에 대한 혼란스러운 규칙 집합이 있습니다.하지만 논리적인 연산자는!는 항상 적절한 부울값(상수 중 하나)을 생성합니다.true그리고.false그 중 두 개를 쇠사슬로 묶음으로써 사자성어는!!expression는, 원래의 식과 같은 진실성을 가지는 적절한 부울을 생성합니다.

왜 귀찮게 해?왜냐하면 당신이 보여주는 것과 같은 기능을 더 쉽게 예측할 수 있게 해주기 때문입니다.만약 거기에 이중 음성이 없다면, 다시 돌아올지도 몰라undefined,aFunction사물, 또는 완전히 다르지 않은 것Function물건.이 함수의 호출자가 반환값에 대해 이상한 행동을 하면 코드 전체가 잘못될 수 있습니다(여기서 "이상한"은 "부울 컨텍스트를 강제하는 작업 이외의 모든 작업"을 의미합니다).이중부정어법이 이를 막는다.

javascript에서 "bang" 연산자(!)를 사용하면 지정된 값이 true이면 true, 1, null 등이 반환됩니다.값이 정의되지 않은 경우 null, 0 또는 빈 문자열이 false를 반환합니다.

따라서 bang 연산자는 항상 부울 값을 반환하지만 처음에 입력한 값과 반대되는 값을 나타냅니다.그 조작의 결과를 다시 「Bang」하면, 다시 되돌릴 수 있습니다만, 부울(정의되어 있지 않은, 늘 등)이 됩니다.

값, null plain bang으로 수 .false, "참" 1, "참"이라고 true.

코드는 다음과 같이 작성되었을 수 있습니다.

var context = document.createElement('canvas').getContext;
var contextDoesNotExist = !context;
var contextExists = !contextDoesNotExist;
return contextExists;

!!변수를 사용하면 타입캐스트에서 부울을 보증할 수 있습니다.

간단한 예를 들어 보겠습니다.

"" == false (is true)
"" === false (is false)

!!"" == false (is true)
!!"" === false (is true)

그러나 다음과 같은 작업을 수행하는 경우 사용하는 것은 의미가 없습니다.

var a = ""; // or a = null; or a = undefined ...
if(!!a){
...

if는 부울에 캐스트하기 때문에 암묵적인 이중 네거티브캐스트를 할 필요가 없습니다.

!에 "무엇"/"무엇"을 주조하다boolean.

!! 이 하게 현재합니다).

번째 ★★★★★★★★★★★★★★.!는 변수를 부울 타입으로 강제하여 반전시킵니다. 번째 두 the the!는 이 값을 다시 반전시킵니다(체크 중인 항목에 대한 원래(올바른) 부울 값을 제공합니다).

알기 쉽게 하기 위해서는

return Boolean(....);

document.createElement('canvas').getContext 쪽인가로 할 수 .undefined츠요시 !undefined 율율true,![some_object] 율율false이게 우리가 필요한 거의 전부야, 그냥 뒤집힌 거지. ★★★★★★★★★★★★★★★★★.!!undefined로로 합니다.false 는 " " "true.

자바스크립트 document.createElement('canvas').getContext는 함수 객체입니다.의 「」를 으로써,!부울식으로 평가하여 답변을 플립합니다.!서는,, 회회회됩됩됩됩결과적으로 함수는 그것을 부울식으로 평가하지만 함수 객체 자체가 아닌 실제 부울 결과를 반환합니다. ''!!는 표현식을 부울타입으로 타입캐스트하는 빠르고 더러운 방법입니다.

ifdocument.createElement('canvas').getContext 그래undefined ★★★★★★★★★★★★★★★★★」nulltrue 않으면 다시 false.

언급URL : https://stackoverflow.com/questions/4686583/can-someone-explain-this-double-negative-trick

반응형