Я знаю, что это старый вопрос. Но, основываясь на ответе SwiftNinjaPro, я упростил функцию и исправил некоторые проблемы с NaN. Примечание. Эта функция использовала функцию ES6, функцию стрелки, строки шаблона и экспонентацию. Итак, это может не работать в старых браузерах:
Math.numberRoot = (x, n) => {
return (((x > 1 || x < -1) && n == 0) ? Infinity : ((x > 0 || x < 0) && n == 0) ? 1 : (x < 0 && n % 2 == 0) ? `${((x < 0 ? -x : x) ** (1 / n))}${"i"}` : (n == 3 && x < 0) ? -Math.cbrt(-x) : (x < 0) ? -((x < 0 ? -x : x) ** (1 / n)) : (n == 3 && x > 0 ? Math.cbrt(x) : (x < 0 ? -x : x) ** (1 / n)));
};
Пример:
Math.numberRoot(-64, 3);
Пример (результат мнимого числа):
Math.numberRoot(-729, 6);