如何检查变量是否设置&& .length> x在同一个()?

时间:2016-08-12 03:29:11

标签: javascript

我想检查一个变量是否存在,并且它的长度大于单个if语句中的特定数字。通过这样做我可以达到预期的效果:

if(v){
    if(v.length>3)
        //do thing
}

但如果我试着这样做:

if(v.length>3)
    // do thing

我没有声明v时出错。同样,如果我尝试这样做:

if(v&&v.length>3)
我发现了。如何最可读地达到预期效果?

1 个答案:

答案 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属性不存在,则返回值undefinedundefined > 3为false。

<小时/> 问题评论后更新:

    if(v)
如果从未定义过v

可能会在严格模式下失败。这可能是使用在v语句后执行的letconst语句定义if的结果。首先执行let或const语句,或者在测试代码范围内使用v语句声明var