PowerShell中有两种$ null吗?

时间:2019-03-26 15:37:02

标签: json powershell null automation-null

我在PowerShell 5.1(Windows 10)中偶然发现了一个奇怪的情况,其中ConvertTo-Json生成{}而不是null来生成一个看似空值的对象:

[CmdletBinding()]
param()
function main() {
    $foo1 = $null
    Write-Verbose ("foo1 null? " + ($null -eq $foo1))
    $foo2 = try{1/0}catch{}
    Write-Verbose ("foo2 null? " + ($null -eq $foo2))
    $foo3 = try{1/0}catch{$null}
    return [PSCustomObject]@{"foo1"=$foo1; "foo2" = $foo2; "foo3" = $foo3} | ConvertTo-Json
}
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
main

运行此cmdlet -verbose显示了两个显然$null的变量,它们由ConvertTo-Json进行了不同的序列化:

VERBOSE: foo1 null? True
VERBOSE: foo2 null? True
{
    "foo1":  null,
    "foo2":  {}
    "foo3":  null
}

这是怎么回事-$null是否有不同种类?

因为$foo2 | gm为空,所以我不能$foo2.GetType()$foo2

0 个答案:

没有答案