Javascript之旅——第八站:说说instanceof踩了一个坑

页面导航:首页 > 网络编程 > JavaScript > Javascript之旅——第八站:说说instanceof踩了一个坑

Javascript之旅——第八站:说说instanceof踩了一个坑

来源: 作者: 时间:2016-02-05 11:06 【

前些天写js遇到了一个instanceof的坑,我们的页面中有一个iframe,我在index页面中计算得到了一个array,然后需要传递到Flight页面这个嵌套的iframe中的一个函数(SearchFlight)中,作为防御性
 前些天写js遇到了一个instanceof的坑,我们的页面中有一个iframe,我在index页面中计算得到了一个array,然后需要传递到Flight页面
 
这个嵌套的iframe中的一个函数(SearchFlight)中,作为防御性,我需要在SearchFlight函数中进行参数检测,也就是判断过来的参数一
 
定是Array类型。
 
 
 
一:抛出问题
 
举个例子,下面有两个页面。
 
Index.页面
 
 
 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title></title>
 5 </head>
 6 <body>
 7 
 8     <iframe name="childframe" src="Flight.html"></iframe>
 9 
10     <script type="text/javascript">
11 
12         window.onload = function () {
13             //航班
14             var airplanes = ["MU", "CA", "CZ"];
15 
16             var result = window.frames[0].flight.SearchFlight(airplanes);
17         };
18     </script>
19 </body>
20 </html>
 
Flight.html页面
 
 
 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title></title>
 5 </head>
 6 <body>
 7     <script type="text/javascript">
 8 
 9         var flight = (function () {
10 
11             return {
12                 SearchFlight: function (arr) {
13                     var result = arr instanceof Array;
14                     alert(result);
15                 }
16             };
17         })();
18     </script>
19 </body>
20 </html>
 
 
很惊讶的发现instanceof居然不能判断出arr是一个数组,其实我们用肉眼可以看到,压根它就是一个数组,但是为什么instanceof却判断不出来呢?
 
我们知道instancof其实是一个js语法糖,我就修改成简单点的,判断arr.constructor是否指向Array,于是我把关键字改成如下形式,再来看看看效果。
 
 1         var flight = (function () {
 2 
 3             return {
 4                 SearchFlight: function (arr) {
 5                     //var result = arr instanceof Array;
 6 
 7                     var result = arr.constructor == Array;
 8 
 9                     alert(result);
10                 }
11             };
12         })();
Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<