User Tools

Site Tools


pe:javascript

Javascript Notes

Chapter 1: Basics

Numbers

  • 64 bit
  • different notations
  • 3 special values: Infinity; -infinity; NaN

Strings (no Char)

  • single or double quotes, or backtick
  • use backtick for newline or backslash
  • unicode as standard (but js uses 16 bits/string; so some take two char positions)
  • + for concatenation
  • backtick for template literals: `half of 100 is ${100 /2}`

unary operators

  • arithmetic
  • word: typeof

Comparison

  • Boolean values: true/false
  • string comparison: uppercase < lowercase
  • console.log(NaN == Nan) // false
  • logical operators

ternary operators

  • console.log(true ? 1: 2)

Empty values

  • null
  • undefined
  • mostly interchangeable

Automatic type conversion

  • console.log(null == undefined);
  • → true * console.log(null == 0); * → false
  • to do comparisons without type conversion, use === and !==

Chapter 2: Program Structure

  • let, var, const
  • for binding names, avoid keywords and reserved words
  • functions - many values in the default environment have type function e.g.┬áprompt
  • function side effects and return values
  • anything that produces a value is an expression in JavaScript

Control flow

  • while
  • do .. while
  • for:
    • updated to for(let entry of JOURNAL) {ΓǪ} // avoids need for counter
    for (let number = 0; number <= 12; number = number + 2) { console.log(number); }
  • break
  • switch .. case & default (like C/Java)
    • don't forget the break
  • camelCaseNamingConvention
  • C-style comments
    // & /* ... */ 

Exercises

Looping triangle

for (let counter=1; counter <8; counter+=1){
  let symbol = "#", otext = "";
  let counter2 = 0;
  while(counter2 < counter){
otext = otext + symbol;
counter2 += 1;
  }
  console.log(otext);
}

fizzbuzz

for (let ctr=1; ctr<=100; ctr++){
  if (ctr%3==0 && ctr%5==0){
console.log(ctr + " fizzbuzz")
  }
  else if (ctr%3==0){
console.log(ctr + " fizz")
  }
  else if (ctr%5==0){
console.log(ctr + " buzz")
  }
  else {
console.log(ctr)
  }
}  if (ctr%5==0){
console.log("buzz")
  }

Chessboard

let sym1 = "^", sym2 = "#";
let rowNumber = 7;
let colNumber = 7;

let outRow = ""

for (let y=1; y <= colNumber; y++){
  if (y%2==0){
s1 = sym1, s2 = sym2;
  }
else {
  s1 = sym2, s2 = sym1;
}
  for (let i = 1; i <= rowNumber; i++){
  outRow = outRow + s1;
  i += 1;
  if (i <= rowNumber){
outRow = outRow + s2;
  } 
}
console.log(outRow);
outRow = "";
}

Chapter 3: Functions

Bindings abd scopes

  • global, local
  • functions
    • using binding values aNewFunction = function{..}
    • function declaration function aNewFunction(x){..}
    • arrows aNewFunction = (x)⇒{ΓǪ}
  • the call stack
  • javascript ignores extra parameters: it has its uses
  • default parameters in functions (like python)
  • closures
  • it can do recursions - slower

Exercise

Min

function min(x1, x2) {
  return Math.min(x1, x2);
}

console.log(min(0, 10))
// → 0
console.log(min(0, -10));
// → -10

Recursion

function isEven(n){
  if (n==0){
// console.log("In isEven, n is: ", n)
return true;
  }
  if (n==1){
return false;
  }
  else return (isEven(n-2));
}

console.log(isEven(0));
//true
console.log(isEven(1));
//false
console.log(isEven(3));
//false
console.log(isEven(4));
//true
console.log(isEven(43));
//false

Bean counting

Part 1
function countBs(aStr){
  //console.log(aStr.length);
  let charCounter = 0;
  for (let i=0; i < aStr.length; i++){
if(aStr[i] == 'B'){
  charCounter++;
}
  }
  return charCounter;
}

console.log(countBs("Bees"));
//1
console.log(countBs("Bumble Bees"));
//2
console.log(countBs("Bumblebees"));
Part 2
function countChars(aStr, char='B'){
  //console.log(aStr.length);
  let charCounter = 0;
  for (let i=0; i < aStr.length; i++){
if(aStr[i] == char){
  charCounter++;
}
  }
  return charCounter;
}

console.log(countChars("Bees"));
//1
console.log(countChars("Bumble Bees"));
//2
console.log(countChars("Bumblebees"));
//1
console.log(countChars("Bumblebees", 'e'));
//3
console.log(countChars("Bumblebees", 'z'));
//0

Chapter 4 Data/Higher order functions

  • array methods: push, pop, shift, unshift, slice, indexOf, concat
  • concat ΓÇ£addsΓÇ¥ arrays, also works on strings etc as one-element array
  • strings, number, Boolean are not objects
  • string methods: slice, indexOf, trim, caseChanges, zeroPad, split, join,
  • ΓǪ notation for rest parameter
  • destructuring arrays
  • JSON.stringify and JSON.parse
// console.log(sum(range(1, 10)));

function range(startIndex,endIndex){
  let rIndex = [];
  for (startIndex; startIndex<=endIndex; startIndex++){
rIndex.push(startIndex);
  }
  console.log("range returns: ", rIndex);
  return rIndex;
}

function sum(aNumArray){
  console.log("in sum, aNumArray: ", aNumArray);
  let total = 0;
  for (let toAdd of aNumArray){
//toAdd = aNumArray[i]
//console.log("aNumber is: ", typeof(aNumber), aNumber)
total += toAdd;
  }
  return total;
}

aRange = range(1,10);
total = sum(aRange);
console.log(total);

Reversing an Array

function reverseArray(anArray){
  let reversedArray = [];
  let tempArray = [...anArray];  
  //https://www.freecodecamp.org/news/how-to-clone-an-array-in-javascript-1d3183468f6a/
  for (let i=0; i<anArray.length; i++){
let item = tempArray.pop();
reversedArray.push(item);
  }
  return reversedArray;
}

ar = [1,2,3,4]
console.log(reverseArray(ar))
//[4,3,2,1]
console.log(reverseArray(["1","2","3","4"]))

Reference:

Eloquent Javascript

History

  • created 2021-06-13
pe/javascript.txt · Last modified: 2021/06/13 08:31 by admin