# JAVASCRIPT VALUES,TYPES AND OPERATORS

Data is the most important component in the computer used to define information and stored as sequence of bits.
**Bits** define as zero's and one's.

#### How to express a number in bits?

Lets take a number 15,

0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |

128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |

So, 00001111 is the binary number for 15. Its non zero digits stands for 8,4,2 and 1 and after adding them result came as 15.

## Values

Modern computer has more than 30 billion bits in its working memory. Challenging task is to work with that much amount of bits without making mistakes, so we need to make chunks of information. Those chunks are called as **values**. Now the point is that all values are made of bits of different size. Value has a different type as text or numbers or functions.

#### How do we create value?

To create value you just need to invoke its name and need to store some where.

### Numbers

Number is define as numeric values. In JavaScript it is written as,

20

JavaScript uses 64 fixed numbers of bits to store a single number.

**1. Arithmetic**

Arithmetic operation can be done with the numbers. Arithmetic operation like addition, multiplication, division or subtraction take two numbers and produce a new number.

#### How to add two numbers?

100+4 = 104

The '+' symbol is called as **operators**, need for addition operation.
There is list of arithmetic operators such as,

Operator | Description |

+ | Addition |

- | Subtraction |

* | Multiplication |

/ | Division |

% | Modulus |

** | Exponential |

++ | Increment |

-- | Decrement |

**2. Special Numbers**

There are three types of special number in JavaScript considered as number but not behave like numbers. The first two is -infinity and + infinity which represents the negative and positive infinities and next special number is NaN.
**NaN** is stands for not a number and you will get this as result when you try to calculate like 0/0 or infinity-infinity or other operation that end up of giving meaningless result.

## Strings

Strings are considered as basic data type in JavaScript and used to represent text by writing the content within quotes. Such as,

"Hello my friend"

Three ways to write strings are using,

- using single quotes(' ').
- using double quotes(" ").
- using backticks(`).

Strings need to be handle in series of bits. JavaScript use **Unicode** standard to assign number to every character that you need. So the strings can be written by series of numbers.

#### '+' Operator in String

Arithmetic operation with string is not possible but '+' operator can be use by string to concatenates. Concatenation is a way to write different strings together. Such as, "con"+"cat"+"e"+"nate"

#### Template Literals

Backtick quoted strings are called **template literals**. If you want to embed values within the string you can achieve by using backtick. Such as,

```
`multiplication of 2 with 2 is ${2*2}.`
-> multiplication of 2 with 2 is 4.
```

When you just write something within **${ }**, its result will be calculated and converted to string in that position.

### Unary Operators

Operators that takes one values are called **unary operators**.
As example,

```
console.log(-(10-2))
//-> -8
```

NOTE:- minus operator can be used as bitwise operator and unary operator.

There is **typeof** operator present which is not a symbol. It produces string value defines the type of value you give it.

```
console.log(typeof 5)
//-> number
```

### Boolean Values

Boolean type has just two values true and false. It is useful when you have to choose between two possibilities like 'yes' or 'no'.

**Comparison**
is the way you can produce boolean values.

```
console.log(8>12)
//-> false
```

The > and < signs are the greater than and less than symbol comes under binary operators.

Above one was for numbers but,

** How to compare two strings?**

In a same way strings also be compared.

```
console.log("Oman" < "Surat")
//-> true
```

NOTE:- uppercase letters are always less than lowercase ones so "S" < "s".

### Logical Operators

Logical operators use to do some operation with boolean values themselves. There are three types of logical operators as,

- And
- Or
- Not

The && operator is a logical *and* comes under binary operator. Gives value as true if both the values given to it are true.

```
console.log(true && false)
//-> false
console.log(true && true)
//-> true
```

The | | operator is a logical *or* comes under binary operator. Gives true if one of the values given to it is true.

```
console.log(true || false)
//-> true
console.log(true || true)
//-> true
```

The !(Not) operator is under unary operator unary operator and flips the value given to it.

`!true=false`

### Empty Values

There are two special values **null** and **undefined**.

**Null**

- null is an empty value and must be assigned.
`let b= null; console.log(b); //-> null`

**Undefined**

- Undefined means when a variable has been declared and not assigned with value or defined.
`let b; console.log(b); //-> undefined`

NOTE:- (null !== undefined) its true because null does not strictly equal to undefined but (null==undefined) is true because they are loosely equal.

### Automatic Type Conversion

JavaScript can accept almost any programs that you give it even with odd things also.

```
console.log(8 * null)
//-> 0
console.log("5" - 1)
//-> 4
console.log("5" + 1)
//-> 51
console.log("five" * 2)
//-> Nan
```

When JavaScript get to know about that the operator applied to the wrong value, it just convert that value to the type it needs. This is called type correction.

When something is not mapped to a number particularly it just convert it to a number with value Nan. Any further arithmetic operation with Nan produces Nan only.

### Short Circuiting of Logical Operator

Short circuiting is a way of avoiding unnecessary workload. In JavaScript logical operator contained expression is evaluated from left to right until it is confirmed with that the result of the other condition is not going to effect the previous result. If the result is clear before complete evaluation of the expression, it just short circuit and give result.

**AND**

For the case of *and* operation, expression will be evaluated until you get one false, that makes result as false without depending further condition.

```
console.log(false && true)
//-> false
```

**OR**

For the case of *or* operation, expression will be evaluated until you get one true, that makes result as true without depending further condition.

```
console.log(false || true)
//-> true
```

### Summary

We covered four types of values numbers, strings, booleans and undefined values.