User Tools

Site Tools


pe:javascript

This is an old revision of the document!


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 === <code> 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); } </code> === fizzbuzz === <code> 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”) } </code> === Chessboard === <code> 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 = “”; } </code> ===== 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 === <code> function min(x1, x2) { return Math.min(x1, x2); } console.log(min(0, 10)) ΓåÆ 0

console.log(min(0, -10)); ΓåÆ -10 </code> === Recursion === <code> 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 </code> === Bean counting === == Part 1 == <code> 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”)); </code>

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.1623572995.txt.gz · Last modified: 2021/06/13 08:29 by admin