javascript

examples

examples.js
/**
 * ============================================
 * 3.1 Arithmetic Operators - Examples
 * ============================================
 */

// ============================================
// 1. BASIC ARITHMETIC OPERATORS
// ============================================

console.log('=== Basic Arithmetic ===');

let a = 10;
let b = 3;

console.log('a =', a, ', b =', b);
console.log('a + b =', a + b); // 13
console.log('a - b =', a - b); // 7
console.log('a * b =', a * b); // 30
console.log('a / b =', a / b); // 3.3333...
console.log('a % b =', a % b); // 1
console.log('a ** b =', a ** b); // 1000

// ============================================
// 2. ADDITION OPERATOR
// ============================================

console.log('\n=== Addition ===');

// Number addition
console.log('5 + 3 =', 5 + 3); // 8
console.log('10.5 + 2.5 =', 10.5 + 2.5); // 13
console.log('-5 + 3 =', -5 + 3); // -2
console.log('-5 + -3 =', -5 + -3); // -8

// String concatenation (+ becomes concatenation)
console.log('\n--- String Concatenation ---');
console.log("'Hello' + ' World' =", 'Hello' + ' World'); // "Hello World"
console.log("'5' + 3 =", '5' + 3); // "53" (string!)
console.log("3 + '5' =", 3 + '5'); // "35" (string!)
console.log("'5' + '3' =", '5' + '3'); // "53"

// Order matters with mixed types
console.log('\n--- Order Matters ---');
console.log("5 + 3 + '8' =", 5 + 3 + '8'); // "88"
console.log("'5' + 3 + 8 =", '5' + 3 + 8); // "538"

// Adding with special values
console.log('\n--- Special Values ---');
console.log('Infinity + 1 =', Infinity + 1); // Infinity
console.log('Infinity + Infinity =', Infinity + Infinity); // Infinity
console.log('-Infinity + Infinity =', -Infinity + Infinity); // NaN
console.log('NaN + 5 =', NaN + 5); // NaN

// ============================================
// 3. SUBTRACTION OPERATOR
// ============================================

console.log('\n=== Subtraction ===');

console.log('10 - 5 =', 10 - 5); // 5
console.log('5 - 10 =', 5 - 10); // -5
console.log('-5 - 3 =', -5 - 3); // -8
console.log('-5 - (-3) =', -5 - -3); // -2

// Type coercion - ALWAYS converts to numbers
console.log('\n--- Type Coercion ---');
console.log("'10' - 5 =", '10' - 5); // 5 (not "10 - 5"!)
console.log("'10' - '5' =", '10' - '5'); // 5
console.log("'abc' - 5 =", 'abc' - 5); // NaN
console.log('true - false =', true - false); // 1
console.log('null - 1 =', null - 1); // -1
console.log('undefined - 1 =', undefined - 1); // NaN

// ============================================
// 4. MULTIPLICATION OPERATOR
// ============================================

console.log('\n=== Multiplication ===');

console.log('5 * 3 =', 5 * 3); // 15
console.log('-5 * 3 =', -5 * 3); // -15
console.log('-5 * -3 =', -5 * -3); // 15
console.log('2.5 * 4 =', 2.5 * 4); // 10

// Floating point issues
console.log('\n--- Floating Point ----');
console.log('0.1 * 0.2 =', 0.1 * 0.2); // 0.020000000000000004

// Type coercion
console.log('\n--- Type Coercion ---');
console.log("'5' * 3 =", '5' * 3); // 15
console.log('true * 5 =', true * 5); // 5
console.log('false * 5 =', false * 5); // 0
console.log('null * 5 =', null * 5); // 0

// Special values
console.log('\n--- Special Values ---');
console.log('Infinity * 2 =', Infinity * 2); // Infinity
console.log('Infinity * 0 =', Infinity * 0); // NaN
console.log('Infinity * -1 =', Infinity * -1); // -Infinity

// ============================================
// 5. DIVISION OPERATOR
// ============================================

console.log('\n=== Division ===');

console.log('10 / 2 =', 10 / 2); // 5
console.log('10 / 3 =', 10 / 3); // 3.333...
console.log('-10 / 2 =', -10 / 2); // -5
console.log('-10 / -2 =', -10 / -2); // 5

// Division by zero
console.log('\n--- Division by Zero ---');
console.log('5 / 0 =', 5 / 0); // Infinity
console.log('-5 / 0 =', -5 / 0); // -Infinity
console.log('0 / 0 =', 0 / 0); // NaN

// Type coercion
console.log('\n--- Type Coercion ---');
console.log("'10' / 2 =", '10' / 2); // 5
console.log("'10' / '2' =", '10' / '2'); // 5

// Special values
console.log('\n--- Special Values ---');
console.log('Infinity / 2 =', Infinity / 2); // Infinity
console.log('Infinity / Infinity =', Infinity / Infinity); // NaN
console.log('5 / Infinity =', 5 / Infinity); // 0

