Javascript 使用带有和不带有typof()的未定义
为什么这些线给出不同的结果Javascript 使用带有和不带有typof()的未定义,javascript,Javascript,为什么这些线给出不同的结果 if (EventSource !== undefined) { // error if (typeof(EventSource) !== 'undefined') { // no error 您看到的错误,ReferenceError:EventSource未定义意味着JS引擎不知道谁是EventSource。它以前从未听说过它,它应该在那里读到一些东西,但它不知道是什么。typeof运算符受该错误的保护,并返回'undefined',而不是抛出错误,就像它对尚
if (EventSource !== undefined) { // error
if (typeof(EventSource) !== 'undefined') { // no error
您看到的错误,ReferenceError:EventSource未定义意味着JS引擎不知道谁是
EventSource
。它以前从未听说过它,它应该在那里读到一些东西,但它不知道是什么。typeof
运算符受该错误的保护,并返回'undefined'
,而不是抛出错误,就像它对尚未初始化的变量所做的那样。您看到的错误,ReferenceError:EventSource未定义表示JS引擎不知道谁是EventSource
。它以前从未听说过它,它应该在那里读到一些东西,但它不知道是什么。typeof
运算符受该错误的保护,并返回'undefined'
,而不是抛出错误,就像它对尚未初始化的变量所做的那样。您看到的错误,ReferenceError:EventSource未定义表示JS引擎不知道谁是EventSource
。它以前从未听说过它,它应该在那里读到一些东西,但它不知道是什么。typeof
运算符受该错误的保护,并返回'undefined'
,而不是抛出错误,就像它对尚未初始化的变量所做的那样。您看到的错误,ReferenceError:EventSource未定义表示JS引擎不知道谁是EventSource
。它以前从未听说过它,它应该在那里读到一些东西,但它不知道是什么。typeof
运算符受此错误的保护,并返回'undefined'
,而不是抛出错误,就像它对尚未初始化的变量所做的那样。声明没有值的变量是undefined
未声明的变量在您尝试使用它时会抛出错误,但在使用typeof
时,您可以避免这种情况,因为检查未声明的变量会返回类型“未定义”
之所以这样做,是因为
typeof
是一个始终返回字符串的运算符(不是函数),即使您向它传递了以前未声明的内容。未声明值的变量是未定义的
未声明的变量在您尝试使用它时会抛出错误,但在使用typeof
时,您可以避免这种情况,因为检查未声明的变量会返回类型“未定义”
之所以这样做,是因为typeof
是一个始终返回字符串的运算符(不是函数),即使您向它传递了以前未声明的内容。未声明值的变量是未定义的
未声明的变量在您尝试使用它时会抛出错误,但在使用typeof
时,您可以避免这种情况,因为检查未声明的变量会返回类型“未定义”
之所以这样做,是因为typeof
是一个始终返回字符串的运算符(不是函数),即使您向它传递了以前未声明的内容。未声明值的变量是未定义的
未声明的变量在您尝试使用它时会抛出错误,但在使用typeof
时,您可以避免这种情况,因为检查未声明的变量会返回类型“未定义”
之所以这样做,是因为typeof
是一个运算符(不是函数),它总是返回一个字符串,即使您向它传递了以前未声明的内容。因为EventSource
未声明,请求未声明变量的值被视为引用错误
另一方面,typeof
运算符能够将标识符作为操作数,而不获取其值,从而避免了错误
如果这是一个局部变量,您应该注意ReferenceError,并首先定义它
如果这是全局的,并且事先无法知道它的存在,则可以将其作为窗口的属性检查:
if ("EventSource" in window) {
或
因为未声明EventSource
,请求未声明变量的值被视为引用错误
另一方面,typeof
运算符能够将标识符作为操作数,而不获取其值,从而避免了错误
如果这是一个局部变量,您应该注意ReferenceError,并首先定义它
如果这是全局的,并且事先无法知道它的存在,则可以将其作为窗口的属性检查:
if ("EventSource" in window) {
或
因为未声明EventSource
,请求未声明变量的值被视为引用错误
另一方面,typeof
运算符能够将标识符作为操作数,而不获取其值,从而避免了错误
如果这是一个局部变量,您应该注意ReferenceError,并首先定义它
如果这是全局的,并且事先无法知道它的存在,则可以将其作为窗口的属性检查:
if ("EventSource" in window) {
或
因为未声明EventSource
,请求未声明变量的值被视为引用错误
另一方面,typeof
运算符能够将标识符作为操作数,而不获取其值,从而避免了错误
如果这是一个局部变量,您应该注意ReferenceError,并首先定义它
如果这是全局的,并且事先无法知道它的存在,则可以将其作为窗口的属性检查:
if ("EventSource" in window) {
或
根据ECMA-262标准草案:
8.7.1 GetValue(V):[…]如果IsUnsolvableReference(V),则抛出一个ReferenceError异常。[……]
11.4.3