我一直在关注source code for JQuery,并试图了解他们的情况:
$(document).ready()
功能有效。
在第407行,我发现了这一部分:
if ( !document.body ) {
哪个接缝是确定文件是否加载的关键。
我想知道的是什么:
为什么:
!document.body
返回False
?
,同时:
document.body
返回:[object HTMLBodyElement]
You can try it here只需删除第一个:.innerHTML
(经过一个小时的搜索和阅读后,我无法找到适当的答案,所以现在我希望这里有一些专业人士可以帮助我,谢谢!)
编辑:是的我知道!document.body
来自JavaScript而不是JQuery,最后JQuery是使用JavaScript代码构建的。
答案 0 :(得分:1)
你所问的与jQuery无关。它实际上是Javascript:
如果正文被加载,document.body总是返回true。所以!document.body意味着如果身体还没有加载,那么就采取一些行动。
根据文档(https://developer.mozilla.org/en-US/docs/Web/API/Document/body),该属性适用于大多数浏览器的早期版本
答案 1 :(得分:1)
我想我已经明白发生了什么以及我误解了什么 我最初只期望2种不同的状态(真/假),但事实上有4种不同的状态,如下表所示:
| Page loading state | document.body | !document.body |
|=======================|===========================|================|
| Before page is loaded | ? | !false -> true |
|-----------------------|---------------------------|----------------|
| After page is loaded | [object HTMLBodyElement] | !true -> false |
我的错误是我只是在加载" -row后查看"并在true
列中查看document.body
。
答案 2 :(得分:0)
基本上,因为类型转换。 !
运算符执行从对象到布尔“true”值的类型转换,然后将其否定为“false”值。
12.5.9逻辑NOT运算符(!)#
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(参数)#
抽象操作ToBoolean将参数转换为type的值 根据表10的布尔值:表10:ToBoolean Conversions
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.