1. ホーム
  2. javascript

[解決済み] JavaScriptで「!--」は何をするのですか?

2022-03-14 14:42:05

質問

次のようなコードがあります。 この質問 ):

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 は、保留中のものから1を引き、その真偽値の反対を返します(それが 0 ).

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

そして、そう、ProTipに従いましょう。 これは他のプログラミング言語ではよくあるイディオムかもしれませんが、ほとんどの宣言型JavaScriptプログラミングでは、これはかなり異質なものに見えます。