js 中 0 和 null 、"" Boolean 值关系
在做字符串非空判断时,无意发现一个问题,记录下以便以后回顾。
问题描述:非空判断,只是校验传值的内容是否为""、null 、undefined。当变量 赋值的字符串内容为 0,此时做非空校验竟然返回true,说当前变量值为空。
代码如下:
//模拟赋值 0
var str = "0"; /**
* 判断字符是否为空的方法
* 为空 返回 true
* 不为空返回 false
* @param {Object} obj
*/
function isEmpty(obj){
if(typeof obj == "undefined" || obj == null || obj == ""){
return true;
}else{
return false;
}
} function checkStr(){
//模拟返回内容
var msg = "空值,校验失败,请检查校验内容!"; if(isEmpty(str)){
console.log("str 内容为空,返回默认时间问候语!");
return msg;
} //继续后续逻辑处理......
}
在度娘后,查看W3C ,解释参考地址:http://www.w3school.com.cn/js/js_obj_boolean.asp
有这么一段话:(ps:摘自 http://www.w3school.com.cn/js/js_obj_boolean.asp JavaScript Boolean(逻辑)对象 文章)
注释:如果逻辑对象无初始值或者其值为 0、-0、null、""、false、undefined 或者 NaN,那么对象的值为 false。否则,其值为 true(即使当自变量为字符串 "false" 时)!
下面的所有的代码行均会创建初始值为 false 的 Boolean 对象。
那就能解释的通了,当变量赋值 为0 则 在Boolean 值中就是false,
因为 undefined、null、"" 在Boolean 值中就也是false,所以在if 逻辑判断 时 就变成了 if(false == false) ,结果 必然就是返回 true。
也终于解惑了心中疑问。后续工作中就知道这个规则了,就可以避免这个问题的发生了。
js 中 0 和 null 、"" Boolean 值关系的更多相关文章
- JS中undefined与null的有趣 关系
今天学习中遇到了一个有意思的问题. var obj = undefined 我们将一个对象设置为undefined typeof(obj)>>undefined 结果是undefined, ...
- C++中 0 与 NULL 与 nullptr之间的关系,nullptr_t 的实现
C++中 0 与 NULL 与 nullptr之间的关系,nullptr_t 的实现 来源 http://blog.csdn.net/Virtual_Func/article/details/4975 ...
- 160304-02、JS 中如何判断null 和undefined
JavaScript 中有两个特殊数据类型:undefined 和 null,下节介绍了 null 的判断,下面谈谈 undefined 的判断. 以下是不正确的用法: var exp = undef ...
- js中获取css样式属性值
关于js中style,currentStyle和getComputedStyle几个注意的地方 (1)用js的style只能获取元素的内联样式,内部样式和外部样式使用style是获取不到的.针对css ...
- 为什么js中0.1+0.2不等于0.3,怎样处理使之相等?(转载)
为什么js中0.1+0.2不等于0.3,怎样处理使之相等? console.log(0.1+0.2===0.3)// true or false?? 在正常的数学逻辑思维中,0.1+0.2=0.3这个 ...
- 为什么JS中0.1+0.2 != 0.3
为什么JS中0.1+0.2 != 0.3 在我曾经的一篇< javascript入门教程 (2) >中,讲到JS中数字运算时,我们提到过一个叫做 数字运算中的精度缺失的问题,当时我们只是简 ...
- 在js中取选中的radio值
在js中取选中的radio值 <input type="radio" name="address" value="0" /> & ...
- JS中0与‘0’
JS中0为false,字符串‘0’为true
- 区分JS中的undefined,null,"",0和false
在程序语言中定义的各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库 字段的空值DB ...
随机推荐
- ‘,’之后要留空格,如 Function(x, y, z)
‘,’之后要留空格,如 Function(x, y, z).如果‘;’不是一行的结束 符号,其后要留空格,如 for (initialization; condition; update). #inc ...
- python 模块之间相互引用
模块层级关系: ----: |->AA.py |->BB.py |->CC.py AA.py from BB import BB class AA: def sub(self, x) ...
- ceRNA 调控机制
ceRNA 不同于mRNA, lncRNA, ncRNA 等概念,其指的既不是某一种类型的RNA(比如mRNA, lncRNA), 也不是某一类的RNA(如ncRNA); ceRNA 其实指的是不同种 ...
- 【Java面试题】29 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
本题并不难,实现方式有很多种,有很多种结构. 方法一:利用内部类实现,两个实现加减的类实现Runnable接口,然后再实现4个具体线程. 代码: public class ManyThreads { ...
- 让UIButton在按下时没有高亮效果
How are you setting the images for the different UIControlStates on the button? Are you setting a ba ...
- [ATL/WTL]_[中级]_[保存CBitmap到文件-保存屏幕内容到文件]
场景: 1. 在做图片处理时,比方放大后或加特效后须要保存CBitmap(HBITMAP)到文件. 2.截取屏幕内容到文件时. 3.不须要增加第3方库时. 说明: 这段代码部分来自网上.第一次学atl ...
- jQuery异步请求模拟IE登录网站
具体请求的登录验证页面后台逻辑处理,这里我们忽略,不在我们的学习范围内:关键的是使用jQuery异步请求方法,如下例子: <%@ Page Language="C#" Aut ...
- 在word文档中如何插入Mathtype公式
将mathtype公式插入到word文档中,是mathtype公式编辑器最基本的操作.当在Mathtype数学公式编辑器中编辑好公式之后,点击文件->更新XXX文档(XXX为当前编辑的word文 ...
- swift学习笔记之--类的计算属性
1,Swift中类可以使用计算属性,即使用get和set来间接获取/改变其他属性的值,代码如下 class Calcuator{ ; ; var sum:Int{ get{ return a + b ...
- echo\awk\sed\tee\curl的使用-shell
echo的使用:http://man.linuxde.net/echo awk的使用:http://man.linuxde.net/awk sed的使用:http://man.linuxde.net/ ...