Galera gostaria de tirar uma dúvida, eu programo em java e to acostumado a tipar as variaveis, porém estou aprendendo javascript também e no javascript as variaveis não são tipadas. Pesquisei alguma coisa sobre isso e vi que o tipo da variavel acontece dependendo do que ela recebe, até ai blz, a minha duvida é quando eu crio uma função em javascript e passo o parametro pra ela, nesse momento esse parametro não é tipado também, a minha duvida foi quando eu vi um exemplo em que função pegava esse parametro, mesmo sem tipo, e dava “ponto” nela para chamar uma função especifica, a minha duvida foi a seguinte, como que uma variavel sem ter recebido nada, sem tipo nenhum tinha um metodo disponível pra ela
Observação: segue um exemplo que me gerou dúvida
function tratarExclusaoProduto(args) {
if(!args.validationFailed){
confirmacao.hide();
}
}
a dúvida é essa, o parametro args não tinha recebido nenhum valor e nem era tipado, como que ele conseguiu chamar o “validationFailed”?
Na verdade, essas e outras “maravilhas” é que fazem do javascript o que ele é.
Não existe garantia nenhuma que a variável args vá possuir um atributo chamado validationFailed. Mas isso não é um problema para o javascript, se não existe, ele retorna false e a validação se baseia nisso. É como se o atributo existisse e tivesse valor falso.
Linguagens de script possuem esta abordagem, php por exemplo, usa a mesma lógica nas validações.
Blz LostSoldier, obrigado por responder…
Apenas uma pequena dúvida, no exemplo que eu dei daquela função, como que eu faço pra saber quais atributos e metodos disponíveis eu tenho nessa variavel?
O jeito mais simples o que você fez no seu if, isso te retorna true caso a função esteja definida, ou false caso o contrário…
O próprio console.log(args) te retorna um objeto completo, com o mapa do DOM, nele você consegue identificar se a função/atributo está definido e qual valor está trazendo…
Uma pequena correçao: nao é que em javascript as variáveis nao tenham tipo. O tipo das variáveis é definido em tempo de execuçao, ao invés de compilaçao.
Isso é chamado de tipagem dinamica (assim como em ruby, python, clojure, elixir)
A outra alternativa é o tipo da variável ser checado direto na compilaçao, isso é chamado tipagem estática (java, c#, haskell)
Uma coisa que pode te confundir é que diferentes valores sao considerados falsos em javascript: false, “” (string vazia), undefined, null
Quando você tenta acessar uma propriedade que nao existe no objeto, ele retorna undefined e nao false. Se colocar isso num if, terá o mesmo resultado e nao notará a diferença, mas isso pode te causar certos erros.
Ao invés de testar o valor da propriedade, você pode testar diretamente se ela é definida ou nao:
var objeto = { texto: ""}
if (texto in objeto) console.log("existe texto") //vai entrar nesse if
if (objeto.texto) console.log("existe texto") // nao vai entrar nesse if, apesar da propriedade existir
Galera muito obrigado por todos vcs que responderam, muito obrigado mesmo, mas a dúvida que eu tenho é no momento que eu declaro uma função e passo um parametro pra essa função, nesse exato momento, antes desse parametro receber qualquer valor, quais são as propriedades e metodos que tenho disponivel nesse parametro?
Quando está declarando a funçao, você pode escolher quais propriedades e métodos você acha que devem estar disponíveis. Será obrigaçao de quem usar sua funçao, passar um objeto que funcione para aquela funçao.
Ou seja, você trata os parâmetros como se eles fossem do tipo que você quer. Daí você documenta a funçao e usa bons nomes, para outras pessoas saberem o que sua funçao espera.