我在网上看到人们使用以下构造来获取全局对象
(1,eval)('this')
或这个
(0||eval)('this')
你能解释一下它到底是如何工作的以及对 , 等的好处window
吗top
?
UPD:测试直接与间接eval
调用: http: //kangax.github.io/jstests/indirect-eval-testsuite/
我在网上看到人们使用以下构造来获取全局对象
(1,eval)('this')
或这个
(0||eval)('this')
你能解释一下它到底是如何工作的以及对 , 等的好处window
吗top
?
UPD:测试直接与间接eval
调用: http: //kangax.github.io/jstests/indirect-eval-testsuite/
(1,eval)('this')
相当于eval('this')
(0||eval)('this')
相当于eval('this')
所以 (1, eval) 或 (0 || eval) 是一个产生eval的表达式
像:
var x = 2;
console.log( (10000, x) ); // will print 2 because it yields the second variable
console.log( (x, 10000) ); // will print 10000 because it yields the second literal
console.log( (10000 || x) ); // will print 10000 because it comes first in an OR
// expression
这里唯一要注意的是,从表达式返回的对象始终是具有最大全局范围的对象。
检查该代码:
x = 1;
function Outer() {
var x = 2;
console.log((1, eval)('x')); //Will print 1
console.log(eval('x')); //Will print 2
function Inner() {
var x = 3;
console.log((1, eval)('x')); //Will print 1
console.log(eval('x')); //Will print 3
}
Inner();
}
Outer();