Fundamental JS & Logic
Objectives
By the end of this lesson you should be able to...
Define and describe the purpose of a REPL
Understand the very basics of programming
Evaluate expressions using booleans and arithmetic operators
Agenda
The REPL
Arithmetic Operators
Comparison Operators
Logical Operators
Logic Problems
Agenda
The REPL
Arithmetic Operators
Comparison Operators
Logical Operators
Logic Problems
The REPL
READ
EVAL
LOOP
read input from the keyboard
evaluates the code that it reads
run the previous commands until termination
formats and displays the results
The REPL
wes:~/ $ node
> 10 + 90;
100Run a REPL w/Node
wes:src/ $ node ./example.js
done.
wes:src/ $Run a file w/Node
CTRL + D to Quit
or
CTRL + C twice
CTRL + C to cancel
Agenda
The REPL
Arithmetic Operators
Comparison Operators
Logical Operators
Logic Problems
Arithmetic Operators
wes:~/ $ node
> 3 + 3
6
> 6 - 4
2
> 12 / 2
6
> 3 * 11
33wes:~/ $ node
> 3 + 3 + 3
9
> 3 * 4 + 5
17
> 3 * (4 + 5)
27
> (9 / 3) * (4 + 5)
27The Basics
Chaining & Precedence
Arithmetic Operators
wes:~/ $ node
> 10 / 2
5
> 10 % 2
0
> 10 / 3
3.3333333333333335
> 10 % 3
1wes:~/ $ node
> 10 / 3
3.3333333333333335
> Math.ceil(10 / 3)
4
> Math.floor(10 / 3)
3
> Math.round(10 / 3)
3Modulo (%)
Rounding Up & Down
Agenda
The REPL
Arithmetic Operators
Comparison Operators
Logical Operators
Logic Problems
Comparison Operators
wes:~/ $ node
> 3 > 1
true
> 1 < 10
true
> 12 > 21
false
> 13 < 3
falsewes:~/ $ node
> 3 >= 3
true
> 3 >= 4
false
> 3 <= 3
true
> 3 <= 2
falseThe Basics
Compare or Equivalent
Comparison Operators
wes:~/ $ node
> 3 >= ( 4 - 1 )
> 10 <= ( 100 / 20 )
> ( 10 - (15 / 3) + 10 ) > ( 11 * (11 + 2) )
> ( 11 - 1 / 1 ) < ( 100 / ( (25 / 5) + 5 ))
Chaining & Precedence
truefalsefalsefalseComparison Operators
wes:~/ $ node
> 10 === 10
true
> 10 === 1
false
> "ABC" === "abc"
false
> "abc" === "abc"
truewes:~/ $ node
> 3 !== 3
false
> 3 !== 13
true
> "abc" !== "ABC"
true
> "abc" !== "abc"
falseEquivalency
Not Equivalent (Bang!)
Actually a Logical Operator
Comparison Operators
wes:~/ $ node
> 3 == 3
> 3 != 3
> 3 == "3"
> 3 != "3"
wes:~/ $ node
> true === "true"
> true == "true"
> 1 == "true"
> 1 == true
Evil, Evil "=="
Like, seriously?
truefalsetruefalsefalsefalsefalsetrue"==" attempts to coerce types, sometimes, maybe, if it feels like it
Agenda
The REPL
Arithmetic Operators
Comparison Operators
Logical Operators
Logic Problems
Logical Operators
Logical Operators allow us to check for validity of a statement
For example, is the following statement
true or false:
I am both a student in class and not a student in class
Logical Operators
wes:~/ $ node
> true && true
true
> true && false
false
> false && false
false
> false && true
falsewes:~/ $ node
> true || true
true
> true || false
true
> false || true
true
> false || false
falseThe Basics of And (&&)
The Basics of Or (||)
The last two evaluates slightly faster because of Short-Circuit Evaluation
The first two evaluate slightly faster because of Short-Circuit Evaluation
Logical Operators
wes:~/ $ node
> ( 3 > 2 ) || false
> ( 3 !== "3" ) && ( 10 < 25 )
> ( 1 !== 0 ) && ( 10 % 3 > 2 )
> true === !( (11 - 1 / 2) > 11 )
Numbers, Chaining, and Bang
truetruetruefalseLogical Operators
wes:~/ $ node
> 1 == true
true
> "" == false
true
> 0 == false
true
> !true === false
truewes:~/ $ node
> !!0
false
> !!""
false
> !!" "
true
> !!1
true...?
Truthiness & Falseness
All types have inherent truthiness or falseness, which you can check with "!!"
Agenda
The REPL
Arithmetic Operators
Comparison Operators
Logical Operators
Logic Problems
Logic Problems
wes:~/ $ node
> false || !!false || !false
> true && !( 10 > 10 ) && !( 10 % 2 )
> ( 11 - 9 ) && !( "3" !== "3" ) && !!1024
> (!!0 || !!"" || !!false) === !!0
> !( 100 * (10 % 5) ) || !( (3 !== "3") && !(false) )
> !"user is not signed up" &&
... !!"wants to purchase" ||
... !!"can receive a free trial"
truetruetruetruetruetrueLogic Problems
Create 5 logic puzzles on your own and then trade them with a neighbor
Try your best to stump them and don't evaluate them with the console!

Fundamental JavaScript & Logic
By Wes Reid
Fundamental JavaScript & Logic
- 834