How to write Or values in ternary operator Javascript? - javascript

How to write below code in ternary operator?
if(data){
data;
}
else{
"" || anotherData;
}
I am trying to do : data ? data : ""|| anotherData but it always take second value i.e. anotherData when else condition true
Plz suggest.

It's the other way for the second parameter: data ? data : (anotherData || '')

Not exactly clear what you want. What you posted is equivalent to:
data || anotherData
since "" || anotherdata will always evaluate to anotherData.
If you meant anotherData || "" then you can simply do:
data || anotherData || ""

The problem is in the if-else code itself. Switch the "" || anotherData to anotherData || "". According to my understanding of your task, it should get "" only when both data and anotherData are null.

Related

Simplify simple ternary expression

I want to validate undefined attributes from an object so I use ternary like this
item.subitem ? item.subitem.toString() : ''
Is there any way to simplify this expression using || or && ?
It's simple:
item.subitem && item.subitem.toString() || ''
Or simply like:
(item.subitem || '').toString()
OR,
''+(item.subitem || '')
If you can use optional chaining, then it can be even more simple:
item.subitem?.toString()
See this post for more detail.
As #Thomas mentioned in comment, you can also use an array and convert to a string:
[item.subitem].toString();
This should clear how it will work:
[].toString(); // ''
[undefined].toString(); // ''
['foo'].toString(); // 'foo'
['foo', 'bar'].toString(); 'foo,bar'
Yes you can
(item.subitem || '').toString()

Using Ternary Operator to Handle Three Different Conditions

I'm using the ternary operator to handle importing data from SQL to Mongo for a variety of fields. For one particular field it's a little trickier than the others, because I want to handle three different conditions:
1 should port to true,
0 should port to false,
and null should port to null.
This is what I'm trying:
saved: data.saved && data.saved === 1 ? true : data.saved && data.saved === 0 ? false : null
Would this accomplish what I'm needing?
You could take a direct check for null and if not convert the numerical values to boolean.
value === null ? null : Boolean(value)
You can just coerce the value to boolean:
saved: (data === null) ? null : !!data

null escaped in nodejs

I console.log("var = " + JSON.stringify(result.something));
I got var = null
but when I do
if(result.something !=null || result.something != ''){
console.log('enter')
}
it print enter also. I wonder why is that happening, I also tried result.something != 'null', it still go into the if statement.
Your variable is null, here's why:
1. (result.something !=null) : returns false
2. (result.something != '') : returns true
Since you've used an OR operator, program control is going to go inside the if block if either of the condition is true.
As your 2nd condition is evaluating to be true, it's going inside of the if block.
From javascript MDN:
null : "an empty value" i.e no object value present
null value is different from an empty string. So something like if(null ==== " ") will return false
your if statement always true because
the result.something is null AND it is not an empty string null != ''
:)

if(xxx || xxx), what am I doing wrong?