// ============================================
// 6. MODULO (REMAINDER) OPERATOR
// ============================================

console.log('\n=== Modulo ===');

console.log('17 % 5 =', 17 % 5); // 2
console.log('10 % 3 =', 10 % 3); // 1
console.log('10 % 5 =', 10 % 5); // 0 (exactly divisible)
console.log('5 % 10 =', 5 % 10); // 5

// Negative numbers
console.log('\n--- Negative Numbers ---');
console.log('-17 % 5 =', -17 % 5); // -2
console.log('17 % -5 =', 17 % -5); // 2
console.log('-17 % -5 =', -17 % -5); // -2

// Common use cases
console.log('\n--- Use Case: Even/Odd ---');
for (let i = 1; i <= 5; i++) {
  console.log(`${i} is ${i % 2 === 0 ? 'even' : 'odd'}`);
}

console.log('\n--- Use Case: Cycling ---');
let colors = ['red', 'green', 'blue'];
for (let i = 0; i < 7; i++) {
  console.log(`Index ${i} → ${colors[i % colors.length]}`);
}

console.log('\n--- Use Case: Get Digits ---');
let number = 12345;
console.log('Last digit:', number % 10); // 5
console.log('Last two digits:', number % 100); // 45

// ============================================
// 7. EXPONENTIATION OPERATOR
// ============================================

console.log('\n=== Exponentiation (**) ===');

console.log('2 ** 3 =', 2 ** 3); // 8
console.log('3 ** 2 =', 3 ** 2); // 9
console.log('10 ** 0 =', 10 ** 0); // 1
console.log('2 ** 10 =', 2 ** 10); // 1024

// Fractional exponents (roots)
console.log('\n--- Roots ---');
console.log('25 ** 0.5 =', 25 ** 0.5); // 5 (square root)
console.log('27 ** (1/3) =', 27 ** (1 / 3)); // 3 (cube root)

// Negative exponents
console.log('\n--- Negative Exponents ---');
console.log('2 ** -1 =', 2 ** -1); // 0.5
console.log('2 ** -2 =', 2 ** -2); // 0.25
console.log('10 ** -3 =', 10 ** -3); // 0.001

// Right-to-left associativity
console.log('\n--- Associativity ---');
console.log('2 ** 3 ** 2 =', 2 ** (3 ** 2)); // 512 (2^9)
console.log('(2 ** 3) ** 2 =', (2 ** 3) ** 2); // 64 (8^2)
console.log('2 ** (3 ** 2) =', 2 ** (3 ** 2)); // 512 (2^9)

// ============================================
// 8. UNARY OPERATORS
// ============================================

console.log('\n=== Unary Plus (+) ===');

console.log('+5 =', +5); // 5
console.log("+'5' =", +'5'); // 5 (string to number)
console.log("+'' =", +''); // 0
console.log('+true =', +true); // 1
console.log('+false =', +false); // 0
console.log('+null =', +null); // 0
console.log('+undefined =', +undefined); // NaN
console.log("+'abc' =", +'abc'); // NaN
console.log('+[] =', +[]); // 0
console.log('+[5] =', +[5]); // 5
console.log('+[1,2] =', +[1, 2]); // NaN

console.log('\n=== Unary Minus (-) ===');

console.log('-5 =', -5); // -5
console.log('-(-5) =', -(-5)); // 5
console.log("-'5' =", -'5'); // -5
console.log('-true =', -true); // -1

// ============================================
// 9. INCREMENT AND DECREMENT
// ============================================

console.log('\n=== Increment (++) ===');

let x = 5;
console.log('x =', x);

// Postfix
console.log('x++ returns:', x++); // 5 (returns, then increments)
console.log('x is now:', x); // 6

// Prefix
x = 5;
console.log('++x returns:', ++x); // 6 (increments, then returns)
console.log('x is now:', x); // 6

console.log('\n=== Decrement (--) ===');

let y = 5;
console.log('y =', y);

// Postfix
console.log('y-- returns:', y--); // 5
console.log('y is now:', y); // 4

// Prefix
y = 5;
console.log('--y returns:', --y); // 4
console.log('y is now:', y); // 4

// Practical example: Array iteration
console.log('\n--- Array Iteration ---');
let arr = ['a', 'b', 'c'];
let i = 0;
while (i < arr.length) {
  console.log(`arr[${i}] =`, arr[i++]);
}

// ============================================
// 10. OPERATOR PRECEDENCE
// ============================================

console.log('\n=== Operator Precedence ===');

// Multiplication before addition
console.log('2 + 3 * 4 =', 2 + 3 * 4); // 14 (not 20)
console.log('(2 + 3) * 4 =', (2 + 3) * 4); // 20

// Exponentiation has higher precedence
console.log('2 ** 3 * 4 =', 2 ** 3 * 4); // 32 (8 * 4)
console.log('2 ** (3 * 4) =', 2 ** (3 * 4)); // 4096 (2^12)

