在下面的代码中,如果 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
计算结果为 true
。彻底困惑了。
这是在 Nodejs 12 中运行的纯 JavaScript,尽管我怀疑这有什么区别......
最佳答案
Javascript 有两种主要方式来创建字符串(作为文字):
const foo = "hi";
并通过字符串构造函数
const bar = new String("hi");
这些不是同一件事。第二个会慢一些,并且有细微的行为差异。
所以 instanceof String
不起作用的原因是你的文字字符串不是此类的实例。
通常您会希望避免使用new String()
。
关于javascript - typeof string 为什么不是 String 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59980307/