Что означает одно равно в условии javascript if (s = grid[o + i]) {}?
Не могу понять что делает интерпретатор, когда в условии стоить один знак
равенства (if (s = grid[o + i]) {}):
function far(x, y) {
var i = x / cellSize | 0,
j = y / cellSize | 0,
i0 = Math.max(i - 2, 0),
j0 = Math.max(j - 2, 0),
i1 = Math.min(i + 3, gridWidth),
j1 = Math.min(j + 3, gridHeight);
for (j = j0; j < j1; ++j) {
var o = j * gridWidth;
for (i = i0; i < i1; ++i) {
if (s = grid[o + i]) {
var s,
dx = s[0] - x,
dy = s[1] - y;
if (dx * dx + dy * dy < radius2) {
gConnection.append("line")
.attr("x1", x)
.attr("y1", y)
.attr("x2", x)
.attr("y2", y)
.transition()
.attr("x2", s[0])
.attr("y2", s[1]);
return false;
}
}
}
}
return true;
}
Ответы (2 шт):
Автор решения: Yaroslav Molchan
→ Ссылка
Это обычное присвоение, просто оно отрабатывает в условии if, результатом которого будет true, вот упрощенный пример:
console.log(s); // undefined
if (s = 1 + 1) {
var s;
console.log(s); // 2
}
console.log(s); // 2
Мне кажется это неправильный подход и его стоит избегать, в данном случае этот if будет выполнятся всегда и просто лишняя вложенность в коде.
Автор решения: ReinRaus
→ Ссылка
Таким способом проверяется, что в grid есть элемент с индексом o + i.
Данный подход считается плохим стилем кода, но его осознанно могут применить, если хотят экономить байты объема кода.