Prévia do material em texto
Aula 7 - Objetos Nativos do JavaScript
1. Os objetos nativos estão presentes diretamente na linguagem JS, oferecendo
funções e constantes de grande utilidade para o programador. A respeito desses
objetos, assinale a alternativa verdadeira:
Resposta: D. Servem de base para os demais objetos do código.
Justificativa: Alguns objetos nativos não apresentam construtores, como é o caso do
objeto global e do Math; entretanto, o RegExp e tantos outros apresentam. Apesar de
ser arriscado alterar um objeto nativo, qualquer objeto que não esteja selado pode ser
alterado.
Esses objetos são definidos pela implementação da linguagem. Novos objetos podem
ser definidos a cada nova publicação do padrão ECMAScript e servem de base aos
demais, até porque entre os objetos fundamentais consta o próprio Object.
2. Nem todos os objetos nativos apresentam construtores ou propriedades
acessíveis. Qual das alternativas a seguir representa um código válido na
manipulação de objetos nativos?
Resposta: D. new Date(86400)
Justificativa: O objeto Math não apresenta construtor.
A propriedade é parte do objeto Math, e não de um método ou função.
Os valores de data e hora do objeto Date não são acessíveis por meio de
propriedades.
Uma nova data pode ser criada utilizando-se o construtor do objeto Date e um
parâmetro numérico indicando os milissegundos desde o dia 01/01/1970.
https://ultra.content.blackboardcdn.com/ultra/uiv3900.74.0-rel.25_afc4ff2
3. Um aplicativo é utilizado para calcular a quantidade de telhas necessárias para
cobrir um telhado a partir dos dados de largura (L) e comprimento (C) da área a
ser coberta, o grau de inclinação (I) recomendado para a telha e a quantidade de
telhas por m² (T). A quantidade de telhas pode ser determinada pela fórmula:
Resposta:A. const quantidade = (Math.sqrt(Mat.pow(C, 2) + Math.pow(I*C, 2))*L)/T
Justificativa: Todos os métodos e funções utilizam parênteses para delimitar a
passagem de parâmetros, não sendo válidos { } nem [ ].
Exponenciações só são possíveis por meio da função Math.pow(x, y), cujo primeiro
parâmetro corresponde à base, e o segundo, ao expoente.
O "." em JavaScript serve para acessar as propriedades e os métodos de um objeto, e
as multiplicações são feitas pelo operador "*".
Não existe um método de divisão no objeto Math, mas um operador próprio para isso:
"/".
São necessários os recursos de raiz quadrada (Math.sqrt()) e
exponenciação (Math.pow) para executar a operação, seguindo a mesma ordem em
que aparecem: primeiro a soma das exponenciações, depois a raiz, a multiplicação e,
por fim, a divisão.
4. Um site deve fazer a simulação de um investimento e, para tanto, precisa calcular
a quantidade de dias entre as datas de aplicação e resgate. Assinale a alternativa
que permite obter, a partir de dois objetos Date, data1 e data2, a quantidade de
dias entre eles.
Resposta: E. (data1.getTime() - data2.getTime())/86400000
Justificativa: Não se pode subtrair objetos, tampouco o objeto nativo Date apresenta
um método chamado Subtract.
getDate() retorna apenas o dia do mês e não poderá ser usada na subtração entre
meses diferentes.
O método getTime() retorna o tempo em milissegundos de ambas as datas, e, como
cada dia tem 86.400.000 milissegundos, pode-se descobrir a diferença entre datas em
milissegundos e dividir por esse valor para se obter a quantidade de dias.
5. Utilizando a fórmula de juro composto:
Qual dos algoritmos abaixo consegue extrair os valores necessários do texto a
seguir e calcular o valor final de investimento?
"Valor inicial de R$ 1.000,00 aplicado a 0,14% de juro ao dia no dia
25/12/2013 e resgatado no dia 13/10/2018"
Resposta: A.
let texto = 'Valor inicial de R$ 1.000,00 aplicado a 0,14% de juro ao dia no dia 25/1
2/2013 e resgatado no dia 13/10/2018'
const regex_Valor = /R$[\s]+?((\d{1,3}|(\d{1,3}([.]\d{3})+)),\d\d)/gm
const regex_Taxa = /[\s]+?((\d{1,3}|(\d{1,3}([.]\d{3})+)),\d\d)\%/gm
const regex_Data = /[\s]+?(\d\d)\/(\d\d)\/(\d\d\d\d)/gm
let ValorInicial = Number.parseFloat((regex_Valor.exec(texto)[1])
.replace('.', '').replace(',', '.'))
let Taxa = Number.parseFloat((regex_Taxa.exec(texto)[1])
.replace('.', '').replace(',', '.'))
let res_data1 = regex_Data.exec(texto)
let res_data2 = regex_Data.exec(texto)
let data1 = new Date(res_data1[3], res_data1[2], res_data1[1])
let data2 = new Date(res_data2[3], res_data2[2], res_data2[1])
let dias = (Math.abs(Math.floor((data2.getTime() - data1.getTime())/86400000)))
let ValorFinal = ValorInicial*Math.pow((1 + Taxa/100), dias)
console.log(`${ValorFinal.toFixed(2)}`)
Justificativa:
Os valores de Inicial e Taxa devem ser convertidos para números de ponto flutuante e,
para tanto, devem ter os caracteres "." eliminados e "," substituídos por ".".
Os grupos especificados em RegExp aparecem a partir do segundo elemento
do Array, sendo o primeiro reservado para o padrão completo.
O método que retorna o Array de uma varredura com expressão regular é o exec(), e
não o método test(), que retorna true ou false.
Os valores podem ser encontrados de diversas maneiras, criando-se expressões
regulares separadas para cada valor buscado ou agrupando-se todas as expressões
em uma única. No primeiro caso, a expressão criada para identificar datas deve ser
global e ser executada duas vezes, uma para cada data; no segundo caso, a
expressão deverá conter o padrão para as datas duas vezes, conforme a sequência.
Os valores encontrados devem ser preparados substituindo-se caracteres "." e ","
conforme o padrão aceito pelo método Number.parseFloat() para convertê-los para
ponto flutuante, que pode ser executado de forma explícita ou pelo interpretador ao
tentar efetuar uma operação matemática com uma string.
Deve-se tomar o cuidado para referenciar os índices que dizem respeito ao grupo que
não inclui os caracteres "R$" ou "%", pois, nesse caso, o resultado será NaN.
As datas são inicializadas usando-se os grupos definidos do RegExp para dia, mês e
ano, subtraídos os valores em milissegundos por meio do método getTime(), e
convertidas para dias ao se dividir pelo valor em milissegundos de um dia. Vale lembrar
que um dia é um valor inteiro; logo, deve-se arredondar para baixo (Math.floor), e o
resultado deverá ser positivo independentemente de qual data foi obtida primeiro
(Math.abs()). O cálculo efetuado manualmente não atinge o mesmo resultado por
desconsiderar principalmente as variações em anos bissextos e a precisão dos dias de
cada mês, sendo mais prático utilizar a solução de obtenção dos milissegundos
disponível no objeto Date.
Por fim, o método Math.pow() faz a exponenciação do cálculo conforme a fórmula
dada.