ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
~~~ if ([]) alert(1) // 是会弹出1的 ~~~ `[]`在`javascript`中并不为假,所以很多地方请注意这个。特别是再用`jQuery`是别忘了这个,假设要判断一个元素是否存在,有这样的代码: ~~~ if ($(".tabs-panel").eq(index)) { // 存在 } else { // 不存在 } ~~~ 这样的代码是不正确的,得不到你期望正确的效果的。 **注意字符串和整形布尔值的不同:** var a = 0; var b = '0'; if (a) {alert(1)}; // false if (b) {alert(2)}; // true ``` var a = 0;!a; // true var a = '0';!a; // false var a = '';!a; // true ``` ``` $('[name=invoice_id]').val() "0" !$('[name=invoice_id]').val() false $('[name=invoice_id]').val() == 0 true 所以 不能用 !$('[name=invoice_id]').val() ``` `'0'` 和 `0` 是由区别的。 > 如果是在php里面取反后都是 true,但是js中字符串转换为布尔值都为true **(空字符串除外)** ,哪怕是'0','-1' 转换后都为true。 > int(0) => false, int(-1) true js就是这么神奇,在js中,除了0以外的整形,不论正负,都是 true >[danger] 注意这很重要,又非常容易疏忽,出现问题往往很难排查,所以小的知识点很重要。 参考:[jQuery中eq和get的区别](http://www.cnblogs.com/eoiioe/archive/2008/11/16/1334572.html) >[info] eq返回的是一个jquery对象 还记得那个常见的代码我们用`jQuery`是怎么判断一个元素存在吗? ~~~ if ($('#div').length > 0) { // #div存在 } ~~~ 其实和这个一样的原理,它返回的是一个`jQuery`对象,所以上面的代码可改成: ~~~ if ($(".tabs-panel").eq(index)[0]) { // 存在 } else { // 不存在 } ~~~ 注意这里我们不是判断长度,而是直接判断第0个元素,这一样可以。(没有返回的是`undefined`) ~~~javascript 0 == false; true '0' == false; true !0; true !'0'; false ~~~ >[tip] 注意:js 的 switch 条件判断是全等,php 的 switch 条件判断 不是全等的 ***** ### 要避免使用字符串来比较大小 ```javascript '1000' > '2' // false '3000' > '2' // true 1000 > 2 // true ``` ***** ### 扩展 var a ={};a.length 对象没有length属性,所以返回undefined,请注意这个问题。php返回的可能是纯中括号的是数组,也可能是花括号的对象,但是没有数据时,一般返回的是空数组[],空数组是有length的。 不管怎么样,js判断是多注意这些问题,多考虑是否是要判断length。