javascript - How does using logic operators populate a var? -
this question has answer here:
let's take @ code:
var token = (req.body && req.body.access_token) || (req.query && req.query.access_token) || req.headers['x-access-token']; shouldn't return boolean? confuses me chained , and or statements. i'm reading as:
the variable token equals boolean whether
req.body,req.body.access_tokenexist. or, if don't exist, equals boolean whetherreq.query,req.query.access_tokenexist. or, if don't exist, equals value ofreq.headers['x-access-token'].
furthermore, if analyze piece:
var token = req.body && req.body.access_token; what keeps token being set req.body?
it's not evaluating boolean expression , assigning token. have there kind of shorthand if-else. let's break down:
(req.body && req.body.access_token) if req.body "truthy" (in particular case ensuring not null or undefined, probably) assign req.body.access_token token. expression short-circuit here , not proceed.
otherwise, looks @ next case:
(req.query && req.query.access_token) this same above; except in case assigns req.query.access_token token if req.query "truthy". short-circuit here unless "falsy".
req.headers['x-access-token']; this final clause. if none of preceding cases true, assign value of req.headers['x-access-token'] token.
in traditional form, this:
var token; if(req.body && req.body.access_token) { token = req.body.access_token; } else if(req.query && req.query.access_token) { token = req.query.access_token; } else { token = req.headers['x-access-token']; } what keeps token being set req.body?
the expression is:
var token = req.body && req.body.access_token; it won't set token req.body. here, req.body kind of acting flag. don't want req.body.access_token directly because req.body null or undefined. it's doing here saying "if req.body non-null/defined, assign req.body.access_token token". realize if first term of && true, second term must still evaluated because time , true when both operands true. advantage here "evaluating" second term returns value of term well, set token eventually.
more explicitly, above expression can represented as:
if(req.body !== null || typeof req.body !== "undefined") { token = req.body.access_token; } but in javascript can check if(some_var) , won't run code in if block if some_var undefined or null. have careful because legitimate values 0 or empty-string "falsy", , end ignoring them.
Comments
Post a Comment