Variables

    - declare JavaScript variables with var, let or const. 
    - If the value of the variable can change, like a total, use let. If the value is set, like prices, use const. Variables can hold any data type. 
var x = 5;
var y = 6;
var z = x + y;

z
11

Data types- there are 8 JS data types.

  • List a few data types that you already know > >

1. String: a series of characters, written with single or double quotes

let text = "Mort";
text
'Mort'
let text2 = 'Yeung';
text2
'Yeung'

2. Number: can be integers or decimals.

    - You can also have exponential notation for large/small numbers 

3. Bigint: used to store integer values that are too big to be represented by a normal JS number

    - JavaScript integers are only accurate up to 15 digits
let number = 1234567890123456789012345n;
let Largenum = BigInt(1234567890123456789012345)

let typeLargenum = typeof Largenum;
typeLargenum
evalmachine.<anonymous>:1
let number = 1234567890123456789012345n;
             ^^^^^^^^^^^^^^^^^^^^^^^^^

SyntaxError: Invalid or unexpected token
    at createScript (vm.js:56:10)
    at Object.runInThisContext (vm.js:97:10)
    at run ([eval]:1020:15)
    at onRunRequest ([eval]:864:18)
    at onMessage ([eval]:828:13)
    at emitTwo (events.js:106:13)
    at process.emit (events.js:191:7)
    at process.nextTick (internal/child_process.js:758:12)
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickCallback (internal/process/next_tick.js:104:9)
Largenum
evalmachine.<anonymous>:1
Largenum
^

ReferenceError: Largenum is not defined
    at evalmachine.<anonymous>:1:1
    at ContextifyScript.Script.runInThisContext (vm.js:25:33)
    at Object.runInThisContext (vm.js:97:38)
    at run ([eval]:1020:15)
    at onRunRequest ([eval]:864:18)
    at onMessage ([eval]:828:13)
    at emitTwo (events.js:106:13)
    at process.emit (events.js:191:7)
    at process.nextTick (internal/child_process.js:758:12)
    at _combinedTickCallback (internal/process/next_tick.js:73:7)

4. Boolean: true or false, used in conditional testing

Boolean(10 > 9)
true

Write a boolean statement that outputs true

Boolean(1<2)
true

5. Undefined: a variable without a value, has the value undefined/empty values

let name;  
name
grade = undefined;

6. Null: represents the intentional absence of any object value

    - variable is empty at the moment and may have a value later
let result;

result = Boolean(undefined);
console.log(result); // false

result = Boolean(null);
console.log(result); // false
false
false

7. Symbol: used to represent unique values that can be used as identifiers/keys in objects.

    - They are also used to create private properties and methods in classes.
    - unique and immutable, so they can be used as unique identifiers in objects and classes.
    - useful for creating constants that can be shared across different parts of your code.
// Create a Symbol
const mySymbol = Symbol();

console.log(mySymbol);
// expected output: Symbol()
Symbol()
const myObject = {
    [mySymbol]: 'Hello World'
  };
  
  console.log(myObject);
{}

Edit/add to the code above so that it outputs "Hello World"

8. Object: an unordered collection of key-value pairs. Each key-value pair is called a property.

    - object: written with curly braces {}, name:value pairs
    - array: written with square brackets, separated by commas 

Object

  • Identify the name/keys in the object below: name, breed, age.
  • Identify the values in the object below: Elly, Rottweiler, 4.
const dogs = {name: "Elly", breed:"Rottweiler", age:4, color:"black"}
dogs
{ name: 'Elly', breed: 'Rottweiler', age: 4, color: 'black' }

Array

const songs = ["Love Story", "Blank Space", "I Knew You Were Trouble"];
songs
[ 'Love Story', 'Blank Space', 'I Knew You Were Trouble' ]

Const

    - We use const to declare variables whose value can be initialized only at the time of declaration.  
    - Const means that the identifier cannot be reassigned. 
const cost1 = 2;
const cost2 = 11;
let totalCost = cost1 + cost2;

totalCost
13

Conditionals: control behavior, decides whether or not pieces of code can run.

- If: if a condition is true it is used to specify execution for a block of code.
- Else: if the same condition is false it specifies the execution for a block of code.
- Else If: new test if the first condition is false.
if (10 > 5) {
    var outcome = "True";
}

