Ricerca…
Sintassi
- espressione vuota; // Valuta l'espressione e scarta il valore di ritorno
- + Espressione; // Tentativo di convertire un'espressione in un numero
- elimina object.property; // Elimina la proprietà dell'oggetto
- cancella oggetto ["proprietà"]; // Elimina la proprietà dell'oggetto
- tipo di operando; // Restituisce il tipo di operando
- ~ Espressione; // Esegue l'operazione NOT su ogni bit di espressione
- !espressione; // Esegue la negazione logica sull'espressione
- -espressione; // Negare l'espressione dopo aver tentato la conversione in numero
L'operatore unario più (+)
L'unario più ( +
) precede il suo operando e valuta il suo operando. Tenta di convertire l'operando in un numero, se non lo è già.
Sintassi:
+expression
Ritorna:
- un
Number
.
Descrizione
L'operatore unario più ( +
) è il metodo più veloce (e preferito) per convertire qualcosa in un numero.
Può convertire:
- rappresentazioni di stringa di interi (decimali o esadecimali) e galleggianti.
- booleans:
true
,false
. -
null
I valori che non possono essere convertiti valuteranno in NaN
.
Esempi:
+42 // 42
+"42" // 42
+true // 1
+false // 0
+null // 0
+undefined // NaN
+NaN // NaN
+"foo" // NaN
+{} // NaN
+function(){} // NaN
Si noti che il tentativo di convertire una matrice può comportare valori di ritorno imprevisti.
In background, gli array vengono prima convertiti nelle loro rappresentazioni di stringa:
[].toString() === '';
[1].toString() === '1';
[1, 2].toString() === '1,2';
L'operatore tenta quindi di convertire tali stringhe in numeri:
+[] // 0 ( === +'' )
+[1] // 1 ( === +'1' )
+[1, 2] // NaN ( === +'1,2' )
L'operatore di cancellazione
L'operatore delete
cancella una proprietà da un oggetto.
Sintassi:
delete object.property
delete object['property']
Ritorna:
Se la cancellazione ha esito positivo o la proprietà non esiste:
-
true
Se la proprietà da eliminare è una proprietà non configurabile (non può essere cancellata):
-
false
in modalità non rigida. - Genera un errore in modalità rigorosa
Descrizione
L'operatore di delete
non libera la memoria direttamente. Può indirettamente liberare memoria se l'operazione significa che tutti i riferimenti alla proprietà sono andati.
delete
lavori sulle proprietà di un oggetto. Se esiste una proprietà con lo stesso nome sulla catena di prototipi dell'oggetto, la proprietà verrà ereditata dal prototipo.
delete
non funziona su variabili o nomi di funzioni.
Esempi:
// Deleting a property
foo = 1; // a global variable is a property of `window`: `window.foo`
delete foo; // true
console.log(foo); // Uncaught ReferenceError: foo is not defined
// Deleting a variable
var foo = 1;
delete foo; // false
console.log(foo); // 1 (Not deleted)
// Deleting a function
function foo(){ };
delete foo; // false
console.log(foo); // function foo(){ } (Not deleted)
// Deleting a property
var foo = { bar: "42" };
delete foo.bar; // true
console.log(foo); // Object { } (Deleted bar)
// Deleting a property that does not exist
var foo = { };
delete foo.bar; // true
console.log(foo); // Object { } (No errors, nothing deleted)
// Deleting a non-configurable property of a predefined object
delete Math.PI; // false ()
console.log(Math.PI); // 3.141592653589793 (Not deleted)
L'operatore typeof
L'operatore typeof
restituisce il tipo di dati dell'operando non valutato come una stringa.
Sintassi:
typeof operand
Ritorna:
Questi sono i possibili valori di ritorno da typeof
:
genere | Valore di ritorno |
---|---|
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Symbol (ES6) | "symbol" |
Oggetto Function | "function" |
document.all | "undefined" |
Oggetto host (fornito dall'ambiente JS) | Dipendente dall'implementazione |
Qualsiasi altro oggetto | "object" |
Il comportamento insolito di document.all
con l'operatore typeof
deriva dal suo precedente utilizzo per rilevare i browser legacy. Per ulteriori informazioni, vedere Perché è document.all definito ma typeof document.all restituisce "undefined"?
Esempi:
// returns 'number'
typeof 3.14;
typeof Infinity;
typeof NaN; // "Not-a-Number" is a "number"
// returns 'string'
typeof "";
typeof "bla";
typeof (typeof 1); // typeof always returns a string
// returns 'boolean'
typeof true;
typeof false;
// returns 'undefined'
typeof undefined;
typeof declaredButUndefinedVariable;
typeof undeclaredVariable;
typeof void 0;
typeof document.all // see above
// returns 'function'
typeof function(){};
typeof class C {};
typeof Math.sin;
// returns 'object'
typeof { /*<...>*/ };
typeof null;
typeof /regex/; // This is also considered an object
typeof [1, 2, 4]; // use Array.isArray or Object.prototype.toString.call.
typeof new Date();
typeof new RegExp();
typeof new Boolean(true); // Don't use!
typeof new Number(1); // Don't use!
typeof new String("abc"); // Don't use!
// returns 'symbol'
typeof Symbol();
typeof Symbol.iterator;
L'operatore del vuoto
L'operatore void
valuta l'espressione data e quindi restituisce undefined
.
Sintassi:
void expression
Ritorna:
-
undefined
Descrizione
L'operatore void
viene spesso utilizzato per ottenere il valore primitivo undefined
, mediante la scrittura di void 0
o void(0)
. Si noti che void
è un operatore, non una funzione, quindi ()
non è richiesto.
Di solito il risultato di un'espressione di void
e undefined
può essere usato in modo intercambiabile.
Tuttavia, nelle versioni precedenti di ECMAScript, a window.undefined
potrebbe essere assegnato qualsiasi valore ed è ancora possibile utilizzare undefined
come nome per le variabili dei parametri di funzione all'interno delle funzioni, interrompendo in tal modo altri codici che si basano sul valore di undefined
.
void
restituirà sempre il vero valore undefined
.
void 0
è anche comunemente usato nella minificazione del codice come un modo più breve di scrivere undefined
. Inoltre, è probabilmente più sicuro dato che altri codici potrebbero aver manomesso window.undefined
.
Esempi:
Ritorno undefined
:
function foo(){
return void 0;
}
console.log(foo()); // undefined
Modifica del valore di undefined
all'interno di un determinato ambito:
(function(undefined){
var str = 'foo';
console.log(str === undefined); // true
})('foo');
L'operatore unario negazione (-)
La negazione unaria ( -
) precede il suo operando e lo nega, dopo aver provato a convertirlo in numero.
Sintassi:
-expression
Ritorna:
- un
Number
.
Descrizione
La negazione unaria ( -
) può convertire gli stessi tipi / valori dell'armatore unario più ( +
).
I valori che non possono essere convertiti valuteranno in NaN
(non c'è -NaN
).
Esempi:
-42 // -42
-"42" // -42
-true // -1
-false // -0
-null // -0
-undefined // NaN
-NaN // NaN
-"foo" // NaN
-{} // NaN
-function(){} // NaN
Si noti che il tentativo di convertire una matrice può comportare valori di ritorno imprevisti.
In background, gli array vengono prima convertiti nelle loro rappresentazioni di stringa:
[].toString() === '';
[1].toString() === '1';
[1, 2].toString() === '1,2';
L'operatore tenta quindi di convertire tali stringhe in numeri:
-[] // -0 ( === -'' )
-[1] // -1 ( === -'1' )
-[1, 2] // NaN ( === -'1,2' )
L'operatore NOT bit a bit (~)
NOT ( ~
) bit a bit esegue un'operazione NOT su ciascun bit in un valore.
Sintassi:
~expression
Ritorna:
- un
Number
.
Descrizione
La tabella di verità per l'operazione NOT è:
un | NON a |
---|---|
0 | 1 |
1 | 0 |
1337 (base 10) = 0000010100111001 (base 2)
~1337 (base 10) = 1111101011000110 (base 2) = -1338 (base 10)
Un bit a bit non su un numero risulta in: -(x + 1)
.
Esempi:
valore (base 10) | valore (base 2) | ritorno (base 2) | ritorno (base 10) |
---|---|---|---|
2 | 00000010 | 11111100 | -3 |
1 | 00000001 | 11111110 | -2 |
0 | 00000000 | 11111111 | -1 |
-1 | 11111111 | 00000000 | 0 |
-2 | 11111110 | 00000001 | 1 |
-3 | 11111100 | 00000010 | 2 |
L'operatore logico NOT (!)
L'operatore logico NOT ( !
) Esegue la negazione logica su un'espressione.
Sintassi:
!expression
Ritorna:
- un
Boolean
.
Descrizione
L'operatore logico NOT ( !
) Esegue la negazione logica su un'espressione.
I valori booleani vengono semplicemente invertiti !true === false
e !false === true
.
I valori non booleani vengono convertiti in valori booleani per primi, quindi vengono annullati.
Ciò significa che un doppio NOT logico ( !!
) può essere utilizzato per trasmettere qualsiasi valore a un valore booleano:
!!"FooBar" === true
!!1 === true
!!0 === false
Questi sono tutti uguali a !true
:
!'true' === !new Boolean('true');
!'false' === !new Boolean('false');
!'FooBar' === !new Boolean('FooBar');
![] === !new Boolean([]);
!{} === !new Boolean({});
Questi sono tutti uguali a !false
:
!0 === !new Boolean(0);
!'' === !new Boolean('');
!NaN === !new Boolean(NaN);
!null === !new Boolean(null);
!undefined === !new Boolean(undefined);
Esempi:
!true // false
!-1 // false
!"-1" // false
!42 // false
!"42" // false
!"foo" // false
!"true" // false
!"false" // false
!{} // false
![] // false
!function(){} // false
!false // true
!null // true
!undefined // true
!NaN // true
!0 // true
!"" // true
Panoramica
Gli operatori unari sono operatori con un solo operando. Gli operatori unari sono più efficienti delle chiamate di funzioni JavaScript standard. Inoltre, gli operatori unari non possono essere sovrascritti e pertanto la loro funzionalità è garantita.
Sono disponibili i seguenti operatori unari:
Operatore | operazione | Esempio |
---|---|---|
delete | L'operatore delete cancella una proprietà da un oggetto. | esempio |
void | L'operatore void scarta il valore di ritorno di un'espressione. | esempio |
typeof | L'operatore typeof determina il tipo di un dato oggetto. | esempio |
+ | L'operatore unario più converte il suo operando in tipo Numero. | esempio |
- | L'operatore di negazione unario converte il suo operando in Numero, quindi lo nega. | esempio |
~ | Operatore NOT bit a bit. | esempio |
! | Operatore logico NOT. | esempio |