js面向对象编程:if中可以使用那些作为判断条件呢?
作者来源http://www.2cto.com/kf/201407/314978.html搬运
在所有编程语言中if是最长用的判断之一,但在js中到底哪些东西可以在if中式作为判断表达式呢?
例如如何几行,只是少了一个括号,真假就完全不同,到底表示什么含义呢
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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中认为是假
例如:
1
2
3
4
5
6
7
8
9
|
var t; if (t) { alert( "true 已定义未赋值" ); } else { alert( "false 已定义未赋值" ); } |
2第二类已定义的变量,赋值为空字符串在if中认为是假,赋值为其他的字符串,也就是是字符串中有字符就认为是真
例如:
1
2
3
4
5
6
7
8
9
10
|
var t; t= "" ; if (t) { alert( "true t='';" ); } else { alert( "false t=''" ); } |
if判断是假
再例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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的类型的变量是一样的。
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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语言中数值的类型的变量是一样的。
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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都是假
1
2
3
4
5
6
7
8
9
10
|
var t; t= 2 ; if (t) { alert( "true t=2;" ); } else { alert( "false t=2;" ); } |
发现非0是都是真
5第五类js中的特殊值null,undefined,都是假
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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第六类已定义的函数,根据调用方式又分为两种
第一种:不带括号的,如果定义了就是真,没有定义会报错
1
2
3
4
5
6
7
8
9
|
function testfunction(){} if (testfunction) { alert( "true testfunction;" ); } else { alert( "false testfunction;" ); } |
第二种:带括号的,其实相当于调用函数,自然是根据函数的返回值判断真假
例如:
1
2
3
4
5
6
7
8
9
|
function testfunction(){} if (testfunction()) { alert( "true testfunction;" ); } else { alert( "false testfunction;" ); } |
是假,是因为,函数如果没有定义返回值值,则返回值是undefined
7第七类已定义的对象,未赋值时在if中则为假,赋值后是真。
例如:
1
2
3
4
5
6
7
8
9
|
var obj; if (obj) { alert( "true obj;" ); } else { alert( "false obj;" ); } |
其实由于在js中变量在没有赋值时是没有类型的,因此和第一种情况是一样的。
但在赋值后,就会变成真,例如:
1
2
3
4
5
6
7
8
9
10
11
|
var <span style= "font-family: Arial, Helvetica, sans-serif;" >obj</span> ; obj={}; if (obj) { alert( "true obj={};" ); } else { alert( "false obj={};" ); } |
8第八类已定义的对象的属性字段,和单独的变量是一样的,例如数值型为0时是假,其他为真,字符串型是为空值时是假,其他为真。
例如
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
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第九类已定义的对象的方法,和单独的函数是一样的,
不加括号是如果没定义就是假,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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" ); } |
加了括号相当于调用方法,就是根据返回值判断真假。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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中可以使用那些作为判断条件呢?的更多相关文章
- if中可以使用那些作为判断条件呢?
在所有编程语言中if是最长用的判断之一,但在js中到底哪些东西可以在if中式作为判断表达式呢? 例如如何几行,只是少了一个括号,真假就完全不同,到底表示什么含义呢 ? 1 2 3 4 5 6 7 8 ...
- js面向对象编程 ---- 系列教程
原 js面向对象编程:数据的缓存 原 js面向对象编程:如何检测对象类型 原 js面向对象编程:if中可以使用那些作为判断条件呢? 原 js面向对象编程:this到底代表什么?第二篇 原 js面向对象 ...
- 带你一分钟理解闭包--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面向对象编程 作者:茄果 链接: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对象可以后期 ...
随机推荐
- vs2012中添加lib,.h文件方法(原)
项目.属性.C/C++.附加包含目录:填写附加头文件(*.h)所在目录 分号间隔多项项目.属性.链接器.附加库目录:填写附加依赖库(*.lib)所在目录 分号间隔多项项目.属性.链接器(点前面的+展开 ...
- QTP操作word文档
QTP可以对word文档进行操作,这里最主要展示的是向word文档写入内容,并保存的功能. Option explicit Dim wordApp Set wordApp = createobject ...
- vi 使用入门
几种模式: Normal Mode 命令模式 Insert Mode 编辑模式 Command-line Mode Visual Mode Select M ...
- 移动端WEB页面
百度前端技术学院第一阶段任务十一,关于移动端WEB页面布局,参考资料如下(都是一些网页链接): MDN:手机网页开发 MDN:在移动浏览器中使用viewport元标签控制布局 移动前端开发和 Web ...
- angularjs上传图片
通过AngularJS实现图片上传及缩略图展示(读取文件内容) AngularJS图片上传功能的实现(读取文件内容) AngularJs实现Multipart/form-data 文件的上传(上传文件 ...
- Hibernate部署问题总结
出现未知实体类(- org.hibernate.MappingException: Unknown entity),找不到cfg.xml包 (org.hibernate.internal.util.c ...
- mysql设置外网访问
公司有个mysql的数据库放在221服务器上,做手机app数据库连接的时候,本地调试没问题,一旦更新到外网142手机服务器(220.230.190.142),就是数据库连接超时.想到可能是mysql没 ...
- 嵌入式: jffs2,yaffs2,logfs,ubifs文件系统性能分析
在嵌入式领域,FLASH是一种常用的存储介质,由于其特殊的硬件结构,所以普通的文件系统如ext2,ext3等都不适合在其上使用,于是就出现了专门针对FLASH的文件系统,比较常用的有jffs2,yaf ...
- 使用Fluent配置表关系
转载MS官方文档:https://msdn.microsoft.com/zh-cn/data/jj591620 Configuring Relationships with the Fluent AP ...
- 老生长谈,温故知新:css实现右侧固定宽度,左侧宽度自适应
反过来也可以:左侧宽度固定,右侧自适应.不管是左是右,反正就是一边宽度固定,一边宽度自适应. 这种布局比较常见,博客园很多默认主题就是这种.一般情况下,这种布局中宽度固定的区域是侧边栏,而自适应的区域 ...