在全部编程语言中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. Jenkins动态部署方案

    在之前一个项目开发中使用到了jenkins自动化测试,根据实际应用,简单整理了其部署方案. 1.部署 2.项目构建 3.重部署 1 部署 登录Jenkins应用管理界面 1)选中一个服务器上已在jen ...

  2. Qt Assistant 工作机制

    Qt Assistant 是Qt 的助手,我们在看帮助的时候要用到的,它可以记住上一次你访问的位置. 1.   所以在你调用Qt Assistant为我们自己的程序写help的时候要记得修改qhcp配 ...

  3. map的类型映射

    以下是使用STL中map类型,对类型的转换示例,主要可以解决的问题,也就是一般的类型之间的相互转换,可以较好的解决相关的问题. 以下是C++源码,比较简短,容易理解的. #include " ...

  4. Unity 启动画面淡入淡出

    前几天在玩我叫MT 2游戏的时候发现打开他们应用的时候发现他们Logo淡入淡出的效果做的挺好的,例如第一张是运营商腾讯的logo第二张是他们公司的游戏logo.我们也来模仿一下: 第一张图片:运营商的 ...

  5. 移动开发(webapp)过程中的小细节总结

    1.阻止旋转屏幕时自动调整字体大小 html, body, form, fieldset, p, div, h1, h2, h3, h4, h5, h6 { -webkit-text-size-adj ...

  6. varchar和Nvarchar的区别

    (1)varchar(N) 存储时 N的单位是字节  比如说varchar(2)  代表的是  该字段可以存储字节长度为2的数据 例子:可以添加  张 或者 ab  添加成功! 但添加的时候如果是: ...

  7. T-SQL 函数概述

    T-SQL函数的类别和描述: 函数类别 作用 聚合函数 返回一个标量值,表示在某个值域上的聚合,应用于特定的聚合选择或者汇总 配置变量 返回SQL Server执行环境的信息.这些信息可用于给对象编程 ...

  8. enumerateObjectsUsingBlock VS for(... in ...)

    enumerateObjectsUsingBlock VS for(... in ...) for(... in ...)用起来非常方便.简洁,同时enumerateObjectsUsingBlock ...

  9. 在word中使用notepad++实现代码的语法高亮

    转载自:http://blog.csdn.net/woohello/article/details/7621651 有时写文档时需要将代码粘贴到word中,但直接粘贴到word中的代码虽能保持换行与缩 ...

  10. 阿里巴巴集团2013实习生招聘技术类笔试题(B)

    一.单向选择题 1.在常用的网络协议中,___B__是面向连接的.有重传功能的协议. A. IP B. TCP C. UDP D. DXP 2.500张骨牌整齐地排成一行,按顺序编号为1.2.3... ...