JS直接if参数的⽤法JS中!和!!区别
  经常在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=truetypeof的用法
!''=true
!100=false
!'abc'=false
!0=true
  特别注意0的情况。
2、!!  常常⽤来做类型判断,在第⼀步!(变量)之后再做逻辑取反运算,在js中新⼿常常会写这样臃肿的代码:判断变量a为⾮空,未定义或者⾮空串才能执⾏⽅法体的内容
var a;
if(a!=null&&typeof(a)!=undefined&&a!=''){
//a有内容才执⾏的代码
}
实际上只需要⼀个表达式:
if(!a){
//a有内容才执⾏的代码...
}
⽐如:如下⼀个验证值必填的函数,有值的话返回true,没值的话返回字符串消息"required."
function required(val) {
return !!val || 'required.';
}
console.log(required());
console.log(required(''));
console.log(required(0));
console.log(required("xxxxx"));
结果:
(1)required('')解释: !'' 返回的是true, 再进⾏⼀次!之后是false。所以会返回后⾯的字符串。
(2)required("xxxxx")解释: !"xxxxx" 返回的是false,再进⾏⼀次 ! 返回的是true。因此不与后⾯的字符串进⾏逻辑或运算,直接返回true。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。