5

据我了解,检查未定义变量的首选方法是typeof a === 'undefined'.

但为什么会更好typeof a == 'undefined'呢?哪些地方会失败?

4

4 回答 4

10

在这种情况下,sincetypeof总是会给你一个字符串:它没有更好(也没有更糟)。它没有实际的区别。

一般来说, using是首选===因为它会强制您明确说明您的类型,并避免在 JavaScript 的类型解析规则不直观时获得您不期望的结果。

于 2013-04-22T11:16:11.900 回答
5

==和之间的区别在于===执行==转换。因此,例如 1 将是==to'1'但不是===to '1'。当您检查时首选该方法的原因undefined是因为在 JavaScript 中存在已知的比较陷阱。

最常见的:

''        ==   '0'           //false
0         ==   ''            //true
0         ==   '0'           //true
false     ==   'false'       //false
false     ==   '0'           //true
false     ==   undefined     //false
false     ==   null          //false
null      ==   undefined     //true
" \t\r\n" ==   0             //true

因此,===您可以避免null == undefined问题,这可能会导致难以发现的错误。这就是为什么你应该使用==而不是===. 因为===没有在后台执行任何转换,所以它也是一个更快的操作。

在这种特定情况下,它不会产生影响。无论你使用typeof a == 'undefined'还是typeof a === 'undefined'输出都是一样的,没有错误。那是因为typeof返回一个字符串。但是,操作会更快,因此您的性能提升可以忽略不计。

于 2013-04-22T11:21:01.737 回答
3

因为typeof只会返回字符串,所以用 . 比较两个字符串是安全的==

于 2013-04-22T11:16:44.437 回答
1

==和之间有很大的区别===在这里查看)

但是,由于 typeof总是返回字符串,所以可以使用它。

于 2013-04-22T11:18:34.397 回答