究竟是什么isObject测试?

时间:2013-11-06 13:52:00

标签: javascript underscore.js

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

我使用以下值测试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),

我使用了所有。

这是我从控制台回来的。

enter image description here

我发现最奇怪的一个是字符串未被检测为对象,因为它显然不是基本/原始类型并且可以保存属性。

这似乎是isObject()的脆弱实现。

如果事实是这样做会怎么样?

1 个答案:

答案 0 :(得分:0)

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

Javascript有5 primitives

undefined, null, boolean, string and number

但是,该语言还具有某些这些原语的Object版本,例如String,Number。所以"foo"是原始的,但new String("bar")是一个对象。

基元和对象之间的区别通常被javascript使用强制自动将基元转换为对象并在必要时将对象转换为基元这一事实隐藏。