不矛盾的法则规定,两个相互矛盾的陈述不能同时成立.这意味着表达式
(a && !a)
(a == !a)
(a === !a)
Run Code Online (Sandbox Code Playgroud)
应该总是评估一个虚假的价值,并且
(a || !a)
Run Code Online (Sandbox Code Playgroud)
应始终评估为真实价值.
幸运的是,Javascript是一种有趣的语言,可以让你做 各种各样的 生病.我打赌一个小小的财富,有可能说服Javascript打破非矛盾的法则,或者至少令人信服地让它看起来像是违反了不矛盾的法则.现在我试图让上面的所有四个代码示例都给出意想不到的结果.
有什么好办法可以解决这个问题?
我能做的最好的事情是:
[] == ![] // true
Run Code Online (Sandbox Code Playgroud)
要么
var a = [];
a == !a
Run Code Online (Sandbox Code Playgroud)
当然,这是真的这样做[] == false // true和!![] == ![] // false.这真的只是一个技术性问题.
编辑:这真是一个笑话,但确实有效:
var a = false; var b = function() { return a = !a };
console.log(!!(b() && !b())); // true
console.log(b() == !b()); // true
console.log(b() === !b()); // true
console.log(b() || !b()); // true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
315 次 |
| 最近记录: |