// Complex expression - step by step
console.log('\n--- Complex Expression ---');
let result = 2 + (3 * 4 ** 2) / 8 - 1;
console.log('2 + 3 * 4 ** 2 / 8 - 1 =', result);
console.log('Step 1: 4 ** 2 = 16');
console.log('Step 2: 3 * 16 = 48');
console.log('Step 3: 48 / 8 = 6');
console.log('Step 4: 2 + 6 = 8');
console.log('Step 5: 8 - 1 = 7');

// ============================================
// 11. SPECIAL NUMERIC VALUES
// ============================================

console.log('\n=== Special Values ===');

// Infinity
console.log('Number.POSITIVE_INFINITY:', Number.POSITIVE_INFINITY);
console.log('Number.NEGATIVE_INFINITY:', Number.NEGATIVE_INFINITY);
console.log('1 / 0 =', 1 / 0);
console.log('-1 / 0 =', -1 / 0);

// NaN
console.log('\n--- NaN ---');
console.log('0 / 0 =', 0 / 0);
console.log("parseInt('abc') =", parseInt('abc'));
console.log('Math.sqrt(-1) =', Math.sqrt(-1));

// Checking special values
console.log('\n--- Checking Values ---');
console.log('Number.isNaN(NaN):', Number.isNaN(NaN)); // true
console.log('Number.isFinite(Infinity):', Number.isFinite(Infinity)); // false
console.log('Number.isFinite(100):', Number.isFinite(100)); // true

// ============================================
// 12. COMMON PATTERNS
// ============================================

console.log('\n=== Common Patterns ===');

// Rounding
console.log('\n--- Rounding ---');
let num = 7.7;
console.log('Math.round(7.7) =', Math.round(num)); // 8
console.log('Math.floor(7.7) =', Math.floor(num)); // 7
console.log('Math.ceil(7.7) =', Math.ceil(num)); // 8
console.log('Math.trunc(7.7) =', Math.trunc(num)); // 7

// Round to 2 decimal places
let price = 19.99999;
console.log('Round to 2 decimals:', Math.round(price * 100) / 100);

// Percentage
console.log('\n--- Percentage ---');
function percentage(part, whole) {
  return (part / whole) * 100;
}
console.log('25 of 100 =', percentage(25, 100) + '%');
console.log('1 of 3 =', percentage(1, 3).toFixed(2) + '%');

// Random number
console.log('\n--- Random Numbers ---');
function randomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log('Random 1-10:', randomInt(1, 10));
console.log('Random 1-10:', randomInt(1, 10));
console.log('Random 1-10:', randomInt(1, 10));

// ============================================
// 13. FLOATING POINT PRECISION
// ============================================

console.log('\n=== Floating Point Precision ===');

console.log('0.1 + 0.2 =', 0.1 + 0.2); // 0.30000000000000004
console.log('0.1 + 0.2 === 0.3:', 0.1 + 0.2 === 0.3); // false!

// Solutions
console.log('\n--- Solutions ---');

// 1. Work with integers (cents)
let priceInCents = 199; // $1.99
let taxRate = 8; // 8%
let taxInCents = Math.round((priceInCents * taxRate) / 100);
console.log('Tax:', (taxInCents / 100).toFixed(2));

// 2. Use toFixed() for display
console.log('Display:', (0.1 + 0.2).toFixed(2));

// 3. Use epsilon for comparison
function nearlyEqual(a, b, epsilon = Number.EPSILON) {
  return Math.abs(a - b) < epsilon;
}
console.log(
  'nearlyEqual(0.1 + 0.2, 0.3):',
  nearlyEqual(0.1 + 0.2, 0.3, 0.0001)
);

// ============================================
// 14. PRACTICAL EXAMPLES
// ============================================

console.log('\n=== Practical Examples ===');

// Temperature conversion
function celsiusToFahrenheit(celsius) {
  return (celsius * 9) / 5 + 32;
}
function fahrenheitToCelsius(fahrenheit) {
  return ((fahrenheit - 32) * 5) / 9;
}
console.log('25°C =', celsiusToFahrenheit(25) + '°F');
console.log('77°F =', fahrenheitToCelsius(77).toFixed(1) + '°C');

// Calculate average
function average(...numbers) {
  if (numbers.length === 0) return 0;
  return numbers.reduce((sum, n) => sum + n, 0) / numbers.length;
}
console.log('Average of 10, 20, 30:', average(10, 20, 30));

// Simple interest
function simpleInterest(principal, rate, time) {
  return principal * (rate / 100) * time;
}
console.log(
  'Interest on $1000 at 5% for 2 years:',
  '$' + simpleInterest(1000, 5, 2)
);

// Distance between two points
function distance(x1, y1, x2, y2) {
  return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
}
console.log('Distance from (0,0) to (3,4):', distance(0, 0, 3, 4));

console.log('\n=== Examples Complete ===');
Examples - JavaScript Tutorial | DeepML