3 && true возвращает ноль. Почему?!!!

Посмотрите на пример ниже. Важно проверить перед оператором сравнения в JavaScript.

В этом примере проверяется, действительно ли двоичное дерево, путем итерации с использованием структуры данных стека.

До:

// iterative 
var isValidBST = function(root) {
    if(!root) {
        return true
    }
    let stack = [{node: root, lower: null, upper: null}]
    while(stack.length !== 0) {
        const { node, lower, upper } = stack.pop()
if(!node) { continue }
        if((lower && node.val <= lower) || (upper && node.val >= upper)) {
            return false
        }
        stack.push({node: node.left, lower, upper: node.val })
        stack.push({node: node.right, lower: node.val, upper})
    }
    return true
};

После:

var isValidBST = function(root) {
    if(!root) {
        return true
    }
    let stack = [{val: root.val, left: root.left, right: root.right, lower: null, upper: null}]
    while(stack.length !== 0) {
        let current = stack.pop()

        if(current.val <= current.lower || current.val >= current.upper) {
            return false
        }
        console.log({val: current.left.val, left: current.left, right: current.right,  lower: current.lower, upper: current.val})
        stack.push({val: current.left.val, left: current.left, right: current.right,  lower: current.lower, upper: current.val})
        stack.push({val: current.right.val, left: current.left, right: current.right, lower: current.val, upper: current.upper})
        console.log(stack)
    }
    return true
};

Точка

number && Boolean возвращает ноль!

i.e) 4 && ture =› null

Ваше здоровье