4

新しいProxy オブジェクトを試してみると、プロキシが設定されるとキーが自動的に文字列に変換されることに驚きました。

var arr = ['a', 'b', 'c'];

arr = new Proxy(arr, {
  get: (original, key) => {
    alert(typeof key);
    return original[key];
  }
});

arr[1];  // expected an alert with 'number'; got 'string' instead

数値を渡しているので、それはtypeof keyになると思います。numberただし、何らかの形で内部で文字列に変換されProxy、実際に警告されるタイプはstring. 問題を示す小さな JSFiddle をここで見ることができます。arrプロキシを通過した後でも配列のままです。

では、文字列と数値を渡すこととどのように区別できますか? のように正規表現でき/\d+/.test(key)ますが、これらの状況を区別せず、ハックのように感じます。

arr['1'];
arr[1];
4

1 に答える 1

3

プロパティ キーには、文字列または記号のみを使用できます。数値など、別のものを使用している場合は、常に最初に文字列に変換されます。したがって、プロキシを使用する場合、次の 2 つの操作を区別できません。

arr['1'];
arr[1];

どちらも'1'、プロパティ キーとして Proxy get ハンドラーをトリガーします。


また、配列を使用しているという事実は、何も変更しません。プレーン オブジェクトで機能するのと同様に、配列 (特殊な種類のオブジェクト) でも同様に機能します。


仕様のオブジェクト タイプも参照してください。

于 2016-10-05T17:19:18.393 に答える