我用空方法
a
定义对象b()
。该方法没有参数并且什么也不做!
请问有人告诉我,为什么当我调用
a.b()
并传递JS代码作为参数时,它会执行代码吗?
var a = {
b() {}
}
a.b('' - alert(1) - '');
它就像一个接收器,例如 eval、setInterval、setTimeout 并给出 JS 代码并执行它!
也许您的误解是由于语法造成的。
如果您考虑要传递给
a.b()
的内容并仅将其放入控制台,您将看到:
> ''-alert(1)-''
NaN
因为你在这里做一些“数学”:一个空字符串
''
减去函数调用的返回值alert(1)
(返回undefined
),然后减去另一个空字符串。
如果你对 plus 做了同样的事情,javascript 会将所有内容连接到一个字符串中:
> ''+alert(1)+''
"undefined"
所以基本上,您的代码会在任何内容传递给函数之前执行
a.b
。如果您不希望发生这种情况,则必须通过以下方式之一正确引用对 alert(1)
的调用:
'alert(1)'
"alert(1)" // but not ''alert(1)''
`alert(1)`