在IF函数中使用OR运算符时,比较条件的顺序是否重要?

佩约

我试图更好地理解IF语句中的条件。当我更改条件的顺序时,我收到未定义的TypeError。

我收到TypeError: Cannot read property 'length' of undefined时的顺序更改为:

if (col === maze[row].length || row < 0 || col < 0 || row === maze.length) {
    return
}

在IF函数中使用OR运算符时,比较的顺序是否重要?是什么原因导致TypeError订单的书写方式不同?

工作代码库:

const maze = [
  [' ', ' ', ' ', '*', ' ', ' ', ' '],
  ['*', '*', ' ', '*', ' ', '*', ' '],
  [' ', ' ', ' ', ' ', ' ', ' ', ' '],
  [' ', '*', '*', '*', '*', '*', ' '],
  [' ', ' ', ' ', ' ', ' ', ' ', 'e'],
];

const solve = (maze, row = 0, col = 0, path = "") => {

  if (row < 0 || col < 0 || row === maze.length || col === maze[row].length) {
    return
  }

  // Base case
  if (maze[row][col] === "e") {
    return console.log(`Solved at (${row}, ${col})! Path to exit: ${path}`)

    // General case
  } else if (maze[row][col] === "*") {
    return
  }

  // Marker
  maze[row][col] = "*"

  // Right
  solve(maze, row, col + 1, path.concat("R"))

  // Down
  solve(maze, row + 1, col, path.concat("D"))

  // Left
  solve(maze, row, col - 1, path.concat("L"))

  // Up
  solve(maze, row - 1, col, path.concat("U"))

  // Remove marker
  maze[row][col] = " "
}

console.log(solve(maze));
精神病

您需要牢记两件事。

  1. Javascript评估是从左到右。
  2. OR||运算符发生短路。这意味着它第一次遇到一个真表达式时,它会“短路”,即绕过所有其他表达式并只返回一个真表达式。这是基本的布尔代数。

关于您对的疑问TypeError: Cannot read property 'length' of undefinedmaze[row]maze未定义。在运行您的代码片段时,事实证明这maze[row]是这里的罪魁祸首。这可能是因为,由于您row-1在代码行中执行了,可能会变为负数,从而导致maze[row]未定义。

如果您下订单

if (row < 0 || col < 0 || col === maze[row].length || row === maze.length) {
    return
  }

每当row < 0负运算,OR运算都会使所有其他表达式短路。因此maze[row].length,永远不会评估,并且不会遇到未定义的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Ruby中使用.where和比较运算符

来自分类Dev

删除的构造函数/运算符的可访问性是否重要?

来自分类Dev

在python条件语句中使用模运算符

来自分类Dev

使用“:”时的运算符优先顺序(冒号)

来自分类Dev

使用is运算符时出现异常的比较结果

来自分类Dev

在PHP'switch'语句中使用比较运算符

来自分类Dev

在VBA中使用Excel的比较运算符?

来自分类Dev

在snprintf中使用sizeof运算符是否合适

来自分类Dev

在函数参数中使用<<运算符

来自分类Dev

与空列表进行比较时使用“ ==”运算符是否错误?

来自分类Dev

在UIInput的值中使用EL条件运算符时出现javax.el.PropertyNotWritableException

来自分类Dev

使用条件运算符

来自分类Dev

在条件中使用逻辑运算符和比较运算符(javascript)

来自分类Dev

在MongoDB中使用$ near运算符反转距离顺序

来自分类Dev

C中使用逗号运算符和赋值的求值顺序是否可以预测?

来自分类Dev

当通过diff定义函数时,为什么必须在maple中使用unapply运算符?

来自分类Dev

比较运算符的评估顺序?

来自分类Dev

在SQL中使用运算符之间的时间值比较

来自分类Dev

如何在vuelidate的验证中使用条件运算符?

来自分类Dev

相等运算符的顺序在Ruby中重要吗?

来自分类Dev

在函数调用中使用*运算符

来自分类Dev

删除的构造函数/运算符的可访问性是否重要?

来自分类Dev

使用is运算符时出现异常的比较结果

来自分类Dev

比较条件时使用逻辑运算符AND或

来自分类Dev

在UIInput的值中使用EL条件运算符时出现javax.el.PropertyNotWritableException

来自分类Dev

比较运算符无法在if语句PHP中使用

来自分类Dev

在C ++构造函数中使用new运算符是否正确?

来自分类Dev

在 if () 运算符中使用 &&

来自分类Dev

在 Bash 的 for 循环中使用 if 的算术比较运算符

Related 相关文章

  1. 1

    在Ruby中使用.where和比较运算符

  2. 2

    删除的构造函数/运算符的可访问性是否重要?

  3. 3

    在python条件语句中使用模运算符

  4. 4

    使用“:”时的运算符优先顺序(冒号)

  5. 5

    使用is运算符时出现异常的比较结果

  6. 6

    在PHP'switch'语句中使用比较运算符

  7. 7

    在VBA中使用Excel的比较运算符?

  8. 8

    在snprintf中使用sizeof运算符是否合适

  9. 9

    在函数参数中使用<<运算符

  10. 10

    与空列表进行比较时使用“ ==”运算符是否错误?

  11. 11

    在UIInput的值中使用EL条件运算符时出现javax.el.PropertyNotWritableException

  12. 12

    使用条件运算符

  13. 13

    在条件中使用逻辑运算符和比较运算符(javascript)

  14. 14

    在MongoDB中使用$ near运算符反转距离顺序

  15. 15

    C中使用逗号运算符和赋值的求值顺序是否可以预测?

  16. 16

    当通过diff定义函数时,为什么必须在maple中使用unapply运算符?

  17. 17

    比较运算符的评估顺序?

  18. 18

    在SQL中使用运算符之间的时间值比较

  19. 19

    如何在vuelidate的验证中使用条件运算符?

  20. 20

    相等运算符的顺序在Ruby中重要吗?

  21. 21

    在函数调用中使用*运算符

  22. 22

    删除的构造函数/运算符的可访问性是否重要?

  23. 23

    使用is运算符时出现异常的比较结果

  24. 24

    比较条件时使用逻辑运算符AND或

  25. 25

    在UIInput的值中使用EL条件运算符时出现javax.el.PropertyNotWritableException

  26. 26

    比较运算符无法在if语句PHP中使用

  27. 27

    在C ++构造函数中使用new运算符是否正确?

  28. 28

    在 if () 运算符中使用 &&

  29. 29

    在 Bash 的 for 循环中使用 if 的算术比较运算符

热门标签

归档