使用undefined使用和不使用typeof()

时间:2014-01-17 14:34:25

标签: javascript

为什么这些行会产生不同的结果?

if (EventSource !== undefined) { // error

if (typeof(EventSource) !== 'undefined') { // no error

4 个答案:

答案 0 :(得分:2)

因为未声明EventSource,并且它被视为ReferenceError以请求未声明变量的值。

另一方面,typeof运算符能够将标识符作为操作数而不获取其值,从而避免错误。


如果这是一个局部变量,你应该注意ReferenceError,并先定义它。

如果这是全局的,并且无法事先知道 ,则可以将其作为window的属性进行检查:

if ("EventSource" in window) {

if (window.EventSource !== undefined) {

答案 1 :(得分:1)

您看到的错误, ReferenceError:未定义EventSource 表示JS引擎不知道谁是EventSource。以前从来没有听过它,它应该读一些东西,但它不知道是什么。 typeof运算符受到保护而不受该错误的影响,并返回'undefined'而不是抛出错误,就像它对尚未初始化的变量一样。

答案 2 :(得分:0)

声明没有值的变量是undefined

未尝试的变量在您尝试使用时会引发错误,但在使用typeof时,您可以避免这种情况,因为检查未声明的变量会返回类型'undefined'。 这样做是因为typeof是一个总是返回一个字符串的运算符(不是函数),即使你传递了一个之前没有声明的东西。

答案 3 :(得分:0)

来自ECMA-262标准草案:

8.7.1 GetValue(V):[...]如果是IsUnresolvableReference(V),则抛出 ReferenceError 异常。 [...]

11.4.3运算符类型:[...]如果Type(val)为Reference,则[...]如果IsUnresolvableReference(val)为true,则返回“undefined”。 [...]

简而言之,它们是遵循不同规则的不同操作。