java 中存在非常多空指针的问题, 须要常常做预防和推断, 如若不然, 控制台出现恼人的异常, 让人信心备受打击, 早期敲代码的时候没有经验, 不能依据异常信息找到问题的根源, 唯一做的事情就是祈祷, 千万别出现什么异常信息啊! 如今碰到与问题, 到希望异常信息越具体越好, 但偏偏事与愿违, 我们所採用的框架竟然把所有的异常所有 throws 即使再 controller 获取也比較麻烦, 一旦出现与预期不一样的结果, 都不知道是哪里出了问题, 调试起来确实不便.
js 中也是一样, 尽管不会出现一大串异常代码, 但控制台还是会有错误警告的, 这段时间一直使用 chrome 和 IE11 调试 js 代码, 认为其方便性不亚于直接使用 MyEclipse 调试 java 代码, java 里面推断字符串变量是否为空, 非常 easy 了:
- String str = "";
- if(str!=null&&!"".equals(str)){
- //your code
- }
当然也能够使用框架上的 API 实现:
- String str = "";
- if(StringUtils.isNotEmpty(str)){
- //your code
- }
StringUtils.isNotEmpty 是 org.apache.commons.lang. 这个包以下的类, 别与 spring 里面的混为一谈.
在 js 中, 也是常常须要推断变量是否为空的, 要不然会常常出现 undefined 或 null 等情况.
假设是字符串类型或者对象类型, 仅仅须要採用这种方式:
- if(str){
- //your code
- }
当 str==undefined 或 str==null 或 str==""的时候都是返回 false 的, 可是当 str=="0"的时候却返回 true, 由于"0" 也是字符串, 是非空的字符串变量.
假设当变量是数值类型, 比方:
- var i = 0;
- if(i){
- //your code
- }
这样是返回 false 的, js 是弱类型的语言, 对于 String 类型和数值类型的区分不严格, 也就是通过 var 定义的变量能够是不论什么类型的, 仅仅要你对它进行初始化, 比方:
- var arr = [];
- var str = "123";
- var obj = {
- field: "123"
- };
- var i = 2;
- i = arr;
- i = str;
- i = obj;
变量定义以后进行初始化, 值是什么类型的, 变量就是什么类型的变量, 然后又一次进行赋值, 变量的类型就又会发生改变, 当然了, 你能够理解为, var 类型是一切类型的父类型, 因此能够 "包罗万象" 了. 因此以上的代码都是正确的, 不会出现错误, 但为了代码的可读性, 建议不同类型的变量不要相互赋值, 以免发生混乱.
最后多说一句, String 类型的变量一般能够跟其它类型的变量发生转换比方:
- var str = "0";
- i = 0;
- alert(str == i);
返回 true
当变量没有定义的时候, 直接进行了初始化, 也是能够识别的:
- xx = 0;
- if("0"==xx){
- alert(xx);
- }
假设没有定义且为初始化, 直接拿来用, 那就不行了.
////////////////////////////////////////////////////////////////////////////////// jquery 推断一个对象是否存在 jQuery 代码推断一个对象是否存在: *********************** 错误 *********************** if($("#id")){}else{} 由于 $("#id") 无论对象是否存在都会返回 object 。 *********************** 正确 *********************** if($("#id").length>0){}else{} 使用 jQuery 对象的属性 length 来推断,假设 > 0 就存在。 或者 if($("#id")[0]){} else {} 或者 直接使用原生的 Javascript 代码来推断: if(document.getElementById("id")){} else {}
////////////////////////////////////////////////////////////////////////////////
来源: http://www.bubuko.com/infodetail-2097319.html