Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tingkat Keparahan : Peringatan
Deskripsi
Untuk memastikan bahwa PowerShell melakukan perbandingan dengan benar, elemen $null harus berada di sisi kiri operator.
Ada beberapa alasan mengapa hal ini terjadi:
-
$nulladalah nilai skalar. Ketika nilai di sisi kiri operator adalah skalar, operator perbandingan mengembalikan nilai Boolean. Saat nilai adalah koleksi, operator perbandingan mengembalikan nilai yang cocok atau array kosong jika tidak ada kecocokan dalam koleksi. - PowerShell melakukan pengecoran jenis pada operand sebelah kanan, menghasilkan perbandingan yang salah saat
$nullditransmisikan ke jenis skalar lainnya.
Satu-satunya cara untuk memeriksa apakah nilai $null adalah dengan menempatkan $null di sisi kiri operator sehingga perbandingan skalar dilakukan.
Bagaimana
Pindahkan $null ke sisi kiri perbandingan.
Contoh
Salah
function Test-CompareWithNull
{
if ($DebugPreference -eq $null)
{
}
}
Benar
function Test-CompareWithNull
{
if ($null -eq $DebugPreference)
{
}
}
Cobalah Sendiri
# 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' }
Ini adalah cara kerja operator perbandingan berdasarkan desain. Tetapi, seperti yang ditunjukkan, ini dapat menyebabkan perilaku non-intuitif, terutama ketika niatnya adalah tes sederhana untuk null.
Contoh berikut menunjukkan perilaku operator perbandingan yang dirancang saat sisi kiri adalah koleksi. Setiap elemen dalam koleksi dibandingkan dengan nilai sisi kanan. Jika true, elemen koleksi tersebut dikembalikan.
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