javascript - 这个代码为什么会弹出警告框?

查看:112
本文介绍了javascript - 这个代码为什么会弹出警告框?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

-{toString:[].join,length:1,0:'javascript:alert(123)',valueOf:location}

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

解决方案

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

接着说下原理吧。

你这个和下面这个等价:

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

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

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

这篇关于javascript - 这个代码为什么会弹出警告框?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