我通常使用以下测试来测试是否定义了JavaScript变量:
if (typeof a == 'undefined')
a = 'default value'
但是,我看到很多人建议使用以下代码更安全:
if (typeof a === 'undefined')
a = 'default value'
我知道==
和===
运营商之间存在差异,但我无法理解为什么typeof a == 'undefined'
可能不安全。
请问第一个代码示例不安全或可能导致问题的情况?另外,在第一个语法中使用后一种语法有什么好处?
答案 0 :(得分:6)
我无法理解为什么
typeof a == 'undefined'
可能不安全
这不是不安全的,完全没问题。 typeof
运算符为guaranteed to return a string,因此您将始终比较两个字符串。 abstract equality algorithm的行为与strict equality类似。
答案 1 :(得分:4)
由于typeof a
始终是一个字符串,因此==
和===
将始终产生相同的结果,即它们之间没有显着差异(唯一的一个是那个更长)另一个;))。
警告,个人意见:我发现==
运算符非常可怕。怎么会有人认为有两个不同的比较运算符是个好主意?没有其他语言可以使两个不同类型的对象相等。疯了吧。因此,人们倾向于一直使用===
,因为这是一种很好的做法。所以我想在这种情况下,这只是一种习惯......一个好习惯。