这对我有用:
if (typeof myVar === 'string' || myVar instanceof String)
// it's a string
else
// it's something else
您可以使用typeof
运算符:
var booleanValue = true;
var numericalValue = 354;
var stringValue = "This is a String";
var stringObject = new String( "This is a String Object" );
alert(typeof booleanValue) // displays "boolean"
alert(typeof numericalValue) // displays "number"
alert(typeof stringValue) // displays "string"
alert(typeof stringObject) // displays "object"
此网页的示例。 (虽然稍微修改了例子)。
在使用new String()
创建的字符串的情况下,这将无法正常工作,但这很少用于[1] [2] 。如果您愿意,请参阅其他答案,了解如何处理这些问题。
由于 580 多人投票给出了不正确的答案,800 多人投票赞成了一个有效但霰弹枪式的答案,我认为以一种每个人都能理解的简单形式重新回答我的答案是值得的。
function isString(x) {
return Object.prototype.toString.call(x) === "[object String]"
}
或者,内联(我有一个 UltiSnip 设置):
Object.prototype.toString.call(myVar) === "[object String]"
仅供参考,Pablo Santa Cruz 的答案是错误的,因为typeof new String("string")
是object
DRAX 的答案是准确和实用的,应该是正确答案(因为 Pablo Santa Cruz 绝对是错误的,我不会反对普遍的投票。)
但是,这个答案也绝对正确,实际上是最好的答案(可能除了建议使用lodash / underscore )。 免责声明:我为 lodash 4 代码库做出了贡献。
我的原始答案(显然直接飞过很多脑袋)如下:
我从 underscore.js 转码了这个:
['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'].forEach(
function(name) {
window['is' + name] = function(obj) {
return toString.call(obj) == '[object ' + name + ']';
};
});
那将定义 isString,isNumber 等。
在 Node.js 中,这可以作为一个模块实现:
module.exports = [
'Arguments',
'Function',
'String',
'Number',
'Date',
'RegExp'
].reduce( (obj, name) => {
obj[ 'is' + name ] = x => toString.call(x) == '[object ' + name + ']';
return obj;
}, {});