CoffeeScript sait que tu es dans le scope, car req.session.userId? est dans le contexte req.session et donc il se contente du test minimal userId != null
Pour req?.session.userId, CoffeeScript sait que req risques d'être dans le scope global, et donc il effectue le test complet.
C'est la même chose pour les variables d'instances / classiques :
a? => typeof... car a est dans le scope global
@a? => this.a != null car a est dans le contexte this
De ce côté ça n'est pas consistant en effet. Peut être qu'il y a une volonté de réduire le code Javascript (cf. undefined => void 0)
C'est comme ça que je le vois moi ^^
Pour req?.session.userId, CoffeeScript sait que req risques d'être dans le scope global, et donc il effectue le test complet.
C'est la même chose pour les variables d'instances / classiques :
a? => typeof... car a est dans le scope global
@a? => this.a != null car a est dans le contexte this
De ce côté ça n'est pas consistant en effet. Peut être qu'il y a une volonté de réduire le code Javascript (cf. undefined => void 0)
C'est comme ça que je le vois moi ^^