hereというテスト自体に回答がありますが、なぜ答えが正しいのかわかりません。その答えは正しいです。JavaScriptの反射テストを理解するのに問題がある
私に迷惑を与えているtestの一部である:上記のリンク先の質問で述べたように
var keys = [];
var fruits = ['apple', 'orange'];
for(propertyName in fruits) {
keys.push(propertyName);
}
ok(keys.equalTo(['__', '__', '__']), 'what are the properties of the array?');
(明らかに)正しい答えは、私は答えを挿入しようとした
ok(keys.equalTo(['0', '1', 'fruits.prototype'), 'what are the properties of the array?');
です - 構文エラーを修正 - 私のテストはまだ失敗します。
test("property enumeration", function() {
var keys = [];
var values = [];
var person = {name: 'Amory Blaine', age: 102, unemployed: true};
for(propertyName in person) {
keys.push(propertyName);
values.push(person[propertyName]);
}
ok(keys.equalTo(['name','age','unemployed']), 'what are the property names of the object?');
ok(values.equalTo(['Amory Blaine',102,true]), 'what are the property values of the object?');
});
これら二つの試験の間、私が見ることができる唯一の違いは、第二が使用されていることである。別のテストはほぼ同一であり、答えは私はそれがあることを期待するものである同一のテストファイルで
、配列ではなくオブジェクトです。
最初のテストのコードを単体テストフレームワークの外で実行し、キーの値を出力しました。これは["0","1"]
として表示されていました。この隠された第3の値はどこにあり、どのように私はそれにアクセスできますか?
- なぜ他の質問から答えは私のために働いていません。
だから、私は私が最終的に二つの質問を持っていると思いますか?
- 最初のテストと2番目のテストの違いは何ですか?
しかし、['hasOwnProperty'](https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Object/HasOwnProperty)をミックスに投げると、プロトタイプの問題を回避することができます。 –
@muistooshort:あなたの配列に他のプロパティを追加しても、まだ問題があります: 'a = []; a.alive = false; '。通常の 'for'ループを使うか、適切な高次関数(' forEach'、 'map'、' filter'、 'reduce'など)を使うのが最良のアプローチです。 –
私はあなたに同意していません。配列の 'for ... in'を使うのはあまり意味がありません。ほとんどの場合、' hasOwnProperty'チェックをほとんど使わずに 'for ... in'を使うことが重要ですfor ... in'を使うべきかどうかは間違いです。 –