You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/05-data-types/03-string/3-truncate/task.md
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ importance: 5
4
4
5
5
# Troncate il testo
6
6
7
-
Create una funzione `truncate(str, maxlength)` che controlla la lunghezza di `str` e, se questa eccee`maxlength` -- rimpiazzate la fine di `str` con il carattere `"…"`, in modo tale da ottenere una lunghezza pari a `maxlength`.
7
+
Create una funzione `truncate(str, maxlength)` che controlla la lunghezza di `str` e, se questa eccede`maxlength` -- rimpiazzate la fine di `str` con il carattere `"…"`, in modo tale da ottenere una lunghezza pari a `maxlength`.
8
8
9
9
Come risultato la funzione dovrebbe troncare la stringa (se ce n'è bisogno).
Copy file name to clipboardExpand all lines: 1-js/05-data-types/03-string/article.md
+27-24Lines changed: 27 additions & 24 deletions
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
In JavaScript, i dati di tipo testuale vengono memorizzati in stringhe. Non esiste un tipo separato per i caratteri singoli.
4
4
5
-
Il formato interno per le stringhe è sempre [UTF-16](https://en.wikipedia.org/wiki/UTF-16), non viene influenzato dalla codifica della pagina.
5
+
Il formato utilizzato per le stringhe è sempre [UTF-16](https://en.wikipedia.org/wiki/UTF-16), non viene influenzato dalla codifica della pagina.
6
6
7
7
## Apici
8
8
@@ -17,7 +17,7 @@ let double = "double-quoted";
17
17
let backticks =`backticks`;
18
18
```
19
19
20
-
Gli apici singoli e doppi sono essenzialmente uguali. I backticks, oltretutto, ci consentono di includere una qualsiasi espressione all'interno della stringa, raccogliendole all'interno di `${…}`:
20
+
Gli apici singoli e doppi sono essenzialmente uguali. I backticks, invece, ci consentono di includere una qualsiasi espressione all'interno della stringa, inserendola all'interno di `${…}`:
21
21
22
22
```js run
23
23
functionsum(a, b) {
@@ -63,11 +63,11 @@ alert(guestList); // una lista di guest multi riga
63
63
Ad esempio, queste due funzioni portano allo stesso risultato:
64
64
65
65
```js run
66
-
alert( "Hello\nWorld" ); // due righe con il simbolo "nuova riga"
66
+
let str1 ="Hello\nWorld"; // due righe utilizzando il "carattere nuova riga"
67
67
68
68
// due righe utilizzando le backticks
69
-
alert(`Hello
70
-
World` );
69
+
let str2 =`Hello
70
+
World`;
71
71
```
72
72
73
73
Ci sono altri caratteri "speciali" meno comuni. Qui una lista:
@@ -109,6 +109,7 @@ Ovviamente, questo è valido per un apice uguale a quello utilizzato in apertura
109
109
```js run
110
110
alert( `I'm the Walrus!` ); // I'm the Walrus!
111
111
```
112
+
112
113
Da notare che il backslash `\` ha l'unico scopo di aiutare JavaScript nella lettura della stringa, questo verrà poi rimosso. La stringa in memoria non avrà `\`. Lo avrete sicuramente notato con gli `alert` dei vari esempi sopra.
113
114
114
115
Ma se volessimo realmente mostrare un backslash `\` dentro la stringa?
@@ -119,7 +120,7 @@ E' possibile farlo, ma dobbiamo esplicitarlo con un doppio backslash `\\`:
119
120
alert( `The backslash: \\` ); // The backslash: \
120
121
```
121
122
122
-
## String lengt
123
+
## String length
123
124
124
125
La proprietà `length` (lunghezza) contiene la lunghezza della stringa:
125
126
@@ -256,11 +257,11 @@ while (true) {
256
257
if (foundPos ==-1) break;
257
258
258
259
alert( `Found at ${foundPos}` );
259
-
pos = foundPos +1; // continua la ricerca a partire dalla prossima posizio
260
+
pos = foundPos +1; // continua la ricerca a partire dalla prossima posizione
260
261
}
261
262
```
262
263
263
-
Lo stesso algoritmo può essere applicato in manierà più breve:
264
+
Lo stesso algoritmo può essere riscritto più brevemente:
Un altro metodo simile è [str.lastIndexOf(substr, position)](mdn:js/String/lastIndexOf) che ricerca a partire dalla fine della stringa.
279
+
Un altro metodo simile è [str.lastIndexOf(substr, position)](mdn:js/String/lastIndexOf), che effettua la ricerca partendo dalla fine della stringa.
279
280
280
281
Elenca quindi le occorrenze in ordine inverso.
281
282
```
282
283
283
-
C'è solo un piccolo inconveniente con `indexOf` nei test `if`. Non possiamo inserirlo in un `if` in questo modo:
284
+
C'è solo un piccolo inconveniente dovuto all'utilizzo di `indexOf` all'interno delle espressioni `if`. Non possiamo inserirlo in un `if` in questo modo:
284
285
285
286
```js run
286
287
let str = "Widget with id";
@@ -340,7 +341,7 @@ Ricordatevi solo che: `if (~str.indexOf(...))` si legge come "se trovi".
340
341
341
342
Per essere precisi, numeri molto grandi vengono troncati a 32bit dall'operatore `~`, esistono altri numeri che potrebbero dare `0`, il più piccolo è `~4294967295=0`. Questo fa si che questo tipo di controlli siano corretti solamente se una stringa non è troppo lunga.
342
343
343
-
Attualmente questo trucco lo troviamo solamente nei codici vecchi, poichè JavaScript moderno fornisce un metodo dedicato, `.includes`(vedi sotto).
344
+
Attualmente questo trucco lo troviamo solamente nei codici vecchi, poiché JavaScript moderno fornisce un metodo dedicato, `.includes`(vedi sotto).
344
345
345
346
### includes, startsWith, endsWith
346
347
@@ -448,16 +449,16 @@ Ricapitoliamo questi metodi per evitare confusione:
448
449
449
450
450
451
```smart header="Quale scegliere?"
451
-
Tutti quelli esaminati possono portare a termine il lavoro. Formalmente, `substr` ha un piccolo inconveniente: non è descritto nelle specifiche del core JavaScript, ma in quelle di Annex B, che copre solo le caratteristiche utili nello sviluppo browser. Quindi ambienti diversi da browser potrebbero non supportarla. Ma nella pratica viene utilizzata ovunque.
452
+
Tutti i metodi esaminati possono portare a termine il lavoro. Formalmente, `substr` ha un piccolo inconveniente: non è descritto nelle specifiche del core JavaScript, ma in quelle di Annex B, che copre solo le caratteristiche utili nello sviluppo browser. Quindi ambienti diversi dal browser potrebbero non supportarla. Ma nella pratica viene utilizzata ovunque.
452
453
453
-
L'autore della guida si trova spesso ad utilizzare `slice`.
454
+
L'autore della guida si trova spesso ad utilizzare il metodo `slice`.
454
455
```
455
456
456
-
## Confrontare stringhe
457
+
## Confronto tra stringhe
457
458
458
459
Come sappiamo dal capitolo <info:comparison>, le stringhe vengono confrontate carattere per carattere in ordine alfabetico.
459
460
460
-
Sebbene ci siano delle stranezze.
461
+
Sebbene ci siano dei casi particolari.
461
462
462
463
1. Una lettera minuscola è sempre maggiore di una maiuscola:
463
464
@@ -496,7 +497,7 @@ Tutte le stringhe vengono codificate utilizzando [UTF-16](https://en.wikipedia.o
496
497
Possiamo anche aggiungere caratteri unicode tramite il loro codice utilizzando `\u` seguito dal codice esadecimale:
497
498
498
499
```js run
499
-
// 90 è 5a nel istema esadecimale
500
+
// 90 è 5a nel sistema esadecimale
500
501
alert( '\u005a' ); // Z
501
502
```
502
503
@@ -525,11 +526,11 @@ I caratteri vengono confrontati utilizzando il loro codice numerico. Un codice m
525
526
526
527
### Confronto tra stringhe corretto
527
528
528
-
Il "giusto" algoritmo per confrontare stringhe è più complesso di come possa sembrare, poiché l'alfabeto è diverso per ogni lingua. Lettere uguali possono avere posizioni diverse nei vari alfabeti.
529
+
L'algoritmo più corretto da utilizzare per confrontare stringhe è più complesso di quanto si possa pensare, poiché l'alfabeto è diverso per ogni lingua. Lettere uguali possono avere posizioni diverse nei vari alfabeti.
529
530
530
531
Quindi il browser deve sapere quale lingua utilizzare nel confronto.
531
532
532
-
Fortunatamente, tutti i browser moderni (IE10 + richiede una libreria esterna [Intl.js](https://github.com/andyearnshaw/Intl.js/)) supportano lo standard internazionale [ECMA-402](http://www.ecma-international.org/ecma-402/1.0/ECMA-402.pdf).
533
+
Fortunatamente, tutti i browser moderni (IE10 richiede una libreria esterna [Intl.js](https://github.com/andyearnshaw/Intl.js/)) supportano lo standard internazionale [ECMA-402](http://www.ecma-international.org/ecma-402/1.0/ECMA-402.pdf).
533
534
534
535
Questo fornisce uno speciale metodo per confrontare stringhe in lingue diverse, seguendo delle regole.
535
536
@@ -573,16 +574,16 @@ Da notare che le coppie surrogate non esistevano al momento della creazione di J
573
574
574
575
In realtà abbiamo un solo simbolo in ogni stringa sopra, ma la `length` vale `2`.
575
576
576
-
`String.fromCodePoint` e `str.codePointAt` sono dei rari metodi che operano correttamente con le coppie surrogate. Sono apparsi di recente nel linguaggio. Prima di loro, esisteva solo [String.fromCharCode](mdn:js/String/fromCharCode) e [str.charCodeAt](mdn:js/String/charCodeAt). Sono esattamente la stessa cosa di `fromCodePoint/codePointAt`, semplicemente non funzionano con le coppie surrogate.
577
+
`String.fromCodePoint` e `str.codePointAt` sono dei metodi utilizzati per lavorare con le coppie surrogate. Sono apparsi di recente nel linguaggio. Prima di loro, esisteva solo [String.fromCharCode](mdn:js/String/fromCharCode) e [str.charCodeAt](mdn:js/String/charCodeAt). Sono esattamente la stessa cosa di `fromCodePoint/codePointAt`, semplicemente non funzionano con le coppie surrogate.
577
578
578
-
Però cercare di ottenere un simbolo può essere difficile, perché una coppia surrogata viene trattata come due caratteri:
579
+
Però cercare di ottenere un simbolo può essere difficile, poiché una coppia surrogata viene trattata come due caratteri:
579
580
580
581
```js run
581
582
alert( '𝒳'[0] ); // uno strano simbolo...
582
583
alert( '𝒳'[1] ); // ...parte di una coppia surrogata
583
584
```
584
585
585
-
Da notare che un pezzo di una coppia surrogata non ha alcun senza l'altro. Quindi nell'esempio sopra verrà mostrata "spazzatura".
586
+
Da notare che un pezzo di una coppia surrogata non ha alcun senso senza l'altro. Quindi nell'esempio sopra verrà mostrata "spazzatura".
586
587
587
588
Tecnicamente, le coppie surrogate sono decifrabili anche per i loro codici: se il primo carattere ha un intervallo di codice di `0xd800..0xdbff`. Allora il successivo carattere (seconda parte) deve avere l'intervallo `0xdc00..0xdfff`. Questi intervalli sono riservati esclusivamente per coppie surrogate definite dallo standard.
588
589
@@ -599,7 +600,7 @@ Nel capitolo <info:iterable> troverete molti altri modi per operare con le coppi
599
600
600
601
### Lettere speciali e normalizzazione
601
602
602
-
In molti lingue ci sono lettere composte da un carattere di base completato da un simbolo che può stare sopra/sotto.
603
+
In molte lingue ci sono lettere composte da un carattere di base completato da un simbolo che può stare sopra/sotto.
603
604
604
605
Ad esempio, la lettera `a` può essere il carattere di base per: `àáâäãåā`. Molti dei caratteri "composti" hanno una loro rappresentazione nella tabella UTF-16. Però non tutte, poiché le combinazioni possibili sono veramente molte.
605
606
@@ -627,7 +628,9 @@ Ad esempio:
627
628
628
629
```js run
629
630
630
-
alert( s1 == s2 ); // false though the characters look identical (?!)
631
+
alert( s1 == s2 ); // false, nonostante i due caratteri sembrino identici (?!)
632
+
633
+
```
631
634
632
635
Per risolvere questo, esiste un algoritmo di "normalizzazione unicode" che porta ogni stringa alla forma "normale".
In realtà, non è sempre cosi. La ragione è che il simbolo `Ṩ` è "abbastanza comune", quindi la tabella UTF-16 lo contiene già.
649
652
650
-
Se volete apprendere di più riguardo la normalizzazione e le sue varianti -- vengono descritte nell'appendice dello standard Unicode: [Unicode Normalization Forms](http://www.unicode.org/reports/tr15/), nella pratica le informazioni fornite in questa sezione sono sufficienti.
653
+
Se volete approfondire il tema della normalizzazione e le sue varianti -- vengono descritte nell'appendice dello standard Unicode: [Unicode Normalization Forms](http://www.unicode.org/reports/tr15/), nella pratica le informazioni fornite in questa sezione, ti saranno sufficienti.
0 commit comments