Why is string number addition not coalescing intuitively

Why is the last operation returning 20?

console.log(2 + 2); // equals 4
console.log("2" + "2"); // equals "22"
console.log(2 + 2 - 2); // equals 2
console.log("2" + "2" - "2"); // equals 20

2 answers

  • answered 2021-05-17 05:42 CertainPerformance

    + and - evaluate left-to-right. When either operand is a string, the result is concatenation. When both are numbers, the result is addition.

    In contrast, - will always coerce both sides to numbers.

    '2' + '2' - '2'
    

    does

    // left-to-right
    ('2' + '2') - '2'
    // both sides are strings, so concatenate
    '22' - '2'
    // operator is -, so coerce both sides to numbers
    22 - 2
    20
    

  • answered 2021-05-17 05:47 Charlie

    The signs + and - work very differently in string concatenation. The + operator gives direct concatenation instructions on strings whereas the - operator tries to coerce the types and perform the mathematical function.

    console.log("2" + "2");
    console.log(typeof ("2" + "2"));
    
    console.log("2" - "2");
    console.log(typeof("2" - "2"));