2017-04-17 6 views
0

私はsource code for JQueryを見ていて、それらがどうなっているのか理解しようとしました。 $(document).ready()
機能が動作しています。!なぜdocument.bodyがFalseを返しますか?

と行407で、私はこの部分を見つけた:文書がロードされているかどうかを決定するための鍵であることを縫い目
if (!document.body) {
。私は不思議何

は次のとおりです。
なぜ:
!document.body
リターンFalse

中:
document.body
リターン:[object HTMLBodyElement]
You can try it hereちょうど最初のを削除します。.innerHTML

(私は&読書の探索時間後にGoogleとの適切な答えを見つけることができませんでしたので、今、私は願っていますここにいくつかの専門家がありがとう!)

編集:はい私は!document.bodyがJQueryの代わりにJavaScriptから来ていることを知っています。 JavaScriptコードで構築されています。

+0

ブラウザ互換性理由iirc。 oldIEからの遺物 –

+0

各ブラウザは異なっています。 –

+0

なぜコメントにヒントはありませんか?また、https://developer.mozilla.org/en-US/docs/Web/API/Document/body#Browser_compatibility –

答えて

0

の答えをありがとう!
私は何が起こったのか、私が誤解したことを理解していると思います。
私はもともとのみ2つの異なる状態(真/偽)を期待が、この表に示すように、実際には4つの異なる状態が、あります

| Page loading state |  document.body  | !document.body | 
|=======================|===========================|================| 
| Before page is loaded |   ?    | !false -> true | 
|-----------------------|---------------------------|----------------| 
| After page is loaded | [object HTMLBodyElement] | !true -> false | 

私のエラーは、私が唯一の「ロードされた後に」を見てということでした - document.body欄にtrueと表示されています。

1

あなたが求めていることは、jQueryとは関係ありません。実際にはJavascriptです:

body.bodyは、本文がロードされていると常にtrueを返します。だから!document.bodyはボディがまだロードされていない場合には何らかのアクションをとることを意味します。

ドキュメント(https://developer.mozilla.org/en-US/docs/Web/API/Document/body)によると、プロパティはブラウザ

enter image description hereのほとんどの以前のバージョンで動作します。

+0

私はW3Schoolsのウェブサイトで' document.body'を試してみると、私は 'False' /' True'という答えを得られません。 'False' /' [object HTMLBodyElement] 'という答えを得ます。 –

0

本質的に、タイプ変換のためです。 !演算子は、オブジェクトからブール値 "真"値への型変換を行い、それを "偽"値にネゲートします。 (!)

12.5.9論理否定演算子#

Let expr be the result of evaluating UnaryExpression. 
Let oldValue be ToBoolean(? GetValue(expr)). 
If oldValue is true, return false. 
Return true. 

7.1.2 ToBoolean(引数)#:ECMA-262 Ecmascript specから正式

ab stract操作ToBooleanは、表10によるタイプ ブールの値に引数を変換します。表10:ToBoolean変換

Argument Type  Result 
Undefined  Return false. 
Null   Return false. 
Boolean  Return argument. 
Number  Return false if argument is +0, -0, or NaN; otherwise return true. 
String  Return false if argument is the empty String (its length is zero); 
         otherwise return true. 
Symbol  Return true. 
Object  Return true. 
関連する問題