文字列からブール値へのキャストを「!」で説明する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