[javascript] JavaScript에서“!-”는 무엇을합니까?

이 코드 조각이 있습니다 ( 이 질문 에서 가져 왔습니다 ).

var walk = function(dir, done) {
    var results = [];

    fs.readdir(dir, function(err, list) {
        if (err)
            return done(err);

        var pending = list.length;

        if (!pending) 
            return done(null, results);

        list.forEach(function(file) {
            file = path.resolve(dir, file);
            fs.stat(file, function(err, stat) {
                if (stat && stat.isDirectory()) {
                    walk(file, function(err, res) {
                        results = results.concat(res);

                        if (!--pending)
                            done(null, results);
                    });
                } else {
                    results.push(file);

                    if (!--pending) 
                        done(null, results);
                }
            });
        });
    });
};

나는 그것을 따르려고 노력하고 있으며, 나는 그것이 끝나는 끝을 제외하고는 모든 것을 이해한다고 생각합니다 !--pending. 이러한 맥락에서 그 명령은 무엇을 하는가?

편집 : 추가 의견을 보내 주셔서 감사하지만 질문에 여러 번 대답했습니다. 어쨌든 고마워!



답변

! 값을 반전시키고 반대의 부울 값을 제공합니다.

!true == false
!false == true
!1 == false
!0 == true

--[value] 숫자에서 1을 빼고 작업 할 수를 반환합니다.

var a = 1, b = 2;
--a == 0
--b == 1

따라서 !--pending보류 중 하나를 뺀 다음 진실 / 거짓 값의 반대 값을 반환합니다 (여부에 관계없이 0).

pending = 2; !--pending == false
pending = 1; !--pending == true
pending = 0; !--pending == false

네, ProTip을 따르십시오. 이것은 다른 프로그래밍 언어의 일반적인 관용어 일 수 있지만 대부분의 선언적 JavaScript 프로그래밍의 경우 꽤 외계인처럼 보입니다.


답변

그것은 특별한 연산자가 아니며, 두 개의 표준 연산자입니다.

  1. 접두사 감소 ( --)
  2. 논리적이지 않은 ( !)

이로 인해 pending감소한 다음 0인지 확인하기 위해 테스트됩니다.


답변

답변의 숫자는 설명 어떤 이 명령하지,하지만 그것을 여기에서 그런 식으로 이루어집니다.

나는 C 세계에서 왔으며, 실제로 생각하지 않고 !--pending“카운트 다운 pending하고 0인지 확인 “으로 읽 습니다. 비슷한 언어의 프로그래머가 알아야 할 관용구입니다.

이 함수는 readdir파일과 서브 디렉토리 목록을 가져 오는 데 사용 하며,이를 총칭하여 “항목”이라고합니다.

변수 pending는 처리 될 남아있는 수를 추적합니다. 목록의 길이로 시작하여 각 항목이 처리 될 때 0을 향해 아래로 계산됩니다.

이러한 항목은 순서가 잘못 처리 될 수 있으므로 단순한 루프를 사용하는 대신 카운트 다운해야합니다. 때 모든 항목이 처리 된 콜백 done이 사실상 원래 호출자에게 통지하기 위해 호출된다.

첫 번째 호출에서 done앞에 접두사가 붙습니다 return. 값을 반환하려는 것이 아니라 단순히 그 시점에서 함수 실행을 중지시키기 위해서입니다. 를 삭제 return하고에 대안을 넣는 것이 더 깨끗한 코드 일 것 else입니다.


답변

속기입니다.

! 아니다”.

-- 값을 줄입니다.

따라서 !--값 감소 결과를 무효화하여 얻은 값이 false인지 확인합니다.

이 시도:

var x = 2;
console.log(!--x);
console.log(!--x);

x의 값이 1이므로 두 번째는 true입니다. x의 값은 0이므로 첫 번째는 false입니다.

참고 사항 :
!x--x가 먼저 false인지 확인한 다음 감소시킵니다.


답변

!JavaScript NOT 연산자입니다

--사전 감소 연산자입니다. 그래서,

x = 1;
if (!x) // false
if (!--x) // becomes 0 and then uses the NOT operator,
          // which makes the condition to be true


답변

if(!--pending)

방법

if(0 == --pending)

방법

pending = pending - 1;
if(0 == pending)


답변

적절한 운영자가 아닌 사전 운영자입니다.

따라서 pending값이 1 인 정수인 경우

val = 1;
--val; // val is 0 here
!val // evaluates to true