HTML ...
<p>Hello</p>
how are
<p>you?</p>
<button>Attach/detach paragraphs</button>
... jquery的
var p;
$("button").click(function(){
if ( p ) {
p.appendTo("body");
p = null;
} else {
p = $("p").detach();//paragraph is removed so p returns null but how is it truthy?
}
});
我无法理解真实和虚假陈述是如何在这里起作用的。
另外,如果我向p if( p=1){
添加true布尔值,那么它就不会假设与上面完全相同。
所以,这不仅仅是关于真实和虚假的陈述,而是超过这个。
如果有人能给我一个明确的概念,我会很高兴。
答案 0 :(得分:2)
请仔细阅读以下图表:
first click second click third click
var p; //falsy--------------- | |
$("button").click(function(){ | | V |
if ( p ) { //if truthy | ----| < ------|----p is appended |
p.appendTo("body"); | | | |
p = null; //return falsy | V |--// p returns falsy-- V
} else { //if falsy ---|--- run this | <------|-------run this
p = $("p").detach(); -----OK detached // p returns truthy
} |---- returns truthy or falsy
not because of $(p) has text or not
but because of p has function or null
对于你的第二个问题,当你添加p=1
时,它变成了布尔值但是在else语句中它返回的函数不是布尔意味着你只是将p
放在if条件中然后只有{{1如果条件好像它的变量首先被声明为空而且之后条件变量p
被定义并返回真实,那么将变得真实并且返回。 所以关于真实和虚假陈述。
您还想知道p
如何附加文本,但如果您阅读detach上的文档,那么您将知道通过使用分离功能,它能够再次添加文本。因此,p在else条件下返回p.appendTo("body");
,因此现在它在if条件下返回$("p").detach();
,这就是为什么再次显示文本的原因。
答案 1 :(得分:1)
在javascript NULL
中,UNDEFINED
,0
被视为false
。在您的情况下,P
的值最初为null
,因此控制流指向else
语句。在完成else语句后,P
的值将为Jquery object
,因此下次if
条件变为true
时,它将进入if
内{{1}} 1}}陈述。反之亦然。