javascript - 这个代码为什么会弹出警告框?
PHPz
PHPz 2017-04-11 13:03:02
[JavaScript讨论组]
-{toString:[].join,length:1,0:'javascript:alert(123)',valueOf:location}

(c) http://www.freebuf.com/articl...

PHPz
PHPz

学习是最好的投资!

全部回复(1)
PHP中文网

你的文章写的很清楚了,多理解理解吧。另外这是老IE的BUG,其他浏览器没这个BUG,不用太纠结。

接着说下原理吧。

你这个和下面这个等价:

首先你要理解,+和-会把后面的表达式转换为数字,如果后面是一个对象,则调用对象的valueOf方法,如果valueOf方法的值或者返回值不是一个数字,则调用toString方法作为返回值(如果这个返回值是数字或者可以转成数字的字符串,结果就是数字,否则是NaN)。一般的浏览器到这也就结束了。

如文章里面所讲,在含有缺陷的IE里面,得到这个返回值后,他还会去把这个返回值传给valueOf的内容去调用,这里valueOf的内容就是location,所以实际的调用就和上图一样。而这种调用居然能执行,确实是BUG,不过这是IE,看开点就好。

题外话:好久没打开过这玩意儿了。。。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号