检查javascript中的字符串值

检查javascript中的字符串值,javascript,Javascript,在JS中,我们有两种方法来检查给定值是否为字符串: function isString1(value) { return typeof value === 'string'; } function isString2(value) { return Object.prototype.toString.call(value) === "[object String]"; } 哪一种是高效实施?为什么 谢谢 > P>这取决于您是否想考虑使用字符串< /代码>构造函数创建的字符串,例如

在JS中,我们有两种方法来检查给定值是否为字符串:

function isString1(value) {
  return typeof value === 'string';
}


function isString2(value) {
  return Object.prototype.toString.call(value) === "[object String]";
}
哪一种是高效实施?为什么


谢谢

> P>这取决于您是否想考虑使用<代码>字符串< /代码>构造函数创建的字符串,例如

new String("hello");
第一个方法将为纯字符串返回
true
,为构造字符串返回
false

typeof "hello" === "string" // true
typeof new String("hello") === "string" // false
而第二种方法在两种情况下都将返回
true

Object.prototype.toString.call("hello") === "[object String]" // true
Object.prototype.toString.call(new String("hello")) === "[object String]" // true
使用构造字符串并不常见,因此对于大多数实际用途,使用更简单的方法是可以的


还值得注意的是,如果有人修改
Object.prototype.toString
(顺便说一句,这是一件坏事),第二种方法的行为可能会改变。如果有人这样做,例如:

Object.prototype.toString = function(){ return "This is evil"; }
然后


typeof
操作符被烘焙到语法中,不受这种可能性的影响。

如果更好,你会更优雅,肯定是第一个。我会使用
If(typeof myVar=='string'| myVar instanceof string)
第一个是“better”。。。它使用更少的字节…:)@j08691更好我的意思是更健壮、内存和时间效率更高。这就是为什么Lo dash使用这两种方式@彼得解释得很好:)
Object.prototype.toString.call("hello") === "This is evil"