我想检查一个变量是否存在,并且它的长度大于单个if语句中的特定数字。通过这样做我可以达到预期的效果:
if(v){
if(v.length>3)
//do thing
}
但如果我试着这样做:
if(v.length>3)
// do thing
我没有声明v时出错。同样,如果我尝试这样做:
if(v&&v.length>3)
我发现了。如何最可读地达到预期效果?
答案 0 :(得分:3)
最终答案取决于您希望解决方案的通用程度。虽然.length
是查找名为" length"的对象属性的简写表示法,但它必须应用于对象值。但typeof
运算符返回"函数"对于一个函数对象," object" for null
- 这不是对象数据类型,如果您尝试在其上查找属性,则会崩溃。哦,原始字符串值提升为具有length属性的String对象。
因此,通用解决方案看起来像
if(v && typeof v == "object" || typeof v == "function" || typeof v == "string" && v.length > 3)
{ // do stuff
}
其中v
的真实性被排除在v
之后,其值为null
。 但是注意到如果你可以排除函数对象(它们具有length
属性给出它们期望的参数数量)和字符串值,你可以将其缩短为
if(v && typeof v == "object" && v.length > 3)
请注意,如果length属性不存在,则返回值undefined
,undefined > 3
为false。
if(v)
如果从未定义过v
,可能会在严格模式下失败。这可能是使用在v
语句后执行的let
或const
语句定义if
的结果。首先执行let或const语句,或者在测试代码范围内使用v
语句声明var
。