JavaScript变量似乎被视为函数

时间:2014-08-05 23:27:47

标签: javascript sharepoint referenceerror

我正在开发一些将放在SharePoint页面上的JavaScript。 SharePoint提供了一个全局函数getCurrentCtx()。不幸的是,此功能仅适用于某些页面。我的JavaScript需要测试以查看此函数是否存在。

简单,对吧?

if(getCurrentCtx) {
    //Code here
}

不是那么快:

  

未捕获的ReferenceError:未定义getCurrentCtx

WTF?如果它没有定义,那么它应该是undefined,这是假的,因此应该简单地跳过if语句。

console.log(getCurrentCtx)
  

未捕获的ReferenceError:未定义getCurrentCtx

据我所知,当你试图调用一个不存在的函数时会发生未被捕获的referencerror异常。那么,当我试图检索变量的值时,为什么我会得到它?

谢谢,

YM

2 个答案:

答案 0 :(得分:3)

  

据我所知,当你试图调用一个不存在的函数时会发生未被捕获的referencerror异常。

不正确的。

如果您正在尝试阅读任何变量(或更一般的,绑定)的值 (例如,在任何地方都没有var getCurrentCtx ),然后JS抛出一个引用错误。

Relevant part in the specification

例外:typeof getCurrentCtx would return "undefined",因为它在读取之前测试变量(引用)是否可解析(存在)。

答案 1 :(得分:1)

未声明的变量会引发Uncaught ReferenceError异常。未定义的属性返回undefined。这样的事情可能会奏效。

if(typeof getCurrentCtx !== "undefined") {
    //Code here
}

或者,以下内容也可能有效。

if(self.getCurrentCtx) {
    //Code here
}

这两个都在Sharepoint上未经测试,但可以在纯JavaScript中使用。