1

抽象オブジェクトまたはオブジェクト リテラルではないようです。

次の値を使用して、アンダースコアから isObject()をテストしました。

var falsy = [
        false,
        '', "",
        0, -0,
        undefined, null,
        NaN
    ],
    // 6 truthy
    truthy = [
        true,
        'hello',
        -1, 1,
        Infinity,
        /test/
    ],
    // 3 lengthy
    lengthy = [
        function () {
            return undefined;
        },
        "string",
        [0]
    ],
    // 8 globals
    globals = [
        new String(),
        new Number(),
        new Boolean(),
        new Array(),
        new Object(),
        new Function(),
        new Date(),
        new RegExp()
    ],
    all = falsy.concat(truthy, lengthy, globals),

全部使いました。

これは、コンソールから返されたものです。

ここに画像の説明を入力

私が最も奇妙に感じたのは、文字列が明らかに基本/プリミティブ型ではなく、プロパティを保持できると考えられていたオブジェクトとして検出されなかったことです。

これは の薄っぺらな実装のようですisObject()

もし実際にこれがやっているとしたら?

4

1 に答える 1

0

実際にはtrueforObjectsfalsefor を返すだけですprimitives

Javascript には5 つのプリミティブがあります。

undefined, null, boolean, string and number

ただし、言語には、これらのプリミティブの一部 (文字列、数値など) のオブジェクト バージョンもあります。プリミティブ"foo"ですnew String("bar")が、オブジェクトです。

プリミティブとオブジェクトの違いは、多くの場合、JavaScript が強制を使用してプリミティブをオブジェクトに自動的に変換し、必要に応じてオブジェクトをプリミティブに変換するという事実によって隠されています。

于 2013-11-06T18:13:40.920 に答える