RasMason
RasMason

Reputation: 2212

convert number to string returns empty if number 0

Trying to convert string to a number, works fine apart from when the number is zero it returns an empty string;

I understand 0 is false, but I just need a neat way of it returning the string "0"

I'm using:

const num = this.str ? this.str.toString() : '' ;

I even thought of using es6 and simply ${this.str} but that didn't work

Upvotes: 1

Views: 2492

Answers (4)

Eugene Tiurin
Eugene Tiurin

Reputation: 4129

Just adding to given answers - if you do:

x >> 0

you will convert anything to a Number

'7' >> 0 // 7
'' >> 0 // 0
true >> 0 // 1
[7] >> 0 // 7

It's a right shift bit operation. You can do magic with this in many real life cases, like described in this article.

Upvotes: 1

Yvonne Aburrow
Yvonne Aburrow

Reputation: 2728

In my case, the zero (number) that I wanted to converted to a string (which was the value of an option in a select element) was a value in an enum.

So I did this, since the enum was generated by another process and I could not change it:

  let stringValue = '';
  if (this.input.enumValue === 0) {
    stringValue = '0'; 
  } else {
    stringValue = this.input.enumValue.toString();
  }

Upvotes: 0

stevendesu
stevendesu

Reputation: 16791

Because 0 is "false-y" in JavaScript, as you've already figured out, you can't utilized it in a conditional. Instead, ask yourself what the conditional is really trying to solve.

Are you worried about null / undefined values? Perhaps this is better:

const num = (typeof this.str !== "undefined" && this.str !== null) ? this.str.toString() : "";

Odds are you really only care if this.str is a Number, and in all other cases want to ignore it. What if this.str is a Date, or an Array? Both Date and Array have a .toString() method, which means you may have some weird bugs crop up if one slips into your function unexpectedly.

So a better solution may be:

const num = (typeof this.str === "number") ? this.str.toString() : "";

Upvotes: 3

Observablerxjs
Observablerxjs

Reputation: 722

You can also put your code in a try catch block

const num = ''
try {
  num = this.str.toString();
} catch(e) {
  // Do something here if you want.
}

Upvotes: 2

Related Questions