Encuentro que JavaScript establece una variable igual a indefinida en lugar de arrojar un error hace que la depuración sea mucho más difícil y nunca me ha resultado útil. Por ejemplo:
var a = ["apple","banana","orange"] var b = a[5]establecería b en indefinido en lugar de arrojar un error. Solo cuando b se usa más tarde, se arrojará un error, lo que dificultará ver la fuente del error.
Entonces podría verificar el valor de b:
if(b===undefined){ throw "variable undefined" }pero no me gustaría hacer esto cada vez que defino o cambio el valor de cualquier variable.
¿Hay alguna forma de hacer que JavaScript arroje automáticamente un error cada vez que una variable se establece en indefinida?
Específicamente para este caso y otros, he preparado una función que toma un objeto y un arreglo de claves/índices y devuelve el valor objetivo, o predeterminado en caso de indefinido. Puedes cambiarlo para que arroje un error.
Simplemente significa que cuando quiera el valor del objeto, use esta sintaxis: gov(obj, [key1, key2]) en lugar de obj[key1][key2] .
function gov(object, arr_keys, default_value) { if (!typeof arr_keys == "array") { throw new Error("gov arr_keys argument must be an array"); } for (var i = 0; i < arr_keys.length; i++) { var key = arr_keys[i]; if (typeof(key) == "number" || typeof(key) == "string") { if (object && (key in object)) { object = object[key]; } else { // throw your error here. throw new Error("variable undefined"); // or return default_value; } } else { throw new Error("gov key must be string or integer, " + typeof key + " given, key=" + key); } } return object; } var given = { property: "value", nested: { arr: [2, 4, 6] } } console.log("> when key is ok:"); console.log(given["nested"]["arr"][2]) console.log(gov(given, ["nested", "arr", 2], "default value")) console.log("> when value is undefined:"); console.log(given["nested"]["arr"][5]) console.log(gov(given, ["nested", "arr", 5], "default value"))