Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nivel de gravedad de : advertencia
Descripción
Para asegurarse de que PowerShell realiza comparaciones correctamente, el elemento $null debe estar en el lado izquierdo del operador.
Hay varias razones por las que esto ocurre:
-
$nulles un valor escalar. Cuando el valor del lado izquierdo de un operador es escalar, los operadores de comparación devuelven un valor de booleano. Cuando el valor es una colección, los operadores de comparación devuelven cualquier valor coincidente o una matriz vacía si no hay coincidencias en la colección. - PowerShell realiza la conversión de tipos en el operando derecho, lo que da lugar a comparaciones incorrectas cuando se convierte
$nulla otros tipos escalares.
La única manera de comprobar de forma confiable si un valor es $null es colocar $null en el lado izquierdo del operador para que se realice una comparación escalar.
Cómo
Mueva $null al lado izquierdo de la comparación.
Ejemplo
Incorrecto
function Test-CompareWithNull
{
if ($DebugPreference -eq $null)
{
}
}
Correcto
function Test-CompareWithNull
{
if ($null -eq $DebugPreference)
{
}
}
Pruébelo usted mismo
# This example returns 'false' because the comparison does not return any objects from the array
if (@() -eq $null) { 'true' } else { 'false' }
# This example returns 'true' because the array is empty
if ($null -ne @()) { 'true' } else { 'false' }
Así funciona el operador de comparación por diseño. Pero, como se muestra, esto puede provocar un comportamiento no intuitivo, especialmente cuando la intención es una prueba sencilla para null.
En el ejemplo siguiente se muestra el comportamiento diseñado del operador de comparación cuando el lado izquierdo es una colección. Cada elemento de la colección se compara con el valor del lado derecho. Cuando es true, se devuelve ese elemento de la colección.
PS> 1,2,3,1,2 -eq $null
PS> 1,2,3,1,2 -eq 1
1
1
PS> (1,2,3,1,2 -eq $null).count
0
PS> (1,2,$null,3,$null,1,2 -eq $null).count
2