Can someone explain to me what am I doing wrong?
function navMenuIntervalCheck() {
if (currentSiteUrl != "subsites/players.php" || currentSiteUrl != "subsites/itemshop.php") {
$.ajax({
url: currentSiteUrl,
cache: false,
success: function (dataForContainer) {
$('#container').html(dataForContainer);
}
});
}
screenControlCheck();
};
setInterval(function () {
navMenuIntervalCheck()
}, 5000);
When I run my website it refreshes even when currentSiteUrl==subsites/players.php
As x!='a' || x!='b' is always true, I guess you wanted && instead of ||.
Read || as OR and && as AND.
More details in the MDN on logical operators.
currentSiteUrl can only have one value, so it will always be that at least one of the values you're testing will not equal currentSiteUrl, making the if condition always true.
I think you meant to use && or you meant to do == with ||.
Your code says this :
Refresh when currentSiteUrl is different than subsites/players.php or different than subsites/itemshop.php.
So subsites/players.php is indeed different than subsites/itemshop.php
Use && instead of ||
Look at your if statement:
if (a != foo || a != bar)
Lets look at the possibilities:
a = foo. This will evaluate as true, because a != bar
a = bar. This will evaluate as true, because a != foo
a = anything else. This will evaluate as true, because a != foo
Your if statement always evaluates to true.
As others have already said, you want to replace your || with &&.
Let me throw a logical rule at you, called DeMorgan's Law. It's really useful when learning how to set up a good if statement.
!(a || b) === !a && !b
also
!(a && b) === !a || !b
What that says is: "Not (one event or another)" is the same thing as "Not one event and not another", and "Not (one event and another)" is the same thing as "Not one event or not the other".
I know this has been answered but thought it might help to add some additional information using your own code.
As said, switching logical operator from || to && will work:
if (currentSiteUrl != "subsites/players.php" && currentSiteUrl != "subsites/itemshop.php")
But why is that?
Using ||
The || logical operator returns true if either the first or second expression is true and only if both are false will it return false.
Hence:
if currentSiteUrl != "subsites/players.php" is true you end up in the if block
if currentSiteUrl != "subsites/players.php" is false and currentSiteUrl != "subsites/itemshop.php" is true you end up in the if block
There will never be another scenario as your variable currentSiteUrl can only hold a single value and as such one of the expressions will always be true causing you to always end up in the if block.
Using &&
Using the && logical operator on the other hand though returns false if either the first or second expression is false and only if both are true will it return true.
Hence:
if currentSiteUrl != "subsites/players.php" is true and currentSiteUrl != "subsites/itemshop.php" is true you end up in the if block
if currentSiteUrl != "subsites/players.php" is true and currentSiteUrl != "subsites/itemshop.php" is false you don't end up in the if block
if currentSiteUrl != "subsites/players.php" is false you don't end up in the if block
There will never be another scenario, because only if both expression are true will you end up in the if block and as soon as either expression is false will you not.
How are you getting the currentSiteUrl. A url is followed by protocol:://domain
Try using the follwoing property to get URL and then match it
window.location.href
This url will also include the http or https and domain name

C# String.IsNullOrEmpty Javascript equivalent

I want to try to do string call equivalent to the C# String.IsNullOrEmpty(string) in javascript. I looked online assuming that there was a simple call to make, but I could not find one.
For now I am using a if(string === "" || string === null) statement to cover it, but I would rather use a predefined method (I keep getting some instances that slip by for some reason)
What is the closest javascript (or jquery if then have one) call that would be equal?
You're overthinking. Null and empty string are both falsey values in JavaScript.
if(!theString) {
alert("the string is null or empty");
}
Falsey:
false
null
undefined
The empty string ''
The number 0
The number NaN
If, for whatever reason, you wanted to test only null and empty, you could do:
function isNullOrEmpty( s )
{
return ( s == null || s === "" );
}
Note: This will also catch undefined as #Raynos mentioned in the comments.
if (!string) {
// is emtpy
}
What is the best way to test for an empty string with jquery-out-of-the-box?
If you know that string is not numeric, this will work:
if (!string) {
.
.
.
You can create one Utility method which can be reused in many places such as:
function isNullOrEmpty(str){
var returnValue = false;
if ( !str
|| str == null
|| str === 'null'
|| str === ''
|| str === '{}'
|| str === 'undefined'
|| str.length === 0 ) {
returnValue = true;
}
return returnValue;
}
you can just do
if(!string)
{
//...
}
This will check string for undefined, null, and empty string.
To be clear, if(!theString){//...} where theString is an undeclared variable will throw an undefined error, not find it true. On the other hand if you have: if(!window.theString){//...} or var theString; if(!theString){//...} it will work as expected. In the case where a variable may not be declared (as opposed to being a property or simply not set), you need to use: if(typeof theString === 'undefined'){//...}
My preference is to create a prototype function that wraps it up for you.
Since the answer that is marked as correct contains a small error, here is my best try at coming up with a solution. I have two options, one that takes a string, the other takes a string or a number, since I assume many people are mixing strings and numbers in javascript.
Steps:
-If the object is null it is a null or empty string.
-If the type is not string (or number) it's string value is null or empty. NOTE: we might throw an exception here as well, depending on preferences.
-If the trimmed string value has a length that is small than 1 it is null or empty.
var stringIsNullOrEmpty = function(theString)
{
return theString == null || typeof theString != "string" || theString.trim().length < 1;
}
var stringableIsNullOrEmpty = function(theString)
{
if(theString == null) return true;
var type = typeof theString;
if(type != "string" && type != "number") return true;
return theString.toString().trim().length < 1;
}
you can say it by logic
Let say you have a variable name a strVal, to check if is null or empty
if (typeof (strVal) == 'string' && strVal.length > 0)
{
// is has a value and it is not null :)
}
else
{
//it is null or empty :(
}

Categories

Resources