以下代码段输出true:
$x = ($false -eq "")
Write-Host $x
$x = ($false -eq 0)
Write-Host $x
Run Code Online (Sandbox Code Playgroud)
由于$ false和""是不同的数据类型,它不应该自动等于false吗?
mjo*_*nor 24
进行比较操作时,PowerShell将自动尝试强制操作员右侧的对象以匹配左侧的类型.
在强制[string]转换的情况下[bool],任何非空字符串都将计算为$true,并且空字符串将计算为$false.有关将不同数据类型自动转换为布尔值的更多信息,请参阅博客文章布尔值和运算符.
这有时会导致意想不到的结果:
PS C:\> [bool]"$false"
True
Run Code Online (Sandbox Code Playgroud)
字符串值为$false'False',这是一个非空字符串,并$true在转换为时进行求值[bool].
当操作数具有不同的数据类型时,它还使比较操作不可交换:
PS C:\> '' -eq $false
False
PS C:\> $false -eq ''
TrueRun Code Online (Sandbox Code Playgroud)
在第一次比较中$false,为了匹配第一个操作数('')的类型,将值自动转换为字符串,因此您实际上正在进行比较'' -eq 'False',评估结果为$false.
在第二个比较中,字符串''被自动转换为布尔值,同样为了匹配第一个操作数($false)的类型,所以这次你实际上是比较$false -eq $false,评估为$true.
| 归档时间: |
|
| 查看次数: |
4506 次 |
| 最近记录: |