I like Math.js a lot. It is (mostly) a numerical library though (apart from units of measurement and the ability to define functions). I'd challenge that it supports "powerful symbolic computation": CAS traditionally solve equations for example, manipulate polynomials, simplify expressions, add/multiply polynomials/vectors/matrices having elements expressed in symbols rather than having values, that sort of things.