今天使用百度分享的一段代码,看到有这么一句(可能是机器生成的):
with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)]
奇怪的地方是:
with(..)0[];
这段,经测试:
with({a : 1, b : 2})0[console.log(a)];
在控制台输出:
1
undefined
如果这样:
with({a : 1, b : 2})[console.log(a)];
在控制台输出:
1
[Object { __exposedProps__={...}, toString=function()}]
期待有朋友帮忙解释:
with()0[]
这段代码应该如何理解的??
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
结论,如果这代码是人写的,那他一定需要治疗。
with(...)0[...]
等价于:其中
0[...]
是一个看起来很诡异但是合法的 javascript 代码,无非就是调用 0 这个对象的方法。比如0["toString"]
返回的就是一个函数,等同于0.toString
。所以总的来说,这句话就是为了执行方括号里面的代码,为了少写一个
document
节省几个 bytes 而发明的变态写法,应该是百度内部用的脚本混淆器干的好事。不过很奇怪,其实
0[...]
根本就是多余的啊~直接写with{...}
明明还可以多省一个字节,为啥百度不用呢。对于题主贴出来的这行代码,连{...}
都可以直接省了。想不通。