Avalie as afirmações sobre a linguagem de programação Javasc...

Próximas questões
Com base no mesmo assunto
Q946479 Programação
Avalie as afirmações sobre a linguagem de programação Javascript.
I. Foi introduzida a utilização de classes a partir do ECMAScript 2015 para simplificar a utilização e manutenção de heranças baseadas no “prototype”. Porém, este recurso é apenas um embelezamento de código, uma vez que tudo ocorre dinamicamente e as classes na verdade são objetos.
II. Os objetos em Javascript são mutáveis, significa que mesmo depois de instanciados estes podem ter novas propriedades e métodos, independente dos outros objetos instanciados pelo mesmo construtor.
III. Javascript possui tipos primitivos fracamente tipados e dinamicamente tipados, sendo estes declarados com a palavra reservada “var”. Uma vez declarados com “var”, a variável tem validade dentro do escopo que foi declarado, por exemplo, se declarado dentro de uma estrutura de decisão, não será válido sua utilização fora desse escopo.
É correto afirmar que
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: C - somente as afirmativas I e II são verdadeiras.

Para abordar essa questão, é importante relembrar alguns conceitos sobre a linguagem de programação JavaScript e suas especificações ECMAScript.

Afirmativa I: A introdução das classes em JavaScript veio com o ECMAScript 2015 (ou ES6), e essas classes são de fato "syntactic sugar" sobre o sistema de protótipos que já existia na linguagem. Isso significa que elas oferecem uma maneira mais clara e familiar (para programadores de outras linguagens orientadas a objeto) de trabalhar com herança e instância de objetos, mas por baixo dos panos, a herança ainda é baseada no sistema de protótipos do JavaScript. Portanto, essa afirmativa é verdadeira.

Afirmativa II: No JavaScript, os objetos são mutáveis, isto é, suas propriedades e métodos podem ser alterados após a criação do objeto. Isso também inclui a capacidade de adicionar novas propriedades e métodos a um objeto que já foi instanciado, independente de outros objetos criados pelo mesmo construtor. Essa afirmativa também é verdadeira.

Afirmativa III: A linguagem JavaScript é de fato fracamente tipada e dinâmica, permitindo que os tipos de variáveis sejam alterados em tempo de execução. Contudo, a afirmação relativa ao escopo das variáveis declaradas com "var" está incorreta. Variáveis declaradas com "var" têm escopo de função, ou seja, são limitadas ao escopo da função na qual foram declaradas. Se uma variável com "var" é declarada fora de qualquer função, ela tem escopo global. Portanto, se "var" for usado dentro de uma estrutura de decisão que não está dentro de uma função, a variável será global e poderá ser acessada fora desse escopo. Isso torna a afirmativa III falsa, e a alternativa correta é a C, pois apenas as afirmativas I e II são verdadeiras.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

I. Verdade, prototype são objetos tipo function que substitui classes (nao existe elemento class em JS)

II. Sem problemas, propriedades e métodos podem ser adicionados dinamicamente em JS.

III. É tipicamente fraco e sim, o JS dinamicamente tipifica. Entretanto, variáveis instanciadas por var, apenas seguem o validade de escopo local se declarado dentro de uma função, em outras estruturas serão variável globais.

Letra C

Complementando a III.

O "var" nasceu com o Javascript, e nas versões antigas só existiam os escopos de função e global. Com o ES2015, surgiram "let" e "const" para cobrir esse problema, pois esses nasceram com o conceito de escopo de bloco "{}" já conhecido em Java, C++, etc. Ou seja, quando declarados dentro de um for, if ou qualquer bloco, terá o escopo limitado por esse bloco.

Complementando, o ECMAScript 5th edition, já tem suporte a classes. A versão 2015 trouxe algumas melhorias, deixam as coisas mais simples de sem feitas.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo