Мой код
function getID( swfID ){
if(navigator.appName.indexOf("Microsoft") != -1){
me = window[swfID];
}else{
me = document[swfID];
}
}
function js_to_as( str ){
me.onChange(str);
}
Однако иногда мой onChange
не загружается. Ошибки Firebug с
me.onChange не является функцией
Я хочу изящно деградировать, потому что это не самая важная функция в моей программе. typeof
выдает ту же ошибку.
Любые предложения о том, как убедиться, что он существует, а затем только выполнить onChange
?
(Ни один из методов ниже, кроме как попробуйте поймать одну работу)
javascript
Алек Смарт
источник
источник
Ответы:
Попробуйте что-то вроде этого:
или еще лучше (согласно UpTheCreek Upvoted комментарий)
источник
undefined
исключение в JavaScript. Я попробовал это.typeof window.alert === 'object'
.if (me.onChange) { // do something }
?me.onChange
может быть что угодноtrue
, не обязательно функция (например, логическое значение, строка и т. Д.). Например, см. Jsfiddle.net/j5KAF/1У меня была эта проблема.
продолжал выдавать ошибку ссылки, если obj оказался неопределенным.
В итоге я сделал следующее:
Коллега указал мне, что проверка, если это,
!== 'undefined'
а затем,=== 'function'
является излишним, конечно.Simpler:
Гораздо чище и прекрасно работает.
источник
ReferenceError
? Это кажется мне нелогичным.ReferenceError
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Если вы используете eval для преобразования строки в функцию и хотите проверить, существует ли этот метод eval'd, вам нужно использовать typeof и строку функции внутри eval :
Не переворачивайте это и попробуйте typeof на eval . Если вы сделаете ReferenceError будет брошено:
источник
var a = 'alert'; window[a]('it works');
Как насчет:
например
или как для вашего случая:
Смотрите MDN документы .
источник
lastIndexOf()
в строке (мы знаем, то есть, но теоретически),typeof String().lastIndexOf === "function"
это правда, но'lastIndexOf' in String
ложно.Попробуйте
typeof
- Ищите,'undefined'
чтобы сказать, что это не существует,'function'
для функции. JSFiddle для этого кодаИли как будто:
Или с возвращаемым значением в одной строке:
источник
Не видел это предложил: me.onChange && me.onChange (str);
По сути, если me.onChange не определен (что будет, если он не был инициирован), он не выполнит последнюю часть. Если me.onChange является функцией, она выполнит me.onChange (str).
Вы даже можете пойти дальше и сделать:
на случай, если я тоже асинхронен.
источник
источник
&&
чего не имеет jQueryisFunction
в правой части&&
?Для меня самый простой способ:
источник
if ((typeof window["function_name"] !== 'undefined') && ((typeof window["function_name"] === 'function'))) { return true; } else { return false; }
но это небольшая поправкаЯ сделаю еще один шаг, чтобы убедиться, что свойство действительно является функцией
источник
источник
Мне нравится использовать этот метод:
Применение:
источник
Библиотека Underscore.js определяет его в методе isFunction, как показано ниже (комментарии показывают, что это может исправить некоторые ошибки браузера)
http://underscorejs.org/docs/underscore.html#section-143
источник
ИЛИ
источник
Поставь двойной восклицательный знак т.е. перед именем функции, которую вы хотите проверить. Если он существует, он вернет истину.
источник
В нескольких словах: поймать исключение.
Я действительно удивлен, что никто не ответил или прокомментировал Exception Catch в этом посте.
Подробно: здесь приведен пример, в котором я пытаюсь сопоставить функцию с префиксом mask_ и суффиксом поля формы «name». Когда JavaScript не находит функцию, он должен выдать ошибку ReferenceError, которую вы можете обработать по своему усмотрению в секции catch.
источник
Без условий
источник
Я подозреваю, что
me
он не получает правильно назначенную нагрузку.Перемещение вызова get_ID в событие onclick должно позаботиться об этом.
Очевидно, вы можете в дальнейшем ловушку, как упоминалось ранее:
источник
Я всегда проверяю так:
просто поместите его перед любым кодом, который использует эту функцию
источник
У меня был случай, когда имя функции менялось в зависимости от переменной (в данном случае var 'x'), добавленной к имени функции. Это работает:
источник
Этот простой код JQuery должен сделать свое дело:
источник
Я попробовал принятый ответ; Однако:
возвращает «неопределенное». Я заметил, что в спецификации указано событие «onchange» вместо «onChange» (обратите внимание на camelCase).
Изменение исходного принятого ответа на следующее работало для меня:
источник
Если вы проверяете функцию, которая является плагином jQuery, вам нужно использовать $ .fn.myfunction
источник
Я также искал элегантное решение этой проблемы. После долгих размышлений я нашел этот подход лучше всего.
const func = me.onChange || (str => {}); func(str)
;источник
(me.onChange||(_=>_))()
выполнит функцию, если она существует, в противном случае ничего не будет делать.me.onChange && me.onChange()
помешать определить пустую функцию.Современный Javascript на помощь!
Это может не иметь большого шанса быть замеченным с длинным списком ответов, но теперь это решается * на уровне языка с новым необязательным синтаксисом цепочки
Это так просто -
onChange
вызывается, только если он существует .Если
onChange
не существует, ничего не происходит, и выражение возвращаетсяundefined
- поэтому, если оно имеет возвращаемое значение, которое вы использовали бы в противном случае, вы можете просто проверить это значение!== undefined
прежде чем продолжить.Предостережение о крайнем случае - если
onChange
оно существует, но не является функцией, вы получаетеTypeError
. Как и следовало ожидать, это то же самое, что пытаться вызывать любую не-функцию как функцию, но стоит явно указать, что Optional Chaining не делает никакой магии, чтобы убрать это.* Ну, технически говоря, Optional Chaining все еще является предложением TC39 4-го этапа, поэтому пока еще не включен в спецификацию ECMAScript, но 4-й этап означает, что он завершен и его включение по существу гарантировано, он просто ожидает поставки новой версии. Вы можете использовать синтаксис в его окончательной версии сегодня через Babel с уверенностью, что он не изменится. Это даже в Typescript!
источник
Вот рабочее и простое решение для проверки существования функции и динамического запуска этой функции. другой функцией;
Функция запуска
и теперь вы можете генерировать функцию динамически, возможно, с помощью PHP, как это
теперь вы можете вызывать функцию, используя динамически генерируемое событие
Точный HTML-код вам нужен
источник
источник
И тогда есть это ...
источник
Попробуй это:
Имейте в виду, что я написал это на своем мобильном телефоне. Может содержать проблемы с заглавными буквами и / или другие исправления, такие как, например, имя функции.
Если вы хотите, чтобы такая функция, как PHP, проверяла, установлена ли переменная:
источник
Чтобы проиллюстрировать предыдущие ответы, приведу краткий фрагмент JSFiddle:
источник
источник