我在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
。