|
阅读:2570回复: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,有一点百思不得骑姐
实际上是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]'; } |
|
|
2楼#
发布于:2013-03-21 16:39
Re: 关于js的constructor,有一点百思不得骑姐
taoww:实际上是firefox的js引擎问题。数组参数在传递时被用Proxy包装了一下。所以constructor当然就不会是Array了 原来是这样,学习了,非常感谢!我是用firebug调试的所以看不出端倪呀 图片:1.png ![]() 我是给自己写的工具网页,没有兼容旧浏览器和其他浏览器的需求,所以就用isArray就完美啦 |
|
|

原来是这样,学习了,非常感谢!