suponiendo que x es un objeto ... ¿Hay alguna ventaja de hacer:typeof explícito == "undefined" check vs simplemente comprobando su existencia?
if (typeof x.foo != "undefined")
hacer frente a
if (x.foo)
?
Esta pregunta surgió cuando estaba leyendo esta entrada del blog: http://www.nczonline.net/blog/2010/03/09/custom-events-in-javascript/
En su ejemplo, lo hace:
function EventTarget(){
this._listeners = {};
}
EventTarget.prototype = {
constructor: EventTarget,
addListener: function(type, listener){
if (typeof this._listeners[type] == "undefined"){
this._listeners[type] = [];
}
this._listeners[type].push(listener);
En este caso this._listeners [tipo] nunca serán nada excepto una matriz-- entonces ¿no es verdad que sería más limpio en este caso simplemente hacer
addListener: function(type, listener){
if (!this._listeners[type]){
this._listeners[type] = [];
}
this._listeners[type].push(listener);
?
También, como una cuestión lado, no entiendo por qué está haciendo:
EventTarget.prototype = {
constructor: EventTarget
no es el constructor por defecto ya está ajustada en EventTarget ('esto') cuando se llama a nueva EventTarget() ?
También hay una tercera alternativa: 'si (== x.foo indefinido!)'. Observe el * doble = * (igualdad sin coerción de tipo) –
@Dan: aunque eso se rompe si un tonto cambia 'undefined'. Sí, eso es posible – delnan
@delnan Cierto, pero hay formas de proteger incluso contra eso: '(la función (indefinida) {... indefinida está realmente indefinida aquí ...}())' –