我试图更好地理解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));
您需要牢记两件事。
||
运算符发生短路。这意味着它第一次遇到一个真表达式时,它会“短路”,即绕过所有其他表达式并只返回一个真表达式。这是基本的布尔代数。关于您对的疑问TypeError: Cannot read property 'length' of undefined
,maze[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] 删除。
我来说两句