使用 length
属性代替 ==""
进行空字符串验证是否安全?
它对所有 bool 运算符都有效吗?
这可能是一个非常简单的问题,我很确定答案是肯定的,但我最近经常使用它,我有点担心任何可能的陷阱。
为了完整起见,这是一个简单的示例
var valid = name.length && (foo.length||bar.length);
最佳答案
如果您确定变量中的某些内容可以具有属性(例如字符串),则使用 .length
始终是安全的。
但是,如果变量可能为 undefined
或 null
,则 .length
将无效,并且不会执行您想要的操作name === ""
会更安全。
许多 Javascript 开发人员只是这样做:
if (name) {
//
}
这会检查 name
中的任何真值。因此,如果 name
为 undefined
、null
甚至是空字符串 ,则
,并且在某些情况下,可以比您正在做的事情更好地保护您的代码。if
不会得到满足""
或者,在您的示例中,您也许可以这样做:
var valid = name && (foo || bar);
这将要求 name
和 foo
或 bar
为真。这不会防止 name
、foo
或 bar
成为没有 .length
属性的某种数据类型,例如您的原始代码会,但它可以更好地防止这些变量中的任何一个 undefined
或 null
。
请记住,空字符串 ""
是一个错误值,因此您可以在 bool 比较中利用它来发挥优势。
关于javascript - 使用 length 而不是 = =""安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28425894/