Can you add a condition to a variable declaration?

2020-02-12 03:42发布

问题:

This doesn't make sense to me, but I have a feeling I saw a code using this:

var abc = def || ghi;

My question is, is this valid? Can we add a condition to a variable declaration? I imagine the answer is no but I have this at the back of my mind that I saw something similar in code once.

回答1:

This gives to abc the value of def if it isn't falsy (i.e. not false, null, undefined, 0 or an empty string), or the value of ghi if not.

This is equivalent to:

var abc;
if (def) abc = def;
else abc = ghi;

This is commonly used for options:

function myfunc (opts) {
    var mything = opts.mything || "aaa";
}

If you call myfunc({mything:"bbb"}) it uses the value you give. It uses "aaa" if you provide nothing.

In this case, in order to let the caller wholly skip the parameter, we could also have started the function with

opts = opts || {};


回答2:

The code var abc = def || ghi;

is the same thing as

if (def) { //where def is a truthy value
   var abc = def;
} else {
   abc = ghi;
}

You want a condition like an if statement?

if (xxx==="apple") { 
    var abc = def;
} else {
    abc = ghi;
}

which as written as a ternary operator is:

var abc = (xxx==="apple") ? def : ghi;


回答3:

Yes, you can add condition to variable declaration

You can use it like this,

function greet(person) {
    var name = person || 'anonymouse';
    alert('Hello ' + name);
}
greet('jashwant');
greet();​

jsfiddle demo



回答4:

OKay, see, it is something like, you either check if one is true. The true one will be returned. :)

var abc = def || ghi;

Is equivalent to:

var abc = return (def == true) or (ghi == true)