如何确定变量是字符串还是 JavaScript 中的其他内容?
检查变量是否是 JavaScript 中的字符串
这对我有用:
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"
来自此网页的示例。(尽管示例略有修改)。
在用 创build 的字符串的情况下,这不会按预期工作new String()
,但很少使用,建议不要使用[1][2]。如果您愿意,请参阅其他答案以了解如何处理这些问题。
- Google JavaScript Style Guide说永远不要使用原始对象包装器。
- Douglas Crockford建议弃用原始对象包装器。
由于 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来实现:
module.exports = [
'Arguments',
'Function',
'String',
'Number',
'Date',
'RegExp'
].reduce( (obj, name) => {
obj[ 'is' + name ] = x => toString.call(x) == '[object ' + name + ']';
return obj;
}, {});
[编辑]:也Object.prototype.toString.call(x)
用于描述函数和异步函数:
const fn1 = () => new Promise((resolve, reject) => setTimeout(() => resolve({}), 1000))
const fn2 = async () => ({})
console.log('fn1', Object.prototype.toString.call(fn1))
console.log('fn2', Object.prototype.toString.call(fn2))
我建议使用jQuery或lodash/Underscore的内置函数。它们更易于使用且更易于阅读。
两个函数都将处理 DRAX 提到的情况……也就是说,它们都检查(A)变量是字符串文字还是(B)它是 String 对象的实例。在任何一种情况下,这些函数都会正确地将该值标识为字符串。
lodash / Underscore.js
if(_.isString(myVar))
//it's a string
else
//it's something else
jQuery
if($.type(myVar) === "string")
//it's a string
else
//it's something else
有关更多详细信息,请参阅_.isString() 的 lodash 文档。
有关更多详细信息,请参阅$.type() 的 jQuery 文档。
function isString (obj) {
return (Object.prototype.toString.call(obj) === '[object String]');
}
我在这里看到:
http://perfectkills.com/instanceof-thinked-harmful-or-how-to-write-a-robust-isarray/