在全部编程语言中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. Unity PlayerPrefs类进行扩展(整个对象进行保存)

    盘子脸在制作单机游戏的时候,先以为没有好多数据需要保存本地. 就没有使用json等格式自己进行保存. 使用PlayerPrefs类,但是后面字段越来越多的时候. PlayerPrefs保存就发现要手动 ...

  2. runtime的基本应用

    1.什么是runtime? runtime是一套底层的C语言API,包含很多强大实用的C语言数据类型和C语言函数,平时我们编写的OC代码,底层都是基于runtime实现的. 2.runtime有什么作 ...

  3. 在Unity3d编辑器中加入菜单以及菜单项

    在引用UZGUI插件时,u3d编辑器的菜单条发生了变化,新增了菜单和菜单项,于是乎自己也像尝试一下,看了EZGUI的About_EZ_GUI脚本文件后,结果大出我所料,原来SO EASY! using ...

  4. hibernate 用hql做中文排序

    用Hibernate+MySQL的童鞋是不是非常苦恼为什么MySQL不支持中文排序呢?没办法.仅仅有等utf8_unicode_cn 出来了.假设用hibernate即想实现跨库,又想不改代码怎样实现 ...

  5. 适用于CSS2的各种运动的javascript运动框架

    <script> window.onload = function() { //var oDiv1 = document.getElementById('box1'); //var oDi ...

  6. 简单的拖动手势控制侧拉view显示

    通过 UIPanGestureRecognizer  手势来控制侧拉view的显示 在QHLViewController.m文件中,先添加一些宏定义和参数等等. #define QHLAnimatin ...

  7. Qt Creator下载

    Qt官网 http://qt.digia.com qt的历史版本可以到http://download.qt-project.org/archive/qt/下载

  8. OS X EI Capitan 10.11.4中sudo无法起作用的解决方法

    mac升级到OSX EI Capitan 10.11.4后sudo命令无法起作用,执行任何操作总是显示Operation denied.这是因为在10.11.4中引入了Rootless机制,即就算是R ...

  9. jxl读和取Excel文件

    请参看下面链接: jxl如何读和取excle中的数据

  10. css pre如果同时运用了css的border-radius、 overflow两个属性且标签中内容太多时,外部div滚动条在firefox下滚动时很卡

    pre如果同时运用了css的border-radius. overflow两个属性且标签中内容太多时,外部div滚动条在firefox下滚动时很卡. 解决方法:去掉css中border-radius. ...