具有分离功能的truthy和falsy声明

时间:2014-01-13 04:00:13

标签: jquery

demo

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布尔值,那么它就不会假设与上面完全相同。

所以,这不仅仅是关于真实和虚假的陈述,而是超过这个。

如果有人能给我一个明确的概念,我会很高兴。

2 个答案:

答案 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中,UNDEFINED0被视为false。在您的情况下,P的值最初为null,因此控制流指向else语句。在完成else语句后,P的值将为Jquery object,因此下次if条件变为true时,它将进入if内{{1}} 1}}陈述。反之亦然。