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对象可以后期 ...
随机推荐
- VBA_Excel_教程:单元格颜色
Sub SetCellColor() '设置单元格颜色 Sheet1.Cells(, ).Interior.ColorIndex = End Sub
- 天地图应用ArcGIS发布的服务
本文包含三个部分:利用ArcMap将Excel的数据转化为ArcGIS MXD文件.利用ArcMap发布服务.天地图添加ArcGIS发布的服务. 一 MXD文件的生成 假设在Excel中存有两个点的坐 ...
- Maven依赖版本冲突的分析及解决小结
1:前言 做软件开发这几年遇到了许多的问题,也总结了一些问题的解决之道,之后慢慢的再遇到的都是一些重复性的问题了,当然,还有一些自己没有完全弄明白的问题.如果做的事情是重复的,遇到重复性问题的概率也就 ...
- idea添加内存
在idea安装目录下的以下两个文件: 添加内存:
- QTP学习笔记之—VBS
1.ToString() : Returns a string that represents the current test object. Example The following examp ...
- leetcode 202
202. Happy Number Write an algorithm to determine if a number is "happy". A happy number i ...
- android开发--okhttp
一.okhttp简单实用: 一般的get请求 一般的post请求 基于Http的文件上传 文件下载 加载图片 支持请求回调,直接返回对象.对象集合 支持session的保持 二.实用教程 1.添加an ...
- 会话状态已创建一个会话 ID,但由于响应已被应用程序刷新而无法保存它
解决方法是新建 全局应用程序类 Global.asax 在 Session_Start 函数中 添加 string sessionId = Session.SessionID; protected v ...
- c++ Primer 第四版 第一阶段 const总结
由于期末值考一门软件安全,所以果断看起c++Primer ,因为之前看谭浩强的c++感觉没什么用啊.所以这本书每阶段做个总结!!! 1.Const限定符作用: 在for循环中上限应该用一个固定变量来设 ...
- AIX 环境下Telnet返回提示所有端口已经被占用,处理方法
IBM AIX v5.3操作系统环境Telnet返回提示所有端口已经被占用 可以按以下步骤进行检查和处理 1,以下命令检查pty0是否可用 #lsdev -Cl pty0 2,以下命令检查telnet ...