请教空数组、空对象的问题 本帖最后由 hoyche 于 2014-08-21 13:36:30 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 变量是普通类型可以if(xxx),是对象不能这样判断 看下有len or count 没 判断下 空数组属于比较特殊的玩意var a = [];alert(~a); // -1alert(+a); // 0alert(++a); // 1alert(!a); // falsehttp://www.iteye.com/topic/947149 这里有说明 javascript不是那么好学的,不可以用猜想去解释,要看实际效果。 {} 是一个内部方法、属性没有内容的对象,不是空对象,空对象应该是 null对象无法用强制转换类型的 var arr=[],obj={}; if(arr) console.log(1); if(obj) console.log(1);变量arr和obj是真实存在的,所以会是打印内容。而数组arr的长度为0,所以也会打印。obj==0肯定会打印false的。因为obj是一个对象。 空数组和空对象也是Object是Object,在转换成布尔值时就是 true在用==比较时会对数组先进行类型转换。空数组可以转换成空字符串""。空字符串又可以转换成0 For more information, please refer to <JavaScript-The Definite Guide> to get all you want to know. +0 、-0、""、null、undefined、false、NaN 这7个值是假值,其他所有的值都为真值。== 比较是值的比较 arr == 0;是arr的值和0比 例:[2] == 2 也是true 等号比较的时候会转换类型 [] == 0。而全等比较的时候,则不会转换。[] === 0http://www.cnblogs.com/simayixin/archive/2011/03/21/1990831.html0==[]然后[]专为"",式子专为0==“”然后""转为0,式子专为0==0所以[]==0得到true 如果浏览器开发商想让 {}==0 返回true,到时候大家又会说,{}中没有自定义的属性,所有{}==0应该返回true。类似这样的问题,不存在对于错的问题,而是是否遵循惯例的问题。提供的东西是否直观的问题。对于我来说,这些语法都是垃圾,只是为新手挖了更多的坑而已,试想程序员用arr==0他想表达什么,这种动机本身就有问题,意图不确定。如果你想判断数组是否为空,应该用arr.length===0判断。 不要纠结那些垃圾语法细节,如果浏览器给你提供一个bug,你还问为什么是个bug,有什么意义。重要的是知道bug的存在后,避免触发那些bug。 首先没有 空对象 其次console.log(arr==0) 无业务场景适用的代码 不要写什么时候你会让 数组 和 数字 去比较呢?应该不会吧if(表达式) 只要表达式结果存在 不是0 不是false js事件的问题 正则 匹配URL 求网页倒即时程序 这是在网上搜索到的一个页面代码,请问大家谁知道怎么把红色部分的背景色替换成图片,谢谢! 如何控制瀑布流的列数呢? 创建activex控件失败 我有一些小图片,希望在页面上滚动播出,就是一张一张的移过去,循环移动,谢谢 一个没有希望解决的问题 在netscape下怎样将打印时的页眉页脚去掉?netscape好象没有页面设置 Js判断输入框的值是否发生变化 firebug 的奇怪问题 同志们 js中的函数如何来调用?
alert(~a); // -1
alert(+a); // 0
alert(++a); // 1
alert(!a); // falsehttp://www.iteye.com/topic/947149 这里有说明
对象无法用强制转换类型的
if(arr)
console.log(1);
if(obj)
console.log(1);
变量arr和obj是真实存在的,所以会是打印内容。而数组arr的长度为0,所以也会打印。obj==0肯定会打印false的。因为obj是一个对象。
== 比较是值的比较 arr == 0;是arr的值和0比
例:[2] == 2 也是true
http://www.cnblogs.com/simayixin/archive/2011/03/21/1990831.html
0==[]
然后[]专为"",式子专为0==“”
然后""转为0,式子专为0==0
所以[]==0得到true
如果浏览器开发商想让 {}==0 返回true,到时候大家又会说,{}中没有自定义的属性,所有{}==0应该返回true。类似这样的问题,不存在对于错的问题,而是是否遵循惯例的问题。提供的东西是否直观的问题。对于我来说,这些语法都是垃圾,只是为新手挖了更多的坑而已,试想程序员用arr==0他想表达什么,这种动机本身就有问题,意图不确定。如果你想判断数组是否为空,应该用arr.length===0判断。
其次
console.log(arr==0) 无业务场景适用的代码 不要写
什么时候你会让 数组 和 数字 去比较呢?应该不会吧
if(表达式) 只要表达式结果存在 不是0 不是false