在所有编程语言中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=' '");
}
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是假,其他为真;对于字符类型空字符串是假,其他为真,对于方法属性,如果定义了就是真,否则就是假,其他所有都可以看做是这些的变相应用。

原文 https://www.cnblogs.com/Liangbingbing/p/6582253.html

javascript中 if条件语句中的判断条件类型总结的更多相关文章

  1. sql语句not in判断条件注意事项

    sql语句not in判断条件注意事项 问题描述:mysql数据库,存在两个表org表和kdorg表,用于存储组织信息.现在我需要从org表找出组织,条件为该组织不在kdorg表里. sql语句:se ...

  2. MyBatis 中实现SQL语句中in的操作 (11)

    MyBatis 中实现SQL语句中in的操作 概括:应用myBatis实现SQL查询中IN的操作 1.数据库结构及其数据 2.mapper.xml文件 <?xml version="1 ...

  3. 在switch中的case语句中声明变量编译出错的解决方案

    在switch中的case语句中声明变量编译的问题 先来看段代码,别管什么意思: : , j = ; ; i < ; i++) recive_phone[i] = msgbuf.text[i]; ...

  4. Mybatis中动态SQL语句中的parameterType不同数据类型的用法

    Mybatis中动态SQL语句中的parameterType不同数据类型的用法1. 简单数据类型,    此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType ...

  5. 在MySQL中阻止UPDATE语句没有添加WHERE条件的发生

    如果在生产环境中使用UPDATE语句更新表数据,此时如果忘记携带本应该添加的WHERE条件,那么..Oh,no…后果可能不堪设想.那么有没有什么办法可以阻止这样的事情发生,又不使用任何的审核工具呢.. ...

  6. 关于Switch case条件语句中无break的用法

    关于Switch case条件语句的另类用法       今天在拜读一位前辈的程序时,遇到了这样一段程序: /***************************/ switch(operation ...

  7. delphi中的sql语句中空格问题

    sql语句中的冒号 ‘’,在delphi中需要用四个冒号表示 ‘’‘’,delphi中的两个冒号只代表一个冒号

  8. PDO中捕获SQL语句中的错误

    使用默认模式-----PDO::ERRMODE_SILENT 在默认模式中设置PDOStatement对象的errorCode属性,但不进行其它不论什么操作. 比如: 通过prepare()和exec ...

  9. 在switch中的case语句中声明变量会被提前

    原文链接:http://my.oschina.net/u/2000201/blog/514384 本人今天在编写工具类时,无意之间发现,在Java的Swith语句的case语句中声明局部变量时出现了一 ...

随机推荐

  1. CSS基础学习-7.CSS元素分类

  2. 集合(五) TreeMap

    4.TreeMap SortedMap接口继承Map接口,是排序键值对的接口,实现排序的的方法是Comparator.而NavigableMap接口继承于SortedMap,新增了一些导航方法.而Tr ...

  3. easypoi 版本依赖关系

    <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactI ...

  4. docker下安装运行mysql的过程以mysql5.7为例

    一.查找mysql资源 docker search mysql 其实这步顶多是看看有哪些mysql资源,除非你自己commit过一个特定的版本,否则直接执行下一步 二.安装mysql docker p ...

  5. Acwing-196-质数距离(素数区间筛法)

    链接: https://www.acwing.com/problem/content/198/ 题意: 给定两个整数L和U,你需要在闭区间[L,U]内找到距离最接近的两个相邻质数C1和C2(即C2-C ...

  6. JavaScript一元运算符

    ㈠一元运算符 一元运算符,只需要一个操作数 ⑴+  正号    正号不会对数值产生影响 示例: ⑵-   负号    负号可以对数字进行负号的取反 示例: ⑶对于非Number类型的值,它会将其先转换 ...

  7. Mockito 2 关于打标(stubbing)

    请参考下面有关于打标的代码. //You can mock concrete classes, not just interfaces LinkedList mockedList = mock(Lin ...

  8. CDOJ 1133 菲波拉契数制 变直接统计为构造

    菲波拉契数制 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit St ...

  9. Java当中的集合框架

    Java当中的集合框架 01 在我们班里有50位同学,就有50位对象. // 简书作者:达叔小生 Student[] stus = new Student[20]; 结果来了一位插班生,该同学因为觉得 ...

  10. 你知道 GNU Binutils 吗?【binutils】

    概述 从事 Linux 开发的朋友们都不可避免地用到一些工具,比如 objcopy.nm.objdump.readelf 等等.其实这一系列的工具,就是所谓的 Binutils,当然 GNU 就表示它 ...