Meu código é
function getID( swfID ){
if(navigator.appName.indexOf("Microsoft") != -1){
me = window[swfID];
}else{
me = document[swfID];
}
}
function js_to_as( str ){
me.onChange(str);
}
No entanto, às vezes o meu onChange
não carrega. Erros de Firebug com
me.onChange não é uma função
Eu quero degradar normalmente, porque esse não é o recurso mais importante no meu programa. typeof
dá o mesmo erro.
Alguma sugestão de como garantir que ele exista e apenas executar onChange
?
(Nenhum dos métodos abaixo, exceto tentar pegar um trabalho)
javascript
Alec Smart
fonte
fonte
Respostas:
Tente algo como isto:
ou melhor ainda (de acordo com o comentário acima do UpTheCreek)
fonte
undefined
exceção no JavaScript. Eu tentei.typeof window.alert === 'object'
.if (me.onChange) { // do something }
?me.onChange
poderia ser qualquer coisa avaliadatrue
, não necessariamente uma função (por exemplo, poderia ser um booleano, uma string, etc.). Por exemplo, consulte jsfiddle.net/j5KAF/1Eu tive esse problema.
continuava lançando um erro de referência se obj fosse indefinido.
No final, fiz o seguinte:
Um colega me indicou que verificar se é
!== 'undefined'
e então=== 'function'
é redundante, é claro.Mais simples:
Muito mais limpo e funciona muito bem.
fonte
ReferenceError
? Isso me parece ilógico.ReferenceError
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Se você estiver usando eval para converter uma string em função e quiser verificar se esse método eval'd existe, convém usar typeof e sua string de função dentro de um eval :
Não inverter esta e tentar uma typeof em eval . Se você fizer um ReferenceError será lançado:
fonte
var a = 'alert'; window[a]('it works');
E se:
por exemplo
ou como no seu caso:
Veja os documentos MDN .
fonte
lastIndexOf()
na string (nós sabemos, que é, mas teoricamente)typeof String().lastIndexOf === "function"
é verdade, mas'lastIndexOf' in String
é falso.Tente
typeof
- procure'undefined'
dizer que não existe,'function'
para uma função. JSFiddle para este códigoOu como um se:
Ou com um valor de retorno, em uma única linha:
fonte
Não vi isso sugerido: me.onChange && me.onChange (str);
Basicamente, se me.onChange estiver indefinido (o que acontecerá se não tiver sido iniciado), ele não executará a última parte. Se me.onChange for uma função, ele executará me.onChange (str).
Você pode ir além e fazer:
caso eu também seja assíncrono.
fonte
fonte
&&
conta cuida de algo que o jQuery estáisFunction
no lado direito da&&
não?Para mim, a maneira mais fácil:
fonte
if ((typeof window["function_name"] !== 'undefined') && ((typeof window["function_name"] === 'function'))) { return true; } else { return false; }
mas é um pequeno ajuste.Vou dar um passo adiante para garantir que a propriedade seja realmente uma função
fonte
fonte
Eu gosto de usar este método:
Uso:
fonte
A biblioteca Underscore.js define-o no método isFunction como este (sugerido pelos comentários)
http://underscorejs.org/docs/underscore.html#section-143
fonte
OU
fonte
Coloque o ponto de exclamação duplo, ou seja, !! antes do nome da função que você deseja verificar. Se existir, retornará verdadeiro.
fonte
Em poucas palavras: pegue a exceção.
Estou realmente surpreso que ninguém tenha respondido ou comentado sobre o Exception Catch neste post ainda.
Detalhe: Aqui vai um exemplo em que tento corresponder a uma função que é prefixada por mask_ e com o sufixo do campo de formulário "name". Quando o JavaScript não encontra a função, ele deve lançar um ReferenceError que você pode manipular como desejar na seção catch.
fonte
Sem condições
fonte
Eu suspeitaria que
me
não está sendo atribuído corretamente o onload.Mover a chamada get_ID para o evento onclick deve cuidar disso.
Obviamente, você pode prender ainda mais, como mencionado anteriormente:
fonte
Eu sempre verifico assim:
basta colocá-lo antes de qualquer código que use essa função
fonte
Eu tive o caso em que o nome da função variou de acordo com uma variável (var 'x' nesse caso) adicionada ao nome da função. Isso funciona:
fonte
Este código jQuery simples deve fazer o truque:
fonte
Eu tentei a resposta aceita; Contudo:
retorna 'indefinido'. Notei que a especificação indica um evento chamado 'onchange' em vez de 'onChange' (observe o camelCase).
Alterar a resposta aceita original para a seguinte funcionou para mim:
fonte
Se você estiver procurando por uma função que seja um plugin jQuery, precisará usar $ .fn.myfunction
fonte
Eu também tenho procurado uma solução elegante para esse problema. Após muita reflexão, achei melhor essa abordagem.
const func = me.onChange || (str => {}); func(str)
;fonte
(me.onChange||(_=>_))()
Irá executar a função se ela existir, caso contrário não fará nada.me.onChange && me.onChange()
evitar definir uma função nula.Javascript moderno para o resgate!
Isso pode não ter uma grande chance de ser visto com a longa lista de respostas, mas agora isso foi resolvido * no nível do idioma com a nova sintaxe de encadeamento opcional
É tão simples assim -
onChange
só é chamado se existir .Se
onChange
não existir, nada acontecerá e a expressão retornaráundefined
- portanto, se ela tiver um valor de retorno que você usaria de outra forma, basta verificar esse valor!== undefined
antes de continuar.Borda caso ressalva - se
onChange
faz existir, mas é não uma função, você tem umaTypeError
. É como você esperaria, é o mesmo que tentar chamar qualquer não-função como uma função, mas vale ressaltar explicitamente que o Encadeamento Opcional não faz mágica para fazer isso desaparecer.* Bem, tecnicamente, o Opcional Chaining ainda é uma proposta do estágio 4 do TC39, portanto ainda não está na especificação do ECMAScript, mas o estágio 4 significa que ele foi finalizado e sua inclusão é essencialmente garantida, apenas aguardando o lançamento de uma nova versão. Você pode usar a sintaxe em sua versão final hoje via Babel com confiança de que isso não mudará. É mesmo em texto datilografado!
fonte
Aqui está uma solução simples e funcional para verificar a existência de uma função e acioná-la dinamicamente por outra função;
Função de gatilho
e agora você pode gerar a função dinamicamente, talvez usando php como este
agora você pode chamar a função usando evento gerado dinamicamente
o código HTML exato que você precisa é
fonte
fonte
E depois há isso ...
fonte
Tente este:
Esteja ciente de que escrevi isso com meu celular. Pode conter alguns problemas em maiúsculas e / ou outras correções necessárias, como por exemplo, nome das funções
Se você deseja uma função como PHP para verificar se o var está definido:
fonte
Para ilustrar as respostas anteriores, aqui está um trecho rápido do JSFiddle:
fonte
fonte