Recientemente produje un error estúpido:
"use strict"; function doSomething() { let testObject = {a: "foo", b: "bar", parent: "bla"}; if (parent in testObject) { console.log("has a parent") } else { console.log("does not have a parent") } } doSomething(); Debido a las comillas que faltaban en el parent literal, el intérprete accedió a window.parent y no hubo ningún ReferenceError como lo habría habido si hubiera escrito a in testObject .
Obviamente, JavaScript no podía saber que mi intención no era acceder a window.parent y, por lo tanto, no podría haber arrojado un error. Pero me pregunto si hay algún tipo de modo de depuración que emita una advertencia a la consola en tales casos, algo así como: "el parent no está definido en este ámbito, accediendo a la variable global en su lugar".
No, JavaScript no tiene un modo "más estricto" que le haya advertido de esto. Algunos linters podrían hacerlo (aunque ESLint no parece hacerlo, al menos con la configuración predeterminada de la página de demostración).
Sin embargo, TypeScript lo habría hecho ( ejemplo ), ya que window.parent no es una cadena o símbolo, por lo que no tiene sentido como el operando de la izquierda de in . La adopción de TypeScript tiene costos, por supuesto, pero tiene beneficios como este.
No, no hay nada más estricto que el modo estricto.