代码之家  ›  专栏  ›  技术社区  ›  markvgti

为什么typeof string不是string的instanceof?[复制]

  •  0
  • markvgti  · 技术社区  · 5 年前

    在下面的代码中,如果 typeof 属于 something arbit string ,为什么不呢 instanceof String true :

    const roles = ['something', 'arbit'];
    console.log("Array.isArray(roles):", Array.isArray(roles));
    console.log("roles instanceof Array:", (roles instanceof Array));
    roles.forEach(element => {
        console.log(`[${element}]`);
        console.log(`\ttypeof(${element}):`, typeof(element));
        console.log(`\t${element} instanceof String:`, (element instanceof String));
    });
    

    其输出为:

    Array.isArray(roles): true
    roles instanceof Array: true
    [something]
            typeof(something): string
            something instanceof String: false
    [arbit]
            typeof(arbit): string
            arbit instanceof String: false
    

    roles instanceof Array 计算结果为 是的 . 完全糊涂了。

    这是在nodejs12中运行的普通JavaScript,不过我怀疑这会有什么不同。。。

    1 回复  |  直到 5 年前
        1
  •  2
  •   Evert    5 年前

    Javascript有两种生成字符串的主要方法,即文本:

    const foo = "hi";
    

    通过字符串构造函数

    const bar = new String("hi");
    

    这不是一回事。第二个会慢一点,并且有细微的行为差异。

    instanceof String 不起作用,是因为你的文字字符串不是这个类的实例。

    一般来说,你应该避免 new String() .

        2
  •  2
  •   Andrey Lakhaev    5 年前