2

私は誰かのバックボーンアプリのソースコードを読んでいて、このトグル機能を理解しようとしています。トグルの基本は、設定を切り替えるだけだと理解しています。以下の例では、モデルにお気に入りを設定します(お気に入りかどうかを示します)。!私は(ではないという意味で)の使用も理解しています。ただし、この関数がどのように機能するかについてのロジックはわかりません。

 toggle: function() {
      this.save({favorite: !this.get("favorite")});
    },

特に、私は取得しません

!this.get("favorite")

this.get("favorite")文字列、つまり「お気に入り」を返していませんか?または、this.get( "favorite")はブール値である属性を返しますか?

誰かがこの関数のロジックが呼び出されるたびにどのように機能するかをわかりやすい英語で説明して、2つの状態を切り替えてもらえますか?

4

3 に答える 3

6

!否定です。

関数はおそらくブール値を返し、その結果は反転されます。

したがって、この場合favorite、trueとfalseが切り替わります

于 2012-04-15T18:20:14.593 に答える
4

JavaScript!演算子は、ブール結果を否定します。

!true == false
!false == true

読む !「ではない」として。

したがって、投稿されたコードスニペットはfavorite、現在設定されているものとは逆に設定されます。

于 2012-04-15T18:21:16.427 に答える
0

文字列からブール値へのキャストを「!」で説明するJavascriptコード と '!!'

<script type="text/javascript">

var myobject = {
    getmystring : function(){
      return "enceladus";
    },
    getmyboolean : function(key){
      return true;
    },
    toggle: function() {
          document.write(this.getmystring());  //enceladus
          document.write(!this.getmystring()); //false
          document.write(!!this.getmystring()); //true
          document.write(this.getmyboolean()); //true
          document.write(!this.getmyboolean()); //false
          document.write(!!this.getmyboolean()); //true
    }
}
myobject.toggle();
</script>

あなたの混乱の原因となる概念は「javascript強制」です。!!文字列をブール値に強制します。キーワード「this」はオブジェクトmyobjectを参照します。this.getmystring( "favorite")は文字列を返します。!this.getmystring( "favorite")は、文字列'enceladus'をブール値に強制します。入力された文字列はtrueになるため、その逆はfalseになります。ダブルバンはそれを2回反転させ、元の状態に戻します。

Javascriptは、「型強制」のために首を絞めるのに十分なロープを提供します。1.4E10のようなものを10進数の1.4に変換する熱心なjavascriptインタープリターのために、バグが常に発生します。何でも何にでも変換でき、javascriptはこの直感に反する型の強制に対して批判されてきました。この短いビデオを見てください。彼は、JavaScript型の強制のすべての狂気を1/3の方法で調べています:https ://www.destroyallsoftware.com/talks/wat

于 2012-04-15T19:00:34.643 に答える