为什么这个逻辑表达式返回全局对象?

时间:2018-04-07 20:45:01

标签: javascript node.js

var root = (typeof self == 'object' && self.self === self && self) ||
        (typeof global == 'object' && global.global === global && global);

当我在控制台中检查它的值时,它会给我一个窗口对象

console.log(root); // > Window

2 个答案:

答案 0 :(得分:1)

自我就是窗口,当你“检查”&&自己,你明白了。

答案 1 :(得分:0)

window.self是指向window本身的属性。因此,两个检查都将评估为true:

  typeof self == 'object' && self.self === self

感谢和运营商的定义......

  

expr1&& expr2:如果可以转换为false,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时,&&如果两个操作数都为真,则返回true;否则,返回false。 MDN

....然后它会返回self,这是...... window

 && self