2014-01-13 58 views
0

demotruthy和falsy声明与分离功能

HTML ...

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? 
    } 
}); 

我不明白是怎么truthy和falsy报表工作这里。

此外,如果我添加true布尔值到p if(p=1){那么它不会假设运行完全相同。

因此,这不仅仅是关于真理和虚假陈述,而是比这更多。

如果有人能给我清晰的概念,我会很高兴。

+2

不清楚你在问什么 –

+0

@ArunPJohny我的意思是在其他语句段被删除,所以p应该是虚假的,但它会返回truthy,所以我想知道这是如何工作的。 –

+0

@NavinRauniyar段落被删除并分配回变量'p',你注意到了吗? –

回答

2

试图了解仔细,如下图:如果你只是把p

       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将变得真实并返回,如果条件,如果它的变量首先被宣布为无,并在其他条件变量p被定义并返回truthy。 所以这一切都是关于真理和错误的陈述。通过使用分开函数

你也想知道如何p.appendTo("body");正在添加文本,但如果你读detach的文档,然后你就会知道它是能够再次添加文本。所以,p在else条件下返回$("p").detach();,因此现在它在if条件中返回$("p").detach().appendTo("body");,这就是为什么要再次显示文本。

+0

我甚至不知道答案是否正确,upvote(+1)仅仅用于在问题被问到的20分钟内创建一个ASCII图...荣誉找到先生或女士。 – erikrunia

+0

@erikrunia此后我也将绘制花哨的图表。 :) –

+0

对不起Raj,我也赞成你,所以我的投票不会对一个或另一个人造成不公平的影响......他的ASCII只是让我微笑 – erikrunia

1

In javascript NULLUNDEFINED0正在考虑为false。在你的情况下,最初P的值将是null,所以控制流指向else声明。并且在完成else语句之后,P的值将是一些Jquery object,因此下一次if条件变为true时,它将进入该if语句的内部。反之亦然。