tengo una funcion en una clase
MyClass.prototype.IsFriend = function(){ return (this.m_Object1 && !this.m_Object1.m_ABoolean && this.m_Object2); }; m_Object1 es un objeto en MyClass .
m_ABoolean es un booleano dentro de m_Object1 , true o false .
m_Object2 es otro objeto en MyClass .
Cuando esta función debería devolver false cuando m_Object1 es null O m_ABoolean es true O m_Object2 es nulo, devuelve null en su lugar.
Nota: m_Object1 , m_ABoolean y m_Object2 nunca están undefined .
¿Por qué?
El operador && devuelve el primer valor falso (el propio operando) que encuentra; si encuentra un valor nulo, devolverá un valor nulo -> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/ Y lógico
Los operadores lógicos en javascript devuelven el primer valor determinado lógicamente de izquierda a derecha,
Por ejemplo, el operador && devuelve el primer valor si es falso o el segundo si no lo es.
Esta respuesta es una buena lectura y la documentación de MDN es una buena referencia.
Creo que algunos de tus valores son nulos ya que:
true && null === null ¿No tiene una forma de verificar con el depurador o con console.log la salida de estos valores?