开发者

Init object in javascript using || operator [duplicate]

This question already has answers here: 开发者_StackOverflow社区 What does "var FOO = FOO || {}" (assign a variable or an empty object to that variable) mean in Javascript? (8 answers) Closed 7 years ago.

Sometimes I see in javascript code something like this:

var myObj = myObj || {};

So, what actually happen here? I suppose || operator returns true or false, but it's not correct.


The || operator returns the left operand if it evaluates as true, otherwise it evaluates and returns the right operand. In other words, a || b is equivalent to a ? a : b except that a is only evaluated once.


To understand the || operator, let's first look at a fairly basic example. The logical OR operator may be used to provide a default value for a defined variable as follows:

 var bar = false,  
 foobar = 5,  
 foo = bar || foobar; // foo = 5  

In this case, foo will only be assigned the value of foobar if bar is considered falsy. A falsy value could be considered being equal to 0, false, undefined, null, NaN or empty (e.g "").


This initializes myObj unless it is already defined.


You can use this construct to get the object that is not null, undefined, etc. This is used in cases where you use myObj later on in the code which requires it to be an object. If, for some reason, myObj is undefined prior to this line, re-assigning it leaves it undefined or null, in which case it would be assigned {}.

You can think of this as:

// If the object is already defined
if (myObj)
    var myObj = myObj;
// It was undefined or null, so assign an empty object to it.
else
    var myObj = {};


The OR op (||) will return the first non-empty/false parameter.

In the case specified, if myObj is false or null, it will be set to an empty object (the {} brackets are used to create objects)


|| is a short circuit operator. If the first operand evaluates to true the second is not evaluated.

Thus JS a || b is something like c# a ?? b


if myObj is undefined or null then it evaluates the expression on the right side of || which creates a new empty object

so myObj is either myObj if it is not null or an empty object if myObj is null

i hope you understand what i mean

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