在javascript中检查字符串值

时间:2014-12-19 18:09:37

标签: javascript

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

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


function isString2(value) {
  return Object.prototype.toString.call(value) === "[object String]";
}

这是有效的实施,为什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

这取决于您是否要考虑使用String构造函数创建的字符串,例如

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"; }

然后

Object.prototype.toString.call("hello") === "This is evil"

typeof运算符已融入语法中,并且不易受此影响。