我正在开发一些将放在SharePoint页面上的JavaScript。 SharePoint提供了一个全局函数getCurrentCtx()。不幸的是,此功能仅适用于某些页面。我的JavaScript需要测试以查看此函数是否存在。
简单,对吧?
if(getCurrentCtx) {
//Code here
}
不是那么快:
未捕获的ReferenceError:未定义getCurrentCtx
WTF?如果它没有定义,那么它应该是undefined
,这是假的,因此应该简单地跳过if语句。
console.log(getCurrentCtx)
未捕获的ReferenceError:未定义getCurrentCtx
据我所知,当你试图调用一个不存在的函数时会发生未被捕获的referencerror异常。那么,当我试图检索变量的值时,为什么我会得到它?
谢谢,
YM
答案 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中使用。