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是假,其它为真;对于字符类型空字符串是假,其它为真,对于方法属性。假设定义了就是真。否则就是假,其它全部都能够看做是这些的变对应用。
js面向对象编程:if中能够使用那些作为推断条件呢?的更多相关文章
- 带你一分钟理解闭包--js面向对象编程
上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...
- Js面向对象编程
Js面向对象编程 1. 什么是面向对象编程? 我也不说不清楚什么是面向对象,反正就那么回事吧. 编程有时候是一件很快乐的事,写一些小游戏,用编程的方式玩游戏等等 2. Js如何定义一个 ...
- 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作
页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...
- js面向对象编程 ---- 系列教程
原 js面向对象编程:数据的缓存 原 js面向对象编程:如何检测对象类型 原 js面向对象编程:if中可以使用那些作为判断条件呢? 原 js面向对象编程:this到底代表什么?第二篇 原 js面向对象 ...
- 简单粗暴地理解js原型链–js面向对象编程
简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...
- JS面向对象编程,对象,属性,方法。
document.write('<script type="text/javascript" src="http://api.map.baidu.com/api?v ...
- js原生设计模式——3简单工厂模式\js面向对象编程实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- JS面向对象编程(进阶理解)
JS 面向对象编程 如何创建JS对象 JSON语法声明对象(直接量声明对象) var obj = {}; 使用 Object 创建对象 var obj = new Object(); JS对象可以后期 ...
- S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则
注:以下图片均来自<如何向妻子解释OOD>译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html < ...
- js面向对象编程(第2版)——js继承多种方式
附带书籍地址: js面向对象编程(第2版)
随机推荐
- poj1410
简单题,注意是实心矩形 #include <iostream> #include <math.h> #include <iomanip> #define eps 1 ...
- 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON() —(转)
一,$.get(url,[data],[callback]) 说明:url为请求地址,data为请求数据的列表(是可选的,也可以将要传的参数写在url里面),callback为请求成功后的回调函数,该 ...
- Android项目svn代码管理问题
用svn控制版本,svn本身是不会识别哪些该传,哪些不该传,这就导致有些关于路径的东西(比如拓展jar的路径)也被上传了,而当别人下载后,那个路径对于这个人可能完全不存在,项目编译就会出问题.用ecl ...
- java 去除重复项
import java.util.Arrays; import java.util.HashSet; import java.util.Set; class Demo20 { public stati ...
- PHP学习笔记十六【方法】
<?php //给一个函数传递基本数据类型 $a=90; $b=90.8; $c=true; $d="hello world"; function test1($a,$b,$ ...
- Draw2d中的布局管理器Layout比较
最近在研究Eclipse中的GEF开发,在跟着GEF-whole-upload教程做一个GEF应用程序的例子时,发现Figure上的控件无法显示,谷歌了很久也没找到解决方案,最后终于发现是Layout ...
- 高性能PHP日志插件--Seaslog
日志系统作为记录系统运行的信息,包括 用户输入,安全日志等,日志系统是不能影响用户的使用. 为什么需要记录日志? 既然日志系统增加了整个系统的开销,为什么我还需要它,这是因为日志能帮我们记录运行的很多 ...
- OFBiz应用https与http方式访问切换
url.properties port.https.enabled=N port.https=8444 force.https.host=
- WPF/MVVM 快速开发
http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial 这篇文章醍醐灌顶,入门良药啊! Introductio ...
- 【转】nginx之主配置文件:root和alias
nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了下,方便大家在应用过程中,快速响应.root与alias主要区别在于nginx如何解释location后面的uri ...