在全部编程语言中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是假,其它为真;对于字符类型空字符串是假,其它为真,对于方法属性。假设定义了就是真。否则就是假,其它全部都能够看做是这些的变对应用。

js面向对象编程:if中能够使用那些作为推断条件呢?的更多相关文章

  1. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  2. Js面向对象编程

    Js面向对象编程 1.     什么是面向对象编程? 我也不说不清楚什么是面向对象,反正就那么回事吧. 编程有时候是一件很快乐的事,写一些小游戏,用编程的方式玩游戏等等 2.     Js如何定义一个 ...

  3. 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作

    页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...

  4. js面向对象编程 ---- 系列教程

    原 js面向对象编程:数据的缓存 原 js面向对象编程:如何检测对象类型 原 js面向对象编程:if中可以使用那些作为判断条件呢? 原 js面向对象编程:this到底代表什么?第二篇 原 js面向对象 ...

  5. 简单粗暴地理解js原型链–js面向对象编程

    简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...

  6. JS面向对象编程,对象,属性,方法。

    document.write('<script type="text/javascript" src="http://api.map.baidu.com/api?v ...

  7. js原生设计模式——3简单工厂模式\js面向对象编程实例

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  8. JS面向对象编程(进阶理解)

    JS 面向对象编程 如何创建JS对象 JSON语法声明对象(直接量声明对象) var obj = {}; 使用 Object 创建对象 var obj = new Object(); JS对象可以后期 ...

  9. S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则

    注:以下图片均来自<如何向妻子解释OOD>译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html      < ...

  10. js面向对象编程(第2版)——js继承多种方式

    附带书籍地址: js面向对象编程(第2版)

随机推荐

  1. qt坐标系统

    #说明:坐标系统是由 QPainter控制的QPaintDevice是那些能够让 QPainter 进行绘制的“东西”(准确的术语叫做,二维空间)# 的抽象层(其子类有QWidget. QPixmap ...

  2. POJ 1300 欧拉通路&欧拉回路

    系统的学习一遍图论!从这篇博客开始! 先介绍一些概念. 无向图: G为连通的无向图,称经过G的每条边一次并且仅一次的路径为欧拉通路. 如果欧拉通路是回路(起点和终点相同),则称此回路为欧拉回路. 具有 ...

  3. Linux下使用JNI的常见问题及解决方案

    JNI是java和C/C++混合编程的接口,可以很方便地实现java调用C/C++语言.具体的使用方法,网上有很多教程,在此不做过多介绍.本博客只关注在使用JNI的过程中的常见问题. 1.     生 ...

  4. ACM-简单题之Ignatius and the Princess II——hdu1027

    转载请注明出处:http://blog.csdn.net/lttree Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Othe ...

  5. Hacker(十)----常用入侵工具

    黑客若想攻击目标计算机,仅靠DOS命令是无法完成的,还需要一些功能强大的入侵工具,如端口扫描工具.网络嗅探工具.木马制作工具及远程控制工具等. 一.端口扫描工具 端口扫描工具有扫描端口的功能,所谓端口 ...

  6. stm32之通用定时器TIM

    STM32系列的CPU,有多达8个定时器: 1.其中TMI1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动:它们的时钟有APB2的输出产生: 2.其它6个为普通定时器,时钟由 ...

  7. Android-----------国际化多国语言文件夹命名汇总

    *如果不区分地区,则不加后面的-rxx内容 Arabic, Egypt (ar_rEG) —————————–阿拉伯语,埃及      Arabic, Israel (ar_rIL) ———————— ...

  8. js 时间YYYY-MM-DD转换为YYYY/MM/DD 自定义函数格式

    <script type="text/javascript">         window.onload = function () {             va ...

  9. Struts 2读书笔记-----Action访问Servlet API

    Action访问Servlet API Struts2中的Action并没有和任何Servlet API耦合,这样框架更具灵活性,更易测试. 对于Web应用的控制器而言,不访问ServletAPI是几 ...

  10. POJ 1698 (二分图的多重匹配)

    转载:http://www.cppblog.com/MatoNo1/archive/2011/03/26/142766.aspx 我们知道在一个图中,每个点最多只能匹配一条边的情况,是二分图的最大匹配 ...