JS直接if参数的用法
经常在JS中见一些代码直接if(参数),然后参数调用的时候是将元素自己传下去。例如下面代码:
<body>
<input type="text" name="" id="" value="111222" onclick="test1(this)" />
<input type="text" name="" id="" value="111222" onclick="test1()" />
</body>
<script>
function test1(obj){
if(obj){
alert($(obj).val());
}else{
alert("has not obj");
}
}
</script>
我们分别点击上面的两个输入框显示如下:


解释:实际上相当于java中的重载,如果传参数了就走if(obj),不传参数就走else。
也就是如果参数不为空或者nul或者undefinedl或者“”空串则if(obj)成立。
进一步的测试:
<script>
function test1(obj){
if(obj){
alert("has obj");
}else{
alert("has not obj");
}
}
test1();//has not obj
test1(null);//has not obj
test1(undefined);//has not obj
test1("");//has not obj
test1(" ");//has obj
test1("1");//has obj
</script>
总结:不传参数,传的参数为null,传的参数为undefined,传的参数为""的时候if(obj)不成立,反之则成立。
补充:直接if(param)可以用于判断参数,也相当于if(param != null),相反if(!param)就相当于if(param == null),例如:
<script>
function test(a, b) {
if (!a || !b) {
alert("参数没传");
} else {
alert("a与b不等于null")
}
}
test();
test("1", "2");
</script>
结果:

补充:实际上是用!与上对象来求得一个布尔值,js中!和!!的区别及用法
js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值,
1、!可将变量转换成boolean类型,null、undefined和空字符串、数字0 通过!转为boolean值0为true,其余为false。
!null=true
!undefined=true
!''=true
!100=false
!'abc'=false
!0=true
特别注意0的情况。
2、!!常常用来做类型判断,在第一步!(变量)之后再做逻辑取反运算,在js中新手常常会写这样臃肿的代码:
判断变量a为非空,未定义或者非空串才能执行方法体的内容
var a;
if(a!=null&&typeof(a)!=undefined&&a!=''){
//a有内容才执行的代码
}
实际上只需要一个表达式:
if(!a){
//a有内容才执行的代码...
}
JS直接if参数的用法的更多相关文章
- JS 不定函数参数argument的用法
本篇文章只要是对js的隐含参数(arguments,callee,caller)使用方法进行了介绍. arguments arguments 该对象代表正在执行的函数和调用它的函数的参数. [func ...
- 【转】javascript浏览器参数的操作,js获取浏览器参数
原文地址:http://www.haorooms.com/post/js_url_canshu html5修改浏览器地址:http://www.cnblogs.com/JiangXiaoTian/ar ...
- JS里设定延时:js中SetInterval与setTimeout用法
js中SetInterval与setTimeout用法 JS里设定延时: 使用SetInterval和设定延时函数setTimeout 很类似.setTimeout 运用在延迟一段时间,再进行某项操 ...
- js replace 与replaceall实例用法详解
这篇文章介绍了js replace 与replaceall实例用法详解,有需要的朋友可以参考一下stringObj.replace(rgExp, replaceText) 参数 stringObj 必 ...
- js 的函数参数的默认值问题
js函数参数设置默认值 php有个很方便的用法是在定义函数时可以直接给参数设默认值,如: function simue ($a=1,$b=2){ return $a+$b; } echo simu ...
- linux管道命令grep命令参数及用法详解---附使用案例|grep
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- js 读取 地址栏参数 转
用JS获取地址栏参数的方法(超级简单) 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var re ...
- linux mount命令参数及用法详解
linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...
- 【转】linux expr命令参数及用法详解
在抓包过程中,查看某个设定时间内,数据上下行多少,用命令expr 计算! --------------------------------------------------------------- ...
随机推荐
- hdu 5126 stars (四维偏序,离线,CDQ套CDQ套树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5126 思路:支持离线,那么我们可以用两次CDQ分治使四维降为二维,降成二维后排个序用树状数组维护下就好 ...
- Java 实现金额转换 代码示例
金额转换,阿拉伯数字的金额转换成中国传统的形式如: (¥1011)→(壹仟零壹拾壹元整)输出. 分析: 金额转换,在开发财务相关软件时会经常用到,也是软件本地化的一个需要.一般开发公司或者团队都有相应 ...
- Cgod省选的爆零日记
声明 虽然是日记,但博主太咕咕咕了,所以可能会鸽掉. 3.11 辣鸡杭二的机子,卡我常数,削我分数. 他们那边的机子好像比我们慢四倍的样子? 开局刚\(T3\),分数全靠骗. \(yy\)许久\(GG ...
- 【转】用宏定义代替printf函数
问题提出 有时候我们想用宏定义来决定是编译debug版本的代码还是release的代码,dubug版本的代码会通过printf打印调试信息,release版本的代码则不会.我们总不能对每一条print ...
- P1382 楼房 set用法小结
这个sb题目,剧毒... STL大法好 首先,我准备用经典的线段树优化扫描线来做.之前的矩形周长把我困了数天导致我胸有成竹. 然后,敲代码半小时,调试半个月......这个,sb,怎么改都是0分+2个 ...
- Node.js npm uuid
nodejs 提供了一个 node-uuid 模块用于生成 uuid 使用方法为 const uuidV1 = require('uuid/v1'); uuidV1(); 或者为 const uuid ...
- quartz 关闭不断输出的batch acquisition of 0 triggers ?
转: spring整合quartz定时器的项目中,如何关闭不断输出的batch acquisition of 0 triggers ? 不断输出的batch acquisition of 0 trig ...
- Maven web 项目工程的建立
打开eclipse,mars版本的已经集成了maven. 1. new 一个 maven project,勾选Create a simple project(这样就省去了建立文件夹的过程) 2. 选择 ...
- poj 2186 "Popular Cows"(强连通分量入门题)
传送门 参考资料: [1]:挑战程序设计竞赛 题意: 每头牛都想成为牛群中的红人. 给定N头牛的牛群和M个有序对(A, B),(A, B)表示牛A认为牛B是红人: 该关系具有传递性,所以如果牛A认为牛 ...
- MQ与webservice的区别,MQ的区别
Webservice 和MQ(MessageQueue)都是解决跨平台通信的常用手段,两者有哪些区别呢? 个人认为最本质的区别在于 Webservice近乎实时通信,而MQ却通常是延时通信. 什么意思 ...