DanLevy.net

Quiz: Conosci il JavaScript Moderno?

Dimostra quanto ne sai davvero di JavaScript!

Conosci la differenza tra ES2015 ed ES2022?

Qual è il valore di result?

console.log(null ?? 100);

Quali due valori fanno scattare il valore alternativo di ???

L’operatore di null coalescing (??) restituisce l’operando a destra (b) se quello a sinistra (a) è null o undefined. In questo caso, a è null, quindi result è 100.

Quale sarà l’output del seguente codice?

const value = false;
const defaultVal = 42;
console.log(value ?? defaultVal);

Confronta false con i soli valori trattati come nullish.

L’operatore di null coalescing (??) tratta i valori falsy come false come valori validi. Poiché value è false, viene considerato un valore valido e restituito.

Qual è l’output del seguente codice?

const obj = { foo: null };
const result = obj.foo?.bar;
console.log(result);

La valutazione prosegue oltre un valore null con ?.?

L’operatore di optional chaining (?.) interrompe la valutazione se la parte a sinistra è null o undefined. Poiché obj.foo è null, obj.foo?.bar restituisce undefined.

Qual è l’output del seguente codice?

const a = 42n;
const result = a * 2n;
console.log(result);

Osserva il suffisso dei due operandi.

I valori BigInt vengono creati aggiungendo n a un numero. Non è possibile mescolare BigInt con numeri regolari nelle operazioni aritmetiche. In questo caso, entrambi i valori sono BigInt, quindi la moltiplicazione funziona, restituendo 84n.

Cosa viene stampato in console?

const modulePromise = import('./myModule.js');
console.log(typeof modulePromise);

typeof distingue le Promise dagli altri oggetti?

La funzione import() restituisce una Promise che si risolve nell’oggetto del modulo. Poiché le istanze di Promise sono oggetti, typeof modulePromise restituisce 'object'.

Quale sarà il risultato del seguente codice?

const promises = [
Promise.resolve('success'),
Promise.reject('error')
];
Promise.allSettled(promises).then(results => {
console.log(results[0].status + ': ' + results[0].value);
});

L’indice zero si riferisce alla prima Promise: considera il suo stato e il suo valore.

Promise.allSettled restituisce un array di oggetti che descrivono l’esito di ogni promise. La prima promise è fulfilled con il valore 'success', quindi l’istruzione di log stamperà fulfilled: success.

Cosa restituisce str.matchAll()?

const str = 'foo1bar2baz3';
const matches = str.matchAll(/\d/g);

Il risultato può essere consumato progressivamente con for...of.

String.matchAll restituisce un iteratore di corrispondenze, non un array. Questo iteratore può essere utilizzato per ottenere tutti i gruppi di corrispondenza da una stringa.

Cosa rappresenta import.meta.url?

console.log(import.meta.url);

I metadati appartengono al modulo che li legge.

import.meta è un oggetto che contiene metadati relativi al modulo corrente. La proprietà import.meta.url rappresenta l’URL del modulo corrente, che può essere utilizzato per ottenere informazioni su dove il modulo è in esecuzione.

Qual è il valore di a dopo l’assegnazione logica?

let a = null;
a ||= 10;
console.log(a);

||= verifica se il valore è falsy.

L’assegnazione OR logica (||=) assegna il valore a destra se il valore a sinistra è falsy (null, undefined, 0, false, ecc.). Poiché a è null, gli viene assegnato il valore 10.

Qual è il valore di b dopo l’assegnazione nullish?

let b = null;
b ??= 10;
console.log(b);

??= considera solo null e undefined.

L’assegnazione di coalescenza nullish (??=) assegna il valore a destra se il valore a sinistra è null o undefined. Poiché b è null, gli viene assegnato il valore 10.

Cosa restituisce WeakRef?

const obj = { data: 'important' };
const ref = new WeakRef(obj);
console.log(ref.deref());

Controlla se l’oggetto ha ancora un riferimento forte.

WeakRef fornisce un riferimento debole a un oggetto, il che consente all’oggetto di essere rimosso dal garbage collector se non esistono altri riferimenti forti. Poiché obj è ancora referenziato in modo forte qui, deref() restituisce l’oggetto originale. Se il target fosse stato recuperato dal garbage collector, deref() avrebbe restituito undefined.