阅读:1915回复:2
[已解决]关于js的constructor,有一点百思不得骑姐
同样的代码,通过<script>读取的,和web控制台执行的结果为什么不一样呢,这和js环境有关系吗?
图片:1.png 测试页面: 很抱歉没有界面,你需要用web控制台或者firebug直接执行命令 <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>constructor bug</title> </head> <body> <script type="text/javascript"> function IsArray(val){ return (val.constructor === Array); } function IsMyArray(){ return ([1,2,3].constructor === Array); } </script> </body> </html> |
|
|
1楼#
发布于:2013-03-21 16:39
Re: 关于js的constructor,有一点百思不得骑姐
taoww:实际上是firefox的js引擎问题。数组参数在传递时被用Proxy包装了一下。所以constructor当然就不会是Array了 原来是这样,学习了,非常感谢! 我是用firebug调试的所以看不出端倪呀 图片:1.png 我是给自己写的工具网页,没有兼容旧浏览器和其他浏览器的需求,所以就用isArray就完美啦 |
|
|
2楼#
发布于:2013-03-21 16:39
Re: 关于js的constructor,有一点百思不得骑姐
实际上是firefox的js引擎问题。数组参数在传递时被用Proxy包装了一下。所以constructor当然就不会是Array了图片:捕获.PNG 这种包装好象只针对页面上的脚本,web控制台的似乎没有管 Proxy的文档: https://developer.mozilla.org/zh-CN/doc ... 7.90.86API 要判断数组呢,有条件的话最好用ES5的Array.isArray方法,如果要兼容旧浏览器,也有一个比较通用的方法 function isArray(obj) { return Object.prototype.toString.call(obj) === '[object Array]'; } |
|