Переменная JavaScript, кажется, рассматривается как функция

Я разрабатываю код JavaScript, который будет размещен на странице SharePoint. SharePoint предоставляет глобальную функцию getCurrentCtx (). К сожалению, эта функция доступна только на определенных страницах. Мой JavaScript должен проверить, существует ли эта функция.

Легко, правда?

if(getCurrentCtx) {
    //Code here
}

Не так быстро:

Uncaught ReferenceError: getCurrentCtx не определен

Какого черта? Если он не определен, он должен быть undefined, что является ложным, поэтому оператор if следует просто пропустить.

console.log(getCurrentCtx)

Uncaught ReferenceError: getCurrentCtx не определен

Насколько мне известно, исключение uncaught referencerror возникает, когда вы пытаетесь вызвать функцию, которой не существует. Так почему я получаю это, когда просто пытаюсь получить значение переменной?

Спасибо,

YM


person Joshua Walsh    schedule 05.08.2014    source источник
comment
Этот ответ предоставляет решение.   -  person PM 77-1    schedule 06.08.2014


Ответы (2)


Необъявленные переменные вызывают исключение Uncaught ReferenceError. Неопределенные свойства возвращают undefined. Что-то вроде этого, наверное, сработает.

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

В качестве альтернативы также может сработать следующее.

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

Оба они не протестированы на Sharepoint, но будут работать с простым JavaScript.

person Alexander O'Mara    schedule 05.08.2014
comment
Я помечаю ему зеленую галочку, потому что он подчеркивает различие между переменными и свойствами. Попытка получить доступ к переменной как к свойству объекта окна для меня проще, чем выполнить typeof. - person Joshua Walsh; 06.08.2014

Насколько мне известно, исключение uncaught referencerror возникает, когда вы пытаетесь вызвать функцию, которой не существует.

Неправильно.

Если вы пытаетесь прочитать значение любой переменной (или более общей привязки), которая не существует (например, нигде не var getCurrentCtx), то JS выдает ошибку ссылки.

Соответствующая часть спецификации.

Исключение: typeof getCurrentCtx вернет "undefined", поскольку он проверяет, разрешается ли переменная (ссылка) (существует ) до того, как это прочитает.

person Felix Kling    schedule 05.08.2014
comment
Переменные в не существуют, не объявлены. (И поскольку typeof не требует объявления переменной, OP может использовать ее в своем заявлении if). - person Quentin; 06.08.2014
comment
О, интересно, я никогда этого не знал. Спасибо! - person Joshua Walsh; 06.08.2014