使用两个等号检查 jQuery 中的字符串是否为 null 是不好的做法吗?
Is checking for null against a string in jQuery using two equals signs bad practice?
JSLint 标记此:
if ($(stringToClean).html() == null)
...带有警告“比较 null、0、true、false 或允许隐式类型转换的空字符串(使用 === 或 !==) “
我的理解是,如果我有“===”,它只会检查 null 本身,但如果我有(像我一样)“==”,它也会检查 "nothing" 比如一个空字符串。
如果我的假设是正确的,那么在很多这样的情况下“==”实际上可能是可取的,不是吗?
==
运算符检查值,而运算符 ===
检查值 和 类型。
例如:
5 == "5" -> true
5 === "5" -> false
要理解null
,还需要考虑undefined
。
typeof(null) -> object
typeof(undefined) -> undefined
但是
null == undefined -> true
在您的示例中,让我们假设您尝试在没有任何匹配项的选择器上调用 html()
方法:
$('#nonExistentDiv').html()
结果是undefined
。这意味着:
$('#nonExistentDiv').html() === null -> false
$('#nonExistentDiv').html() == null -> true
如果您尝试使用现有但为空的 DIV 元素,您会得到一个空字符串:
$('#emptyDiv').html() == null -> false
$('#emptyDiv').html() == 0 -> true (intresting!)
$('#emptyDiv').html() === "" -> true
所以:
- 如果你想检查一个字符串是否为空,你应该使用
if(myString == null)
。
- 如果你想检查一个字符串是否为空
if(myString === "")
- 如果你想检查一个字符串是否真的 "contains something" 你可以检查
if(myString)
JSLint 标记此:
if ($(stringToClean).html() == null)
...带有警告“比较 null、0、true、false 或允许隐式类型转换的空字符串(使用 === 或 !==) “
我的理解是,如果我有“===”,它只会检查 null 本身,但如果我有(像我一样)“==”,它也会检查 "nothing" 比如一个空字符串。
如果我的假设是正确的,那么在很多这样的情况下“==”实际上可能是可取的,不是吗?
==
运算符检查值,而运算符 ===
检查值 和 类型。
例如:
5 == "5" -> true
5 === "5" -> false
要理解null
,还需要考虑undefined
。
typeof(null) -> object
typeof(undefined) -> undefined
但是
null == undefined -> true
在您的示例中,让我们假设您尝试在没有任何匹配项的选择器上调用 html()
方法:
$('#nonExistentDiv').html()
结果是undefined
。这意味着:
$('#nonExistentDiv').html() === null -> false
$('#nonExistentDiv').html() == null -> true
如果您尝试使用现有但为空的 DIV 元素,您会得到一个空字符串:
$('#emptyDiv').html() == null -> false
$('#emptyDiv').html() == 0 -> true (intresting!)
$('#emptyDiv').html() === "" -> true
所以:
- 如果你想检查一个字符串是否为空,你应该使用
if(myString == null)
。 - 如果你想检查一个字符串是否为空
if(myString === "")
- 如果你想检查一个字符串是否真的 "contains something" 你可以检查
if(myString)