outcome;
'True'
if ("red" === "blue") {
    var outcome = "if block";
} else {
    var outcome = "else block";
}
outcome;
'else block'
let temperature = 54
if (temperature < 70) {
    cast = "Chilly";
  } else if (temperature < 60) {
    cast = "Cold";
  } else {
    cast = "Warm";
  }

cast
'Chilly'

Create a conditional statement about how you would greet someone based on the time of day.

hoursAwake = 10;
if (hoursAwake > 4) {
    cast = "Good afternoon.";
  } else if (hoursAwake > 8) {
    cast = "Good night.";
  } else {
    cast = "Good morning.";
  }

cast
'Good afternoon.'

Functions:

- defining: define with function + functionName(parameter) { function code }.  It can be unnamed/anonymous can be defined based on a condition.
- calling: simply put the function name with a parameter and semicolon, or a function can call itself (recursive)

Iteration:

    - for loop: repeats until a specified condition evaluates to false
    - do...while: repeats until a specified condition evaluates to false
    - while statement: executes its statements as long as a specified condition evaluates to true
    - label: provides a statement with an identifier that lets you refer to it later in the code. ex. you can use a label to identify a loop, and then use the break or continue statements to    indicate whether a program should interrupt the loop or continue its execution
    - break: used to terminate a loop, switch, or in conjunction with a labeled statement
    - continue: can be used to restart a while, do-while, for, or label statement
    - for...in: iterates a specified variable over all the enumerable properties of an object
    - for...of statement creates a loop Iterating over iterable objects, invoking a custom iteration hook with statements to be executed for the value of each distinct property

JavaScript in HTML- Questions

  1. Where do you store the JavaScript Code?
    • JavaScript code can be stored in a separate .js file or directly in the HTML file using a <script> tag.
  2. How do you import a JS file into HTML?
    • To import a JS file into an HTML file, you can use the <script> tag with the src attribute set to the URL of the JS file. For example, <script src="script.js"></script> will import the script.js file.
  3. What is onClick?
    • onClick is an event handler attribute that can be added to an HTML element to specify a JavaScript function to be executed when the element is clicked. For example, <button onClick="myFunction()">Click me</button> will call the myFunction() function when the button is clicked.
  4. What tag do you use to write JavaScript code?
    • The <script> tag is used to write JavaScript code in an HTML file. For example, <script>console.log("Hello, world!")</script> will output "Hello, world!" to the console.

Hacks

  1. Add notes in this notebook
  2. Complete the code portions, questions, and prompts throughout the notebook
  3. Extra Credit: code a small JavaScript game

Notes

  • JavaScript variables can be declared with var, let, or const, and can hold any data type.
  • There are eight JavaScript data types, including strings, numbers, BigInts, booleans, undefined, null, symbols, and objects.
  • Conditional statements control behavior and decide whether or not pieces of code can run, using if, else, and else if.
  • Const is used to declare variables whose value can only be initialized at the time of declaration and cannot be reassigned.
// game works here: https://soham360.github.io/csp-fastpages/2023/04/24/JavaScriptGame.html

<html>
  <head>
    <title>Guess the Number Game</title>
  </head>
  <body>
    <h1>Guess the Number Game</h1>
    <p>I'm thinking of a number between 1 and 100. Can you guess it?</p>
    <input type="text" id="guess">
    <button onclick="checkGuess()">Guess</button>
    <p id="message"></p>

    <script>
      // Generate a random number between 1 and 100
      const randomNumber = Math.floor(Math.random() * 100) + 1;

      // Function to check the user's guess
      function checkGuess() {
        const guessInput = document.getElementById("guess");
        const guess = parseInt(guessInput.value);
        const message = document.getElementById("message");

        if (isNaN(guess) || guess < 1 || guess > 100) {
          message.textContent = "Please enter a valid number between 1 and 100.";
        } else if (guess === randomNumber) {
          message.textContent = "Congratulations! You guessed the correct number!";
        } else if (guess < randomNumber) {
          message.textContent = "Too low! Try again.";
        } else if (guess > randomNumber) {
          message.textContent = "Too high! Try again.";
        }

        // Clear the input field
        guessInput.value = "";
      }
    </script>
  </body>
</html>