使用长度而不是==“是安全的吗&”;

Is it safe to use length instead of ==""?

本文关键字:是安全的吗 安全      更新时间:2023-09-26

使用length属性而不是==""进行空字符串验证是否安全?

它对所有布尔运算符都有效吗?

这可能是一个非常简单的问题,我很确定答案是肯定的,但我最近经常使用它,我有点担心任何可能的陷阱。

为了完整起见,这里有一个简单的示例

var valid = name.length && (foo.length||bar.length);

如果您确信变量中有可以具有属性(如字符串)的内容,那么使用.length总是安全的。

但是,如果变量可能是undefinednull,那么.length将无效,并且不会执行您想要的操作,name === ""将更安全。

许多Javascript开发人员只需执行以下操作:

if (name) {
    // 
}

这将检查name中的任何真实值。因此,如果nameundefinednull,甚至是空字符串"",并且在某些情况下,对代码的保护比您所做的要多一点,那么if将不会得到满足。


或者,在你的例子中,你也许可以这样做:

var valid = name && (foo || bar);

这将要求namefoobar是真实的。这不会像原始代码那样防止namefoobar成为没有.length属性的某种类型的数据,但它可以更好地防止这些变量中的任何一个成为undefinednull

请记住,空字符串""是一个伪值,因此您可以在布尔比较中使用它。