082011
 

今天在搞一个很神奇的问题

自己写了个isNullOrEmpty函数,判断Object里面的某个Key是否为空,解析json常用的啦常用。

很早就写完了一直也没觉得有什么问题,直到今天…

image

她妹的value = 0 但是debugger跳去了isNull里面啊…

然后再详细琢磨一下…

测试1:

image

测试2:

image

测试3

image

她妹的 一个object = 0 的时候 把它做为一个字符串来比较它是空啊……

它是空啊……

是空啊……

空啊……

啊……

 Posted by at 11:45 上午

  11 Responses to “做AS3的苦逼程序员你们伤不起啊…”

  1. 这是肥音你懂吗?
    是肥音你懂吗?
    肥音你懂吗?
    音你懂吗?
    你懂吗?
    懂吗?
    吗?

    .

  2. var a:Object=0;
    trace(a==”");//输出 true

    坑爹啊。再加个a!=0 吧。

  3. var a:Object=1;
    trace(a==”");
    trace(String(a).length);

    //输出
    false
    1
    看来是当字符串长度了。

  4. 其实这是ECMAScript一个常见的陷阱, 就是false, 0, “” 这三个东西用 == 判断返回都是true…

  5. object = 0时,object类型已经是number了,此时和字符串比较,字符串会转型为number,所以比较结果自然就是true。

  6. 嗯…
    结果就是下面的规则:

    判断两个变量是否相等是程序设计中非常重要的运算。在处理原始值时,这种运算相当简单,但涉及对象,任务就稍有点复杂。
    ECMAScript 提供了两套等性运算符:等号和非等号用于处理原始值,全等号和非全等号用于处理对象。
    等号和非等号
    在 ECMAScript 中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。
    执行类型转换的规则如下:
    如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
    如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
    如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
    如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。
    在比较时,该运算符还遵守下列规则:
    值 null 和 undefined 相等。
    在检查相等性时,不能把 null 和 undefined 转换成其他值。
    如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
    如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。
    重要提示:即使两个数都是 NaN,等号仍然返回 false,因为根据规则,NaN 不等于 NaN。

  7. 其实不是陷阱,这是个转换规则…
    详情看这里:
    http://www.w3school.com.cn/js/pro_js_operators_equality.asp

  8. 我说是陷阱的意思就是可能会搞出犯晕让你直犯晕的代码……
    由于ECMAScript的==是要做类型转换的,所以一般建议使用 ===。这样也可强制开发者注意自己维护数据类型,以避免出现多余的类型转换浪费时间。

  9. 哎~X,我TM还真敢想。:D

  10. value==null改为!value

  11. 这是动态类型比较运算产生的类型转换.String->Number.是ECMAScript里11.9.3 The Abstract Equality Comparison Algorithm规定的,比较变态.
    16.If Type(x) is Number and Type(y) is String,return the result of the comparison x == ToNumber(y).

    17.If Type(x) is String and Type(y) is Number,return the result of the comparison ToNumber(x) == y.

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>