【问题标题】:How to "instanceof" a primitive string (string literal) in JavaScript [duplicate]如何在 JavaScript 中“实例化”原始字符串(字符串文字)[重复]
【发布时间】:2013-05-23 10:11:08
【问题描述】:

在 JavaScript 中,我可以通过以下方式声明一个字符串;

var a = "Hello World";
var b = new String("Hello World");

但 a 不是 String 的实例...

console.log(a instanceof String); //false;
console.log(b instanceof String); //true;

那么你如何找到类型或“instanceof”一个字符串文字?

是否可以强制 JavaScript 为每个字符串文字创建 new String()

【问题讨论】:

  • 回答实际问题,如果您真的喜欢使用instanceof(像我一样,讨厌typeof == 垃圾),您可以在检查对象时轻松地将它们强制转换为对象。在你的代码Object.defineProperty(Object.prototype, '_object', {get:function() { return this; }}); 中敲击这个,瞧,'string'._object instanceof String 返回true!如果你愿意,你可以避免原型和制作函数,但这会产生最优雅的 if 语句
  • @Hashbrown 这似乎不适用于严格模式。使用严格模式时还有其他方法可以使用类似的东西吗?

标签: javascript string instanceof string-literals


【解决方案1】:

改用typeof 并比较结果字符串。详情请见docs

【讨论】:

  • 感谢您的文档链接;但instanceof 也同样贴切:“instanceof 运算符测试对象的原型链中是否存在 constructor.prototype。”
【解决方案2】:

使用typeof "foo" === "string" 而不是instanceof.

【讨论】:

  • 对不起,你能解释一下原因吗?
  • @NinjaCoding 基本上您可以查看问题stackoverflow.com/questions/203739/… 开头提供的链接。你会找到更详细的解释。但本质上String 对象不是原语,就是这样。欢迎来到 js =)
  • 好吧,如果它实际上是 String ((function() { return typeof this; }).call('foo'): object), this'll work for both,那将无法正常工作
  • @NinjaCoding 因为这回答了第一个问题“那么你如何找到字符串文字的类型或“instanceof”?”
【解决方案3】:

不需要写new String() 来创建一个新的字符串。当我们编写var x = 'test'; 语句时,它会将x 创建为原始数据类型的字符串。我们无法将自定义属性附加到这个 x,就像我们对对象字面量所做的那样。 IE。 x.custom = 'abc'; x.custom 将给出未定义的值。因此,根据我们的需要,我们需要创建对象。 new String() 将创建一个带有 typeof() 对象而不是字符串的对象。我们可以为这个对象添加自定义属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-13
    • 2011-03-08
    • 2019-10-21
    • 1970-01-01
    • 2018-06-17
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多