¿Por qué estamos poniendo paréntesis al crear un objeto, por ejemplo, qué sucederá si eliminamos los paréntesis alrededor de la (nueva Cadena())?
var upper = (new String(str)).toUpperCase();Esos paréntesis no tienen sentido, new tiene una prioridad alta y el resultado sería exactamente el mismo si no tuvieras los paréntesis allí.
Su pregunta se aplica generalmente (por ejemplo, (new Date()).toISOString() vs. new Date().toISOString() ), pero solo por lo que vale, new String(x) en JavaScript generalmente es innecesario en el mejor de los casos o potencialmente un error en el peor de los casos. Crea un objeto de cadena, mientras que normalmente interactuamos con primitivas de cadena. La diferencia puede ser importante a veces, por ejemplo, new String("x") == new String("x") es false , porque dos objetos separados nunca son == entre sí.
Casi nunca hay ninguna razón para usar un objeto de cadena.
Ese código puede haber estado tratando de defenderse contra la posibilidad de que str no fuera una cadena, convirtiéndola en una. Si es así, elimine el new :
var upper = String(str).toUpperCase(); String sin new hace una conversión de tipo (a una cadena primitiva).