如何确定变量是字符串还是JavaScript中的其他变量?
当前回答
这是一个很好的例子,说明了为什么性能很重要:
如果做得不正确,对字符串进行测试这样简单的操作可能会很昂贵。
例如,如果我想写一个函数来测试某个东西是否是字符串,我可以用以下两种方法之一:
1) const isString=str=>(Object.pr原型.toString.call(str)=='[Object String]');
2) const isString=str=>((typeof str=='string')||(str instanceof string));
这两个都非常直接,那么什么可能会影响性能呢?一般来说,函数调用可能会很昂贵,特别是如果您不知道内部发生了什么。在第一个示例中,有一个对Object的toString方法的函数调用。在第二个示例中,没有函数调用,因为typeof和instanceof是运算符。运算符比函数调用快得多。
测试性能时,示例1比示例2慢79%!
参见测试:https://jsperf.com/isstringtype
其他回答
isString()使用可选链接和最新标准检查传递的参数是否为字符串:
const isString = (value) => {
return value?.constructor === String;
}
我喜欢使用这个简单的解决方案:
var myString = "test";
if(myString.constructor === String)
{
//It's a string
}
function isString (obj) {
return (Object.prototype.toString.call(obj) === '[object String]');
}
我在这里看到了:
http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/
编辑:当前的方法是typeof value==“string”。例如:
const str = 'hello';
if (typeof str === 'string') { ... }
自节点v4以来,以下内容已被弃用。
如果您在node.js环境中工作,那么只需在utils中使用内置函数isString即可。
const util = require('util');
if (util.isString(myVar)) {}
一个简单的解决方案是:
var x = "hello"
if(x === x.toString()){
// it's a string
}else{
// it isn't
}