I'm wondering if there's a shorter way to write this:
var x = 1;
if(y != undefined) x = y;
I initially tried x = y || 1
, but that didn't work. What's the correct way to go about this?
I'm wondering if there's a shorter way to write this:
var x = 1;
if(y != undefined) x = y;
I initially tried x = y || 1
, but that didn't work. What's the correct way to go about this?
var x = y !== undefined ? y : 1;
Note that var x = y || 1;
would assign 1
for any case where y
is falsy (e.g. false
, 0
, ""
), which may be why it "didn't work" for you. Also, if y
is a global variable, if it's truly not defined you may run into an error unless you access it as window.y
.
As vol7ron suggests in the comments, you can also use typeof
to avoid the need to refer to global vars as window.<name>
:
var x = typeof y != "undefined" ? y : 1;
'undefined'
is a true value, and is not equal to the actual undefined
value. –
Backside window.y
(which will actually return undefined
) rather than y
(which could potentially cause an error). –
Backside ||
statement. –
Muttra window.y
instead of just y
. –
Backside undefined
didn't evaluate to false and thus lead to x equaling 1. Edit: if I define window
as _
, I can then say var x = _.y ||
, which is as short as I could want. I'm only checking to see if y is undefined in this case so I'm not worried about falsy vs. false. –
Muttra x = y || 1
, since null, 0 and '' (empty string) are all == undefined
. You should use ===
(if that's what the OP wanted). –
Bony !==
on matter of princple. That said, false == undefined
is false. Try it (or just look at i.imgur.com/rHXiq.png). –
Backside typeof
–
Basir Another way to write it shortly
bePlanVar = !!((bePlanVar == false));
// is equivalent to
bePlanVar = (bePlanVar == false) ? true : false;
// and
if (bePlanVar == false) {
bePlanVar = true;
} else {
bePlanVar = false;
}
y = (y != undefined) ? y : x;
The parenthesis are not necessary, I just add them because I think it's easier to read this way.
Other way is using short-circuit:
x = (typeof y !== 'undefined') && y || 1
Although I myself think that ternary is more readable.
Here is a way to do it that works, but may not be best practise for any language really:
var x,y;
x='something';
y=1;
undefined === y || (x = y);
alternatively
undefined !== y && (x = y);
Appears you are having 'y' default to 1: An arrow function would be useful in 2020:
let x = (y = 1) => //insert operation with y here
Let 'x' be a function where 'y' is a parameter which would be assigned a default to '1' if it is some null or undefined value, then return some operation with y.
x
becomes a function unless you immediately invoke that. Even then, this makes the code overly complex, since in JavaScript, default assignments can just be expressed with the ||
operator as @Olatha commented in OP or with the ternary operator in accepted answer –
Topliffe You can try if/else this shorthand method:
// Syntax
if condition || else condition
// Example
let oldStr = "";
let newStr = oldStr || "Updated Value";
console.log(newStr); // Updated Value
// Example 2
let num1 = 2;
let num2 = num1 || 3;
console.log(num2); // 2 cause num1 is a truthy
© 2022 - 2024 — McMap. All rights reserved.
x=y||x
works if you dont care about strict undefined – Olatha