4

私のコードには、次のいずれかである変数があります。

  • 数、
  • ブール値、
  • 文字列、
  • 正規表現、
  • デート、
  • 0 個以上の「独自の」プロパティを持つオブジェクト。

その変数が「基本オブジェクト」かどうかを確認したい。「基本オブジェクト」を次のいずれかとして定義します。

  • 数、
  • ブール値、
  • 文字列、
  • 正規表現、
  • デート、

つまり、開発者によって定義された「独自の」プロパティを持たないオブジェクトです。

条件を使用しましたObject.getOwnPropertyNames(obj).length === 0が、文字列 (上記の定義によれば、「基本オブジェクト」 ) には、各文字と文字列の長さに対して「独自の」プロパティがあります。たとえば、Object.getOwnPropertyNames("test") Chrome (Ubuntu 15.10 で 46.0.2490.86 (64 ビット)) DevTools コンソールと Ubuntu 15.10 で Firefox 42 の両方で実行すると、( ["0", "1", "2", "3", "length"]Chrome で) と[ "length", "0", "1", "2", "3" ](Firefox で) 印刷されます。

では、上で説明した用語のように、変数が「基本オブジェクト」であるかどうかを確認する最も読みやすい方法は何ですか? パフォーマンスには関心がありませんが、読みやすさとデバッグの容易さに関心があります。

どうもありがとうございました!:-)

アップデート:

この関数を使い始めましたが、変更なしで新しい型と互換性のある解決策を誰かが教えてくれることを願っています。

function isElementaryValue(x) {
    return typeof x === "number" ||
        typeof x === "boolean" ||
        typeof x === "string" ||
        x instanceof RegExp ||
        x instanceof Date;
}
4

1 に答える 1

2

これらの型には共通点があまりないため、そのためにはかなり特注の関数を作成する必要があります。

function isElementary (arg) {
  return arg === null
    || arg === undefined 
    || (typeof arg !== 'object' && typeof arg !== 'function') 
    || arg instanceof RegExp 
    || arg instanceof Date;
}
于 2015-11-26T13:26:15.803 に答える