JavaScript中!!!!(一つ、二つ、三つの感嘆符)の意味


参考記事:https://blog.csdn.net/buppt/article/details/77726809、lx_1024 js一つと二つの三つの感嘆符の違い
今日はReactを書く時に、一つのタイムコンポーネントの伝値が空のデータかどうかを判断する時に使います.判断に来ましたが、卵はなく、判断の役割を果たしていませんので、資源を探して勉強してみます.  jsの(感嘆符)どうやって使うのですか?意味がありますか?ついでに文章を書いて記録してみます.
js. 的に命中する ! の意味:jsの中で、!は、演算子の「非」を表します.変数がブール型でない場合は、変数をブール型に自動的に変換して非を取ります.( 二つの感嘆符)を使えば、変数をブール値に変換できます.(3つの感嘆符)はあまり意味がありません.感嘆符の効果と同じです.彼らは思っています.一つの変数をブーメラン型に変更し、もう一つ追加することを表します.bootlean型に対して反をとるということです.falseかtrue同様です
さて、どの値がブール値に変換されますか?そして!!!!!演算後の値はどうなりますか?
まずいくつかの関数を定義します.
    testObjISTrueOrFalse: function(obj) {
      this.trueOrFalse(obj)
      this.trueOrFalseOfOne(obj)
      this.trueOrFalseOfTwo(obj)
      this.trueOrFalseOfThree(obj)
    },
    trueOrFalse: function(obj) {
      if (obj) {
        console.log(obj + '_trueOrFalse', 'true')
      } else {
        console.log(obj + '_trueOrFalse', 'false')
      }
    },
    trueOrFalseOfOne: function(obj) {
      console.log(obj + '_trueOrFalseOfOne', !obj)
    },
    trueOrFalseOfTwo: function(obj) {
      console.log(obj + '_trueOrFalseOfTwo', !!obj)
    },
    trueOrFalseOfThree: function(obj) {
      console.log(obj + '_trueOrFalseOfThree', !!!obj)
    }
順番にテストします undefined、null、空の文字列、負0、正0、不確定値、論理値false、論理値true、文字列0、数字1、数字無限大、文字列true、文字列false、空の配列、空のオブジェクト、関数
var arr = [undefined, null, '', -0, 0, NaN, false, true, '0', 1,
Infinity, 'true','false', [], {}, function() {}]
for (var i = 0; i < arr.length; i++) {
    this.testObjISTrueOrFalse(arr[i])
}
テストの結果は以下の通りです.
undefined_trueOrFalse false
undefined_trueOrFalseOfOne true
undefined_trueOrFalseOfTwo false
undefined_trueOrFalseOfThree true
null_trueOrFalse false
null_trueOrFalseOfOne true
null_trueOrFalseOfTwo false
null_trueOrFalseOfThree true
_trueOrFalse false
_trueOrFalseOfOne true
_trueOrFalseOfTwo false
_trueOrFalseOfThree true
0_trueOrFalse false
0_trueOrFalseOfOne true
0_trueOrFalseOfTwo false
0_trueOrFalseOfThree true
0_trueOrFalse false
0_trueOrFalseOfOne true
0_trueOrFalseOfTwo false
0_trueOrFalseOfThree true
NaN_trueOrFalse false
NaN_trueOrFalseOfOne true
NaN_trueOrFalseOfTwo false
NaN_trueOrFalseOfThree true
false_trueOrFalse false
false_trueOrFalseOfOne true
false_trueOrFalseOfTwo false
false_trueOrFalseOfThree true
true_trueOrFalse true
true_trueOrFalseOfOne false
true_trueOrFalseOfTwo true
true_trueOrFalseOfThree false
0_trueOrFalse true
0_trueOrFalseOfOne false
0_trueOrFalseOfTwo true
0_trueOrFalseOfThree false
1_trueOrFalse true
1_trueOrFalseOfOne false
1_trueOrFalseOfTwo true
1_trueOrFalseOfThree false
Infinity_trueOrFalse true
Infinity_trueOrFalseOfOne false
Infinity_trueOrFalseOfTwo true
Infinity_trueOrFalseOfThree false
true_trueOrFalse true
true_trueOrFalseOfOne false
true_trueOrFalseOfTwo true
true_trueOrFalseOfThree false
false_trueOrFalse true
false_trueOrFalseOfOne false
false_trueOrFalseOfTwo true
false_trueOrFalseOfThree false
_trueOrFalse true
_trueOrFalseOfOne false
_trueOrFalseOfTwo true
_trueOrFalseOfThree false
[object Object]_trueOrFalse true
[object Object]_trueOrFalseOfOne false
[object Object]_trueOrFalseOfTwo true
[object Object]_trueOrFalseOfThree false
function () {}_trueOrFalse true
function () {}_trueOrFalseOfOne false
function () {}_trueOrFalseOfTwo true
function () {}_trueOrFalseOfThree false
前の7つの値がfalseであることが分かります. 後ろの9つの値は全部trueです.
undefinedとnullはfalseで、任意の配列、オブジェクト、関数(関数は特殊なオブジェクト)はいずれも本物になります.空の配列でも空のオブジェクトです.
空の文字列はfalseで、空ではない文字列はtrueです.
数値はプラスマイナス0で、不確定値はfalseで、その他はtrueで、無限大もtrueです.
文字列「0」 と値0 相互に変換することができますが、0は異なるブール値に変換され、0は「0」に変換され、0はtrueに変換されますが、0はfalseに変換され、Javascriptのタイプ変換は伝達性を持たないことが分かります.
より興味深い現象は、ブール値falseが文字列「false」に変換され、文字列「false」がブール値trueに変換され、テスト結果も分かるように、コードは備考の最初の記事の持ち主を参照してください.
document.write(new String(false));
document.write(new Boolean("false"));
結果: false  , true
条件式判定条件としてオブジェクトを使用するなら、使用する必要はありません.変換を行うとJavascriptは自動的に変換されます.