gpt4 book ai didi

javascript - 属性标记为未定义,即使它完美地在同一行上使用?

转载 作者:行者123 更新时间:2023-11-28 14:44:14 25 4
gpt4 key购买 nike

在 javascript 中,在 Visual Studio Code 中编辑,在 Google Chrome 上运行

if ((piece == null || piece.color !== us)) 

上面的行运行属性没有任何问题,但是,当我将其更改为:

if ((piece == null || piece.color !== us) && piece.color !== UNION) 

或更改此:

if (piece.color == null || piece.color == swap_color(us))

我收到以下错误:

Uncaught TypeError: Cannot read property 'color' of undefined

为什么我在第二种情况下会收到错误,而第一种情况却包含相同的属性?

编辑

我一直在阅读这些关于短路的答案,但它没有点击,有人可以帮我形成一个 bool 表达式吗?基本上,piece.color 可能是三种情况之一

  • 我们
  • 它们(与 swap_color(us) 相同
  • 联盟

我想运行

continue;

在以下情况下(piece.color == null ||piece.color == swap_color(us))piece.color !== UNION

因此我的第一次尝试是错误的

最佳答案

Why do I get the error in the second case, yet the first case included that same property?

bool 运算符是 short circuiting 。这意味着对于

  • 一个 || b:仅当 afalse
  • 时才计算 b
  • a && b:仅当 atrue 时才会评估 b

因此,piece.color !== uspiece == nullfalse时执行,即 piece 不是 nullundefined。这意味着访问 piece.color 将始终“有效”(不会抛出错误)。

另一方面,如果 piece == nulltrue,则执行 piece.color !== UNION。你写的基本上意味着“如果 piece 为 null 并且 piece.color 不是 UNION。但这没有多大意义(因为 piecenull 意味着 piece.color 不存在)。

<小时/>

I want to run continue; in situations when (piece.color == null || piece.color == swap_color(us)) and when piece.color !== UNION

这句话中的“and”翻译为 bool 值“OR”。但您仍然需要检查 piece 是否不 null 并且您可以简化表达式,因为 piece.color !== UNION 暗示 >piece.color == swap_color(us).

if (piece == null || piece.color !== UNION) {
continue;
}

关于javascript - 属性标记为未定义,即使它完美地在同一行上使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47045938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com