JavaScript è la pietra angolare dello sviluppo web moderno. Sebbene molti sviluppatori conoscano le funzionalità più comuni, esistono decine di feature avanzate o poco usate che possono rendere il tuo codice più pulito, efficiente e facile da gestire. In questo post vedremo 20 funzioni sorprendenti di JS, con esempi pratici per ognuna.
1. Operatore di Coalescenza Null (??)
Restituisce un valore di default quando una variabile è null o undefined.
let foo = null;
let bar = foo ?? 'default value';
console.log(bar); // Output: 'default value'
2. Optional Chaining (?.)
Permette di accedere in modo sicuro a proprietà annidate senza errori di runtime.
const user = {
profile: { name: 'Alice' }
};
console.log(user.profile?.name); // 'Alice'
console.log(user.account?.name); // undefined
3. Separatore numerico (_)
Rende i numeri più leggibili nelle grandi cifre.
const largeNumber = 1_000_000;
console.log(largeNumber); // 1000000
4. Promise.allSettled
Aspetta tutti i promise, sia risolti che rifiutati, e restituisce un array con lo stato di ciascuno.
const promises = [
Promise.resolve('Success'),
Promise.reject('Error'),
Promise.resolve('Another Success')
];
Promise.allSettled(promises).then(results => {
results.forEach(result => console.log(result));
});
5. Campi privati nelle classi
Con # puoi dichiarare proprietà private dentro una classe.
class MyClass {
#privateField = 42;
getPrivateField() {
return this.#privateField;
}
}
const instance = new MyClass();
console.log(instance.getPrivateField()); // 42
6. Operatori logici con assegnazione
let a = true;
let b = false;
a &&= 'Assigned if true';
b ||= 'Assigned if false';
console.log(a); // 'Assigned if true'
console.log(b); // 'Assigned if false'
7. Etichette per cicli e blocchi
outerLoop: for(let i = 0; i < 3; i++) {
for(let j = 0; j < 3; j++) {
if (j === 1) break outerLoop;
}
}
8. Template Tag Functions
function logWithTimestamp(strings, ...values) {
const timestamp = new Date().toISOString();
return `[${timestamp}] ` + strings.reduce((acc, str, i) => acc + str + (values[i] || ''), '');
}
console.log(logWithTimestamp`User ${'John'} logged in`);
9. Operatori bitwise
const isEven = num => (num & 1) === 0;
console.log(isEven(4)); // true
10. Operatore in
const obj = { name: 'Alice', age: 25 };
console.log('name' in obj); // true
11. Operatore debugger
function checkValue(value) {
debugger;
return value > 10;
}
checkValue(15);
12. Assegnazione in catena
let a, b, c;
a = b = c = 10;
13. Nomi di funzioni dinamici
const funcName = 'dynamicFunction';
const obj = {
[funcName]() {
return 'Hello!';
}
};
console.log(obj.dynamicFunction());
14. Oggetto arguments
function sum() {
let total = 0;
for (let i = 0; i < arguments.length; i++) total += arguments[i];
return total;
}
console.log(sum(1,2,3)); // 6
15. Operatore unario +
console.log(+'123'); // 123
console.log(+true); // 1
16. Operatore di potenza **
const result = 2 ** 3;
console.log(result); // 8
17. Le funzioni hanno proprietà
function myFunction() {}
myFunction.description = 'Funzione con proprietà';
console.log(myFunction.description);
18. Getter e Setter
const obj = {
_age: 0,
get age() { return this._age; },
set age(v) { if(v >= 0) this._age = v; }
};
obj.age = 30;
console.log(obj.age); // 30
19. Doppio !!
console.log(!!'text'); // true
console.log(!!0); // false
20. Oggetti Map e Set
const mySet = new Set();
mySet.add('apple');
mySet.add('banana');
console.log(mySet.size); // 2
Conclusione
Queste 20 funzionalità poco conosciute di JavaScript possono sembrare piccole, ma possono cambiare il modo in cui scrivi codice: rendendolo più pulito, sicuro e efficiente. Provale nei tuoi progetti per scoprire nuove possibilità.



