【发布时间】:2020-09-18 04:48:08
【问题描述】:
我试图更好地理解 IF 语句中的条件。当我更改条件的顺序时,我收到未定义的 TypeError。
当订单更改为:
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));
【问题讨论】:
-
是的,当然这很重要 - js 是从左到右评估的,
||运算符会短路。 -
感谢@Bergi 的回复。我读到了运算符优先级link。当订单以不同方式编写时,我仍在努力理解导致 TypeError 的原因。您对为什么会发生 TypeError 有任何想法吗?
-
当第一个真值条件发生时,其余条件不被评估并返回真值。这就是为什么即使后面的条件之一无效(您正在尝试读取未定义的长度属性),您也不会收到类型错误。当你改变条件的顺序,并且错误导致的条件是第一个时,会抛出错误,因为无效的部分将被评估。
标签: javascript if-statement or-operator