首页 > 代码库 > JavaScript: The Evil Parts - 1
JavaScript: The Evil Parts - 1
最近在看JavaScript框架设计,在讲解类型判定的时候提到了一些“匪夷所思的情况”,不过没有明说都是什么时候会出现这些情况。自己玩儿了一下,写写随笔吧。不过可能除了我找到的,还有会其他时候会出现这些诡异的现象2333
问题:在JavaScript中,什么时候会出现
a !== a
a == b && b != a
a == !a
a == b && a == c && b != c
a != b && a != c && b == c
答案
参考ECMA-262 Edition 5.1 Section 11.9.6,其实!=也是true(参考11.9.3)
var a = NaN;console.log(a !== a); // true
只有IE6~8会出现(由于window不属于ECMAScript约束范围)
var a = window;var b = document;console.log(a == b && b != a); // true
参考ECMA-262 Edition 5.1 Section 11.9.3,这里也有讲解
var a = [];console.log(a == !a); // true
- 来自Douglas Crockford的JavaScript: The Good Parts,同样参考11.9.3,这里也有讲解
var a = 0;var b = ‘‘;var c = ‘0‘;console.log(a == b && a == c && b != c); // true
- 来源和第4道一样
var a = false;var b = undefined;var c = null;console.log(a != b && a != c && b == c); // true
JavaScript里的黑魔法真是太可怕了,啊哈哈哈哈哈……虽然都是略钻牛角尖的东西,不过实际开发中可能真的会被其中的情况坑到。所以说,在绝大多数情况下,还是能用===就用===的好……
JavaScript: The Evil Parts - 1
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。