zoukankan      html  css  js  c++  java
  • js面向对象编程:if中能够使用那些作为推断条件呢?

         在全部编程语言中if是最长用的推断之中的一个。但在js中究竟哪些东西能够在if中式作为推断表达式呢?

         比如怎样几行,仅仅是少了一个括号。真假就全然不同。究竟表示什么含义呢 

            var obj={};
             obj.Funtext=function(){};
    		    if(obj.Funtext)
    		   {
    		     alert("true  obj.Funtext;");
    		   }
    		   else
    		   {
    		     alert("false  obj.Funtext");
    		   }
    		   obj.Funtext=function(){};
    		    if(obj.Funtext())
    		   {
    		     alert("true  obj.Funtext();");
    		   }
    		   else
    		   {
    		     alert("false  obj.Funtext()");
    		   }
    1第一类已定义的变量但未赋值在if中觉得是假

    比如:

     var  t;
    	       if(t)
    		   {
    		     alert("true 已定义未赋值");
    		   }
    		   else
    		   {
    		     alert("false 已定义未赋值");
    		   }

    2第二类已定义的变量,赋值为空字符串在if中觉得是假。赋值为其它的字符串。也就是是字符串中有字符就觉得是真

    比如:

            var  t;
              t="";
    		   if(t)
    		   {
    		     alert("true t='';");
    		   }
    		   else
    		   {
    		     alert("false t=''");
    		   }

    if推断是假

    再比如:

     var  t;
               t=" ";
    		   if(t)
    		   {
    		     alert("true t=' ';");
    		   }
    		   else
    		   {
    		     alert("false t=' '");
    		   }
    		    t="111";
    		   if(t)
    		   {
    		     alert("true t='111';");
    		   }
    		   else
    		   {
    		     alert("false t='111'");
    		   }
    if推断是真,也就是对于字符串类型。仅仅要有字符,即使是空格字符if推断也为真。

    3第三类已定义的变量。赋值为true在if中觉得是真,赋值为false,则为假,这和其它语言中bool的类型的变量是一样的。

    比如:

              var  t;
               t=false;
    		   if(t)
    		   {
    		     alert("true  t=false;");
    		   }
    		   else
    		   {
    		     alert("false  t=false;");
    		   }
    		    t=true;
    		   if(t)
    		   {
    		     alert("true  t=true;");
    		   }
    		   else
    		   {
    		     alert("false  t=true;");
    		   }

    4第四类已定义的变量,赋值为0在if中则为假,其它数值觉得是真,这和c语言中数值的类型的变量是一样的。

    比如:

              var  t;
               t=0;
    		   if(t)
    		   {
    		     alert("true  t=0;");
    		   }
    		   else
    		   {
    		     alert("false  t=0;");
    		   }
    		    t=0.0;
    		   if(t)
    		   {
    		     alert("true  t=0.0;");
    		   }
    		   else
    		   {
    		     alert("false  t=0.0;");
    		   }
    測试发现无论是0,还是0.0都是假

              var  t;
                t=2;
    		   if(t)
    		   {
    		     alert("true  t=2;");
    		   }
    		   else
    		   {
    		     alert("false  t=2;");
    		   }

    发现非0是都是真

    5第五类js中的特殊值null,undefined,都是假

      

    var  t=null;
    		   if(t)
    		   {
    		     alert("true  t=null;");
    		   }
    		   else
    		   {
    		     alert("false  t=null;");
    		   }
    		    t=undefined;
    		   if(t)
    		   {
    		     alert("true  t=undefined;");
    		   }
    		   else
    		   {
    		     alert("false  t=undefined;");
    		   }
    因为在js中没有定义的变量默认值是undefined。因此这也就就解释了第一类情况



    6第六类已定义的函数。依据调用方式又分为两种

      第一种:不带括号的,假设定义了就是真,未定义会报错

        

    function testfunction(){}
    		   if(testfunction)
    		   {
    		     alert("true  testfunction;");
    		   }
    		   else
    		   {
    		     alert("false  testfunction;");
    		   }
     另外一种:带括号的。事实上相当于调用函数,自然是依据函数的返回值推断真假

         比如:    

     function testfunction(){}
      if(testfunction())
    		   {
    		     alert("true  testfunction;");
    		   }
    		   else
    		   {
    		     alert("false  testfunction;");
    		   }
    是假,是由于,函数假设未定义返回值值。则返回值是undefined



    7第七类已定义的对象。未赋值时在if中则为假,赋值后是真。


    比如:

    var obj;
    		    if(obj)
    		   {
    		     alert("true  obj;");
    		   }
    		   else
    		   {
    		     alert("false  obj;");
    		   }
    事实上因为在js中变量在没有赋值时是没有类型的,因此和第一种情况是一样的。

     但在赋值后,就会变成真,比如:

              var <span style="font-family: Arial, Helvetica, sans-serif;">obj</span>
    ;
                obj={};
    		    if(obj)
    		   {
    		     alert("true  obj={};");
    		   }
    		   else
    		   {
    		     alert("false  obj={};");
    		   }

    8第八类已定义的对象的属性字段,和单独的变量是一样的,比如数值型为0时是假。其它为真,字符串型是为空值时是假,其它为真。

    比如

     var obj={};
    		   obj.Text="";
    		    if(obj.Text)
    		   {
    		     alert("true  obj.Text;");
    		   }
    		   else
    		   {
    		     alert("false  obj.Text");
    		   }
    		    obj.Text="Text";
    		    if(obj.Text)
    		   {
    		     alert("true  obj.Text;");
    		   }
    		   else
    		   {
    		     alert("false  obj.Text");
    		   }
    		   obj.Text=0;
    		    if(obj.Text)
    		   {
    		     alert("true  obj.Text;");
    		   }
    		   else
    		   {
    		     alert("false  obj.Text");
    		   }
    		    obj.Text=1;
    		    if(obj.Text)
    		   {
    		     alert("true  obj.Text;");
    		   }
    		   else
    		   {
    		     alert("false  obj.Text");
    		   }

    9第九类已定义的对象的方法。和单独的函数是一样的,

         不加括号是假设没定义就是假。

       

    var obj={};
    		    obj.Funtext=function(){};
    		    if(obj.Funtext)
    		   {
    		     alert("true  obj.Funtext;");
    		   }
    		   else
    		   {
    		     alert("false  obj.Funtext");
    		   }		  
    		    if(obj.Funtext1)//未定义属性,也未定义方法
    		   {
    		     alert("true  obj.Funtext1;");
    		   }
    		   else
    		   {
    		     alert("false  obj.Funtext1");
    		   }


          加了括号相当于调用方法,就是依据返回值推断真假。

        

    var obj={};
    		     obj.Funtext=function(){};
    		    if(obj.Funtext())
    		   {
    		     alert("true  obj.Funtext();");
    		   }
    		   else
    		   {
    		     alert("false  obj.Funtext()");
    		   }
    		    obj.Funtext2=function(){ return "ff"};
    		    if(obj.Funtext2())
    		   {
    		     alert("true  obj.Funtext2();");
    		   }
    		   else
    		   {
    		     alert("false  obj.Funtext2()");
    		   }

     
     能够看到在js中能够在if中作为推断的类型非常多,但终于都能够看做这些类型的变形。仅仅要掌握了这些最主要的,就能够灵活运用if推断了。

    最基本是null。undefined,if推断都是假;对于数值类型。0是假,其它为真;对于字符类型空字符串是假,其它为真,对于方法属性。假设定义了就是真。否则就是假,其它全部都能够看做是这些的变对应用。


      

  • 相关阅读:
    程序猿之歌
    How to solve the problem : &quot;You have been logged on with a temporary profile&quot;
    LeetCode Jump Game
    hdu 3496 Watch The Movie
    matlab矩阵内存预分配
    【Windows socket+IP+UDP+TCP】网络基础
    <html>
    行为类模式(十):模板方法(Template Method)
    行为类模式(九):策略(Strategy)
    行为类模式(八):状态(State)
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5222766.html
Copyright © 2011-2022 走看看