为何PowerShell严格模式下访问不存在的哈希表键未抛出异常?
问题解答
在PowerShell中,Set-StrictMode对哈希表的索引访问和成员点访问的校验规则存在差异,这就是两种访问方式结果不同的核心原因:
- 针对哈希表的索引访问(
$Foo["bar"]):即便启用了Set-StrictMode -Version Latest和$ErrorActionPreference = "Stop",访问不存在的键只会返回$null,不会抛出异常。这是PowerShell哈希表的固有设计——索引访问不存在的键默认返回空值,严格模式并未修改这一行为。 - 针对哈希表的成员点访问(
$Foo.bar):这种方式属于对象成员访问逻辑,Set-StrictMode会严格校验目标对象是否存在该成员。由于哈希表本身没有名为bar的属性,严格模式会触发异常,这与你的预期一致。
简言之,严格模式对哈希表的两种访问方式采取了不同的校验逻辑,索引访问空键返回$null是PowerShell保留的默认行为,不受严格模式约束。
内容的提问来源于stack exchange,提问作者GrandeKnight
相关产品推荐
相关产品推荐

