これは、javascript に含まれ!
ているものと含まれていないものの関数としての関数ではありません。true
キャスト (変数を特定の型に強制すること) に精通している場合は、次のことがかなり明確になるはずです。
!
ブール値でのみ動作します。したがって、ブール値ではない変数に適用すると、適用する前にまずブール値に強制されます!
。これをあなたの例に関連付けるには:
Boolean(undefined) == false
undefined は、javascript の null のようなものです (いくつかの違いがありますが、それは別のトピックです)。ブール値が であることは理にかなっているはずですfalse
。undefined
値が存在しないだけでなく、使用しようとしている変数が存在しないことを宣言します。
Boolean(function(){}) == true
関数は JavaScript のオブジェクトです。空の場合でも、関数オブジェクトに共通の基本的なプロパティがいくつかあるため、そのブール値はtrue
です。それは何もないので、それは何かです。
Boolean({}) == true
空の関数と同様に、{}
空のオブジェクトを定義します。ただし、javascript のオブジェクトに共通のプロパティがまだいくつかあります。カスタム プロパティはありません。
Boolean(null) == false
について述べたようにundefined
、null
は似ていますが、まったく同じではありません。値がないことを示します。
Boolean(()) // error
()
それ自体では特に意味はありません。構文を正しくするためにそれらの間に何かが必要なので、これはあなたの偽/真の質問には関係ありません。()
単独では、単なる構文エラーです。
Boolean("false") == true
"false"
は文字列です。文字 f、a、l、s、e が含まれているからといって、ブール値と同じにはなりませんfalse
。空でない文字列は何かであるため、 Boolean に強制されtrue
ます。文字列は、空の文字列が""
強制的に変換されるが、前述のようにfalse
空のオブジェクトが強制的に変換されるという点で、一種の特別なオブジェクトであることに注意してください。{}
true
ブール値 (false) == false
これは明確なはずです。 false
はすでにブール値であるため、キャストしても値は変わりません。まだfalse
です。
!
そこから、各ケースに適用すると、どのように結果が得られるかがわかります。
さらに読むために、これはjavascriptの型強制に関するかなり良い記事です
アップデート:
あなたのString
質問に関して。String
オブジェクトと文字列リテラル (引用符で囲まれたもの) には違いがあります。文字列リテラルからオブジェクトを作成できますString
が、リテラルは自動的にオブジェクトにはなりません。同じことがJavaScriptの数字にも当てはまります。JS にはNumber
オブジェクトがありますが、数値リテラルを定義することがよくあります。の動作は、Number
で見たものと一致していますString
。
alert( new Number() == 0); //true
alert(!0); //true
alert(! new Number()); //false
ただし、コメントで鋭く言及したように:
alert( new String() === ""); //false
タイプが同じではないため。オブジェクト対リテラル。
一般に、Boolean(some_object)
常に評価されtrue
ますが、正確な値によってはBoolean(some_literal)
false と評価される場合があります。
補遺
今週初めに足を撃ったという理由だけで、これは追加するのに役立つ情報になると思いました. ほとんどの言語では、空の配列 は[]
強制的に に変換されfalse
ます。ただし、Javascript では配列はオブジェクトであるため、空の配列であってもtrue
. 気をつけたい一台。js とさまざまなサーバー側言語を切り替えるときif(!maybe_empty_array){...}
、maybe_empty_array
常にtrue
. 代わりに、 を実行する必要がありますif(maybe_empty_array.length){...}
。配列が空の場合、その長さは 0 であり、安全にfalse
.