请教空数组、空对象的问题 本帖最后由 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 myeclipse+mysql query合并列单元格问题 onscroll事件 大侠们,帮帮忙吧!javascript 生成个临时文本文件,且不保存到客户端,由客户自主选择保存位置,有人知道吗???急啊!谢谢了!! showModalDialog打开的摸态窗口怎么提交表单+怎么设置超级链接? js中的ActiveXObject有哪些?它们的api能在哪里找到? JS新人问题:关于内置的事件处理函数 这个东西怎么实现?在线等! ExtJS怎么把后读取的JSON数据添加到先生成的GridPanel的Store中? 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