如何确定变量是字符串还是JavaScript中的其他变量?
当前回答
我有一个愚蠢的技巧。但直截了当。
if(maybeAString.toUpperCase)
weHaveAString(maybeAString)
是的,这远非完美。但这很简单。
其他回答
以下方法将检查任何变量是否为字符串(包括不存在的变量)。
const is_string = value => {
try {
return typeof value() === 'string';
} catch (error) {
return false;
}
};
let example = 'Hello, world!';
console.log(is_string(() => example)); // true
console.log(is_string(() => variable_doesnt_exist)); // false
Typechecker助手:
function isFromType(variable, type){
if (typeof type == 'string') res = (typeof variable == type.toLowerCase())
else res = (variable.constructor == type)
return res
}
用法:
isFromType('cs', 'string') //true
isFromType('cs', String) //true
isFromType(['cs'], Array) //true
isFromType(['cs'], 'object') //false
此外,如果您希望它是递归的(像作为对象的数组),可以使用instanceof。
(['cs']对象实例//true)
这是对我有用的:
if (typeof myVar === 'string' || myVar instanceof String)
// it's a string
else
// it's something else
我建议使用jQuery或lodash/Undercore中的内置函数。它们更易于使用和阅读。
任何一个函数都将处理上述DRAX的情况。。。也就是说,它们都检查(A)变量是字符串文本还是(B)它是string对象的实例。在这两种情况下,这些函数都将值正确地标识为字符串。
lodash/Undercore.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文档。
您可以使用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]使用。如果您愿意,请查看其他答案以了解如何处理这些问题。
谷歌JavaScript风格指南说,永远不要使用原始对象包装器。Douglas Crockford建议弃用基本对象包装器。