2016-08-05 8 views
0

後でループの長さプロパティに基づいてループできるオブジェクトの配列を定義しようとしています。 Internet Explorerでは、期待どおり動作しますが、Chromeでは動作しません。以下のオブジェクトの配列を定義するコードのスニペットれる:、それは私がスタックに見てきた実施例に基づいて31 Internet ExplorerでChromeのJavascriptがInternet Explorerと同じ配列長を返さない

var status = 
[ 
    { 
     name: 'Open', 
     target: 
     [ 
      { 
       systemgenerated: 'false', 
       internalonly: 'true', 
       name: 'Closed' 
      }, 
      { 
       systemgenerated: 'true', 
       internalonly: 'true', 
       name: 'Done' 
      } 
     ] 
    }, 
    { 
     name: 'Pending', 
     target: 
     [ 
      { 
       systemgenerated: 'false', 
       internalonly: 'true', 
       name: 'Closed' 
      }, 
      { 
       systemgenerated: 'false', 
       internalonly: 'true', 
       name: 'Open' 
      } 
     ] 
    } 
]; 

status.length戻りクロム2.返し、IオブジェクトをChromeの配列のように動作させるためにオブジェクトを定義するいくつかの異なる方法を試しましたが、進歩はありませんでした。 Chromeでこれを定義する方法はありますか?これは配列が動作すると思われるように動作しますか?

ありがとうございます!

+1

クロム(https://jsfiddle.net/vvmfeqd8/)も2' '返し]。何か他のことが起こっているに違いありません。 –

+0

奇妙なことに、同じコードのChromeで問題を再現できますが、クロムで31個、IEで2個です - http://codepen.io/nagasai/pen/yJRRgd –

+0

@NagaSaiAこれはjsfiddleがコードをウィンドウの内側にラップするためですデフォルトでは.onloadですが、codepenは、関数の内部ではなく、ボディの最後に置くだけです。コードが意味する変数はウィンドウオブジェクトになります。そこからcdriniの答えを見て、次に何が起こるかを見ることができます。P –

答えて

2

非常に奇妙です!明らかにstatusはHTML5の予約語で、ステータスバーのテキストを変更します(したがって、文字列でなければなりません)。

var status = [];は、機能に含まれていない場合はwindow.statusを上書きします。この場合、クロムは文字列に変換します。そのため、エラーが発生します。

変数名を変更するか、関数内のすべてをラップして分離スコープを作成します。

var status = [ {}, {} ]; 
 
console.log(status);  // "[object Object],[object Object]" in Chrome 
 
console.log(status.length); // 31 in Chrome

(function() { 
 
    var status = [ {}, {} ]; 
 
    console.log(status);  // the array 
 
    console.log(status.length); // 2 
 
})();

+0

[仕様に従って](https://www.w3.org/TR/html5/browsers .html#dom-window-status)、クロムが右に表示されているようです:「歴史的な理由から、Windowオブジェクトのステータス属性は、最後に**文字列**を返さなければなりません。 " – cdrini

+0

どうもありがとう!私は何が間違っていたのか把握しようとしていた。 – Alan

関連する問題