它似乎不是抽象对象或对象文字。

我用以下值测试了isObject() from underscore

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()的脆弱实现。

如果事实上这件事在做什么?

最佳答案

实际上,它只是为true返回Objects,为false返回primitives

JavaScript具有5 primitives

undefined, null, boolean, string and number


但是,该语言还具有其中一些原语的对象版本,例如字符串,数字。因此"foo"是原始元素,而new String("bar")是对象。

原始语和对象之间的差异通常被以下事实隐藏:JavaScript使用强制将原始语自动转换为对象,并在必要时将对象转换为原始语。

关于javascript - isObject测试到底是为了什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19813875/

10-10 21:43