👨🏿‍💻
Learn
  • Learn And The Power Of Community
  • Intro
    • learn-co-curriculum/welcome-to-learn-verified
    • learn-co-curriculum/your-first-lab
    • learn-co-curriculum/environment-setup
  • Intro to tic tac toe
    • matz-readme
    • what-is-a-program?
    • hello world
    • Intro to irb
    • Reading-error-messages
    • Data-types
    • variable
    • Variable-assignment lab
    • String interpolation
    • Interpolation-super-power
    • Welcome to tic tac toe
    • Array
    • Tic tac toe board
    • Intro to methods
    • Puts print and return
    • Intro-to-tdd-rspec-and-learn
    • Methods and arguments
    • Say hello (lab)
    • Methods-default-arguments
    • ttt-3-display_board-example
    • ttt-4-display-board-rb
    • Intro-to-cli-applications
    • Greeting-cli
    • cli-applications in Ruby
    • Ruby-gets-input
    • Tic tac toe move
    • Truthiness-in-ruby-readme
    • booleans
    • conditional (if)
    • ttt-6-position-taken
    • ttt-7-valid-move
    • rspec-fizzbuzz
    • Looping-introduction
    • Loop
    • while-and-until-loop
    • Tic Tac Toe Turn lab
    • looping-while-until lab
    • Tic Tac Toe Play Loop (lab)
    • Tic Tac Toe Current Player (lab)
    • Intro to ruby iterators
    • Nested Arrays
    • Boolean Enumerators
    • Search Enumerators
    • Tic Tac Toe Game Status
    • tic-tac-toe
  • OOP tic tac toe
    • intro to oop
    • Intro-to-classes-and-instances
    • Classes-and-instances-lab
    • Instance-methods
    • Instance-methods-lab
    • Object Attributes
    • object-attributes-lab
    • Object Initialization
    • Object-initialize-lab
    • oop barking dog lab
    • Procedural-vs-oop
    • oop tic tac toe
  • Git and github
    • Intro to Version Control
    • Git Repository Basics
    • Git-basics-quiz
    • Forks-and-clones
    • Git Remotes and Github
    • Git Remotes and Github Codealong
    • Thinking Ahead: GitHub as Career Differentiator
    • Github Pull Requests
    • Git Collaboration
    • Git-collaboration-quiz
    • Git Basics Quiz
  • HTML
    • A-quick-tour-of-the-web
    • The-web-is-made-of-strings
    • What-makes-the-web-possible?
    • html-introduction
    • Your first-html-tag-lab
    • Nested-tags-and-attributes
    • Well-formed-html-document-lab
    • HTML elements types overview
    • Researching-HTML-elements
    • Separation-of-content-and-presentation
  • CSS
    • Introduction-to-css
    • introduction-to-css-code-along
  • Procedural Ruby
    • Regex-what-is-a-pattern
    • Regex-basics
    • Regex-lab
    • Regex-match-scan-grep-methods
    • learn-co-curriculum/method-arguments-lab
    • Method-scope
    • Return Values Lab
    • Debugging-with-pry
    • Method-scope-lab
    • Truthiness-code-challenge
    • If Statements Lab
    • Case-statements
    • Case-statements-quiz
    • Logic and Conditionals Quiz
    • Ternary Operators and Statement Modifiers lab
    • Looping Lab
    • looping-quiz
    • learn-co-curriculum/looping-times
    • countdown-to-midnight lab
    • Array introduction
    • Using Arrays
    • Array-CRUD-lab
    • Array-methods
    • Array-methods-lab
    • Square array lab
    • Collect and Return Values
    • Collect Lab
    • Badges and Schedules Lab
    • Oxford comma lab
    • Deli counter lab
    • Reverse Each Word Lab
    • Yield-and-blocks
    • Each Lab
    • Return from Yield Statements
    • My All? Lab
    • My Find Lab
    • Cartoon Collections Lab
    • Enumerators Code Challenge
    • Prime? Lab
    • Sorting
    • Sorting Lab
    • Introduction to Hashes
    • Using Hashes lab
    • Ruby-symbols
    • Hash iteration
    • Hash Iteration Lab
    • Hash Iteration with Collect
    • Intro to Nested Hashes
    • Building Nested Hashes
    • Building Nested Hashes Lab
    • Nested Hash Iteration
    • Nested Hashes Lab
    • Multitype Collections Lab
    • Iterating over Nested Hashes Codealong
    • Other Hashes Codealong
    • Hashes Manipulation Lab
  • OOP Ruby
    • OO Ruby Video: Object Orientation Overview
    • Object Accessors
    • Instance Variables lab
    • Video Review: Object Properties
    • Meowing Cat
    • Intro to Object Orientation - Ruby
    • oo basics lab
    • OO Basics with Class Constants
    • Self
    • OO School Domain lab
    • OO Counting Sentences lab
    • Class Variables and Methods
    • Class Variables and Methods Lab
    • Remembering Objects
    • Puppy Lab
    • Advanced Class Methods
    • Advanced Class Methods Lab
    • Video Review: Object Models
    • OO Email Parser lab
    • OO Anagram Detector lab
    • OO Cash Register lab
    • Intro to Object Relationships
    • Belongs to Object Lab
    • Has Many Object
    • Has Many Object Lab
    • Collaborating Objects Review
    • Collaborating Objects Lab
    • OO My Pets
    • oo kickstarter lab
    • OO Banking lab
    • Has Many Objects Through
    • Has Many Objects Through Lab
    • Intro to Inheritance
    • Intro to Inheritance Lab
    • Super
    • Super Lab
    • Intro to Modules
    • Intro to Modules Lab
    • Mass Assignment
    • Mass Assignment and Metaprogramming
    • Mass Assignment Lab
    • Custom Errors lab
    • OO Triangle lab
  • Scraping and project
    • Gems and Bundler
    • Scraping
    • Scraping Lab
    • Kickstarter Scraping Lab
    • Video Review: Object Orientation and Scraping
    • OO Ruby Object Orientation Video Review
    • Music Library CLI
    • Video Review: Music Library CLI
    • Tic-tac-toe with AI project
    • Student Scraper
    • CLI Data Gem Portfolio Project
    • CLI Data Gem Walkthrough
    • CLI Data Gem Walkthrough: Creating a CLI Scraper Gem
    • Common Anti-Patterns in CLI Data Gem
    • Student Example 1: Refactoring CLI Gem
    • Student Example 2: Refactoring CLI Gem
  • SQL
    • What is SQL
    • SQL Intro and Installation
    • SQL Database Basics
    • SQL Databases and Text Editors
    • SQL Data Types
    • SQL Inserting, Updating, and Selecting
    • Basic SQL Queries
    • SQL Aggregate Functions
    • SQL Aggregate Functions Lab
    • SQL Bear Organizer Lab
    • Edgar Codd and Table Relations
    • Table Relations
    • SQL JOINS
    • SQL Complex Joins
    • SQL Join Tables
    • Grouping and Sorting Data
    • SQL Joins Review Lectures
    • SQL Crowdfunding Lab
    • SQL Library Lab
    • Pokemon Scraper Lab
  • ORM And Active record
    • Why an ORM is Useful
    • Mapping Ruby Classes to Database Tables
    • Mapping Classes to Tables Lab
    • Mapping Database Tables to Ruby Objects
    • Mapping Database Rows to Objects Lab
    • Updating Records in an ORM
    • Updating Records in an ORM Lab
    • Preventing Record Duplication
    • ORMs Lab: Bringing It All Together lab
    • Dynamic ORMs
    • Dynamic ORMs with Inheritance
    • ActiveRecord Mechanics
    • Translating from ORM to ActiveRecord
    • Intro to Rake
    • Mechanics of Migrations
    • Writing Our Own Migrations
    • Migrations and Active Record Lab
    • ActiveRecord CRUD Lab
    • Advanced Finding Lab
    • ActiveRecord Associations
    • ActiveRecord Associations Lab
    • ActiveRecord Associations Lab II
    • ActiveRecord Associations Video Review
    • ActiveRecord Associations Video Review II
    • Video Review: Aliasing ActiveRecord Associations
    • Video Review: Blog CLI with ActiveRecord and Associations
  • Rack
    • How the Internet Works
    • Increasing Layers of Abstraction
    • Inspecting the Web with Rack (lab)
    • The HTTP Request
    • Dynamic URL Routes
    • Dynamic Web Apps with Rack (lab)
    • Rack Responses Lab
    • Rack Routes and GET Params Lab
    • HTTP Status Codes
    • Dynamic URLs and Status Codes Lab
    • Video Review: How The Web Works, Pt 1
    • Video Review: How the Web Works, Pt 2
  • Html
    • How the Web Works
    • Site Planning
    • HTML Fundamentals
    • HTTP Status Codes
    • video review how the web works pt 1
    • How the Web Works, Part 2: Overview
    • Setting Up a New Site
    • Document Structure
    • Text Formatting
    • HTML Tables
    • Html-images
    • HTML Links
    • Html backing-up changes
    • HTML Validation
    • Quiz - HTML Fundamentals
    • Dev Tools Super Power
    • HTML Lists
    • Html issue bot 9000 (lab)
    • HTML Forms and Iframes
    • HTML Map and Contact Form Code-along
    • HTML5 Media
    • HTML5 Video Embed Code-Along
    • HTML5 Semantic Elements
    • HTML5 Semantic Containers Code-along
    • HTML5 Quiz
  • CSS
    • CSS Fundamentals
    • CSS Styling Code Along
    • My Little Rainbow
    • CSS Kitten Wheelbarrow
    • CSS Graffiti Override Lab
    • CSS Issue Bot 9000
    • Your first deployment
    • The Box Model
    • Layout Types
    • Float
    • Clearfix
    • Centering
    • Column Structure
    • CSS Columns Code Along Exercise (lab)
    • Box Model & Page Layout
    • Using Z Index
    • Positioning
    • ZHW Shoes Layout (lab)
    • Zetsy (lab)
    • CSS Box Style Code Along
    • Animal Save (lab)
    • Building Responsive Sites
    • Intro to Responsive Media
    • CSS Media Queries
    • Working with Responsive Type
    • Responsive layout
    • The Viewport Property
    • Responsive Features Code-Along (lab)
    • Bootstrap Introduction
    • Bootstrap Code-Along
    • Bootstrap Grid System
    • Grid Layout Code-Along
    • Bootstrap Navbar Code-Along
  • Sinatra
    • What is Sinatra?
    • Sinatra From Scratch
    • Using the Shotgun Development Server (lab)
    • Sinatra Basics
    • Sinatra Hello World Basics (lab)
    • Routes in Sinatra
    • Sinatra Routes Lab
    • Intro To MVC
    • Sinatra MVC File Structure (lab)
    • Sinatra Views: Using ERB
    • Sinatra Views (lab)
    • Sinatra Basic Views Lab
    • Sinatra Views Lab II
    • Intro To Capybara
    • Dynamic Routes in Sinatra
    • HTML Forms and Params
    • Passing Data Between Views and Controllers in Sinatra
    • Sinatra Forms Lab
    • Sinatra Yield Readme
    • Integrating Models Sinatra Code-along
    • Sinatra MVC Lab - Pig Latinizer
    • Sinatra Basic Forms Lab
    • Sinatra Forms
    • Nested Forms Readme
    • Sinatra Nested Forms Lab: Pirates!
    • Lab Review-- Sinatra Nested Forms Lab: Pirates
    • Sinatra Nested Forms Lab: Superheroes!
    • Sessions and Cookies
    • Mechanics of Sessions
    • Sinatra Basic Sessions Lab
    • Using Sessions
    • Sinatra and Active Record CRUD
    • Sinatra Activerecord Setup
    • Sinatra ActiveRecord CRUD
    • User Authentication in Sinatra
    • Sinatra Sessions Lab - User Logins
    • Securing Passwords
    • Secure Password Lab
    • Sinatra Authentication- Overview
    • RESTful Routes
    • Restful Routes Basic Lab
    • Sinatra ActiveRecord Associations: Join Tables
    • Using Tux in Sinatra with ActiveRecord
    • ActiveRecord Associations in Sinatra
    • Sinatra Multiple Controllers
    • Sinatra and Active Record: Associations and Complex Forms
    • Sinatra Playlister (lab)
    • Welcome to NYC Sinatra! (lab)
    • Building a Site Generator, Part 1- Overview
    • Building a Site Generator, Part 2- Overview
    • Fwitter Group Project
  • Rails
    • Welcome To Rails
      • Rails Application Basics
      • Rails Static Request
      • Rails Hello World Lab
      • Rails Model View Controller
      • Intro to Rails- Overview
    • Intro to REST
    • Active Record Models and Rails
    • ActiveRecord Model Rails Lab
    • RESTful Index Action Lab
    • Rails Dynamic Request
    • Rails Dynamic Request Lab
    • Rails URL Helpers
    • Rails URL Helpers Lab
    • Rails form_tag
    • Rails form_tag Lab
    • Create Action
    • Create Action Lab
    • Index, Show, New, Create Lab
    • Edit/Update Action
    • form_for on Edit
    • Strong Params Basics
    • form_for Lab
    • Rails Generators
    • CRU with form_for Lab
    • Resource and Scaffold Generator
    • Rails Blog scaffold
    • Todo mvc assets and managing lists
    • Rails Forms Overview
    • ActiveRecord Validations
    • ActiveRecord Validations Lab
    • Validations in Controller Actions
    • Validations In Controller Actions Lab
    • Validations with form_tag
    • Validations with form_for
    • DELETE Forms and Requests
    • Testing in Rails
    • Validations with form_tag
    • CRUD With Validations Lab
    • Join the Fun rails
    • Activerecord lifecycle reading
    • Displaying Associations Rails
    • Active Record Associations Review
    • Forms And Basic Associations Rails
    • Forms And Basic Associations Rails Lab
    • Basic Nested Forms
    • Displaying Has Many Through Rails
    • Displaying Has Many Through Rails Lab
    • Has Many Through Forms Rails
    • Has Many Through Forms Rails Labs
    • Has Many Through in Forms Lab Review- Overview
    • Deep Dive into Nested Forms- Overview
    • Layouts And Templates in Rails
    • Rails Layouts And Templates Lab
    • Simple Partials
    • Simple Partials Lab
    • Partials with Locals
    • Partials with Locals
    • Refresher on MVC
    • Refactoring Views With Helpers
    • Refactoring Views With Helpers Lab
    • Model Class Methods
    • Optimal Queries using Active Record (lab)
    • Routing And Nested Resources
    • Nested Resource Routing Lab
    • Modifying Nested Resources
    • Modifying Nested Resources Lab
    • Namespaced Routes
    • Namespaced Routes Lab
    • Todomvc 2 lists have items
    • TodoMVC 3: Mark Items Complete
    • Todomvc 4 refactoring with partials and helpers
    • Todomvc 5 deleting items
    • Introduction to Authentication and Authorization
      • Cookies and sessions
      • Cookies and Sessions Lab
      • Sessions Controller
      • Sessions Controller Lab
      • Login Required Readme
      • Login Required Lab
      • Using has_secure_password
      • Has_secure_password lab
      • Authentication- Overviewn
      • OmniAuth
      • Omniauth Lab
      • Omniauth review lecture in todomvc
      • Authentication and authorization recap and gems
    • Rails Amusement Park lab
    • How to Find Gems
  • JavaScript
    • Intro to JavaScript
      • JavaScript Data Types
      • JavaScript Data Types Quiz
      • JavaScript Variables
      • JavaScript Comparisons
      • Conditionals
      • Logical Operators
      • Functions
      • Intro to Debugging
      • Intro to Testing
      • JavaScript Basics Quiz
    • Scope
      • Scope chain
      • JavaScript Practice Scope Lab
      • Lexical scoping
      • Errors and Stack Traces
      • Hoisting
    • Arrays And Objects
      • Objects
      • JavaScript: Objects and Arrays Quiz
      • Object Iteration
      • JavaScript Logging
      • Traversing Nested Objects
      • Filter
      • Map
    • Functions Revised
      • First-Class Functions Lab
      • First-Class Functions
      • First-Class Functions Practice
      • First-Class Functions Practice Lab
    • OOP
      • Creating Objects
      • Object Methods and Classes
      • Using Prototypes
      • Using Classes in Javascript
      • JavaScript This Walkthrough
      • This Code-along
      • Bind, Call, and Apply Readme
      • Bind, Call, Apply Lab
      • Object Relations
      • Association Methods in Javascript
      • Class Relations Lab
      • JavaScript Closures and Higher Order Functions
      • Closures Lab
      • JavaScript Arrow Functions
      • Daily Lunch Lab
    • DOM
      • Introduction to the DOM
      • Introduction to the DOM Lab
      • More on the DOM
      • Creating and Inserting DOM Nodes
      • The DOM Is a Tree
      • Listening to Nodes
      • Modify HTML With jQuery
      • Modifying HTML Lab
      • jQuery Selectors
      • Document.ready
      • Acting On Events Lab
      • DOM Quiz
    • Templates
      • Introduction to CSS
      • CSS Quiz
      • CSS Libraries
      • CSS Libraries Lab
      • Intro to Templates
      • Template Engines
      • Template Engines Lab
      • Advanced Templating
      • Advanced Templating Lab
    • Asynchronous JavaScript
      • Intro to XHR Code Along
      • Hitting APIs Lab
      • Advanced AJAX Lab
      • AJAX and Callbacks
      • AJAX and Callbacks Lab
      • REST Refresher
      • REST Quiz
      • Fetch
      • JavaScript fetch() Lab
      • Intro to Mocha
      • Testing with Spies
      • Testing with Mocks and Stubs
  • Rails and JavaScript
Powered by GitBook
On this page
  • Problem Statement
  • Objectives
  • Describe the JavaScript language and Its Uses
  • Outline the History of JavaScript
  • The Emergence of Asynchronous JavaScript
  • Standardization and Modernization
  • Compilation and JavaScript
  • Write JavaScript in the Chrome Dev Tools Console
  • Coding
  • Debugging
  • Identify JavaScript Syntax and Best Practices
  • Using Semicolons
  • Referencing Functions, Keywords, and Variables
  • Establish Good JavaScript Learning Habits
  • Resources
  • Conclusion
  1. JavaScript

Intro to JavaScript

Problem Statement

If we want to create modern, fully-equipped websites and web apps, we need to use JavaScript. This programming language has its own uses, history, tools and practices, and becoming familiar with them will let us leverage JavaScript's power to improve all of our web experiences.

Objectives

  1. Describe the JavaScript language and its uses

  2. Outline the history of JavaScript

  3. Write JavaScript in the Chrome Dev Tools console

  4. Identify JavaScript syntax and best practices

  5. Establish good JavaScript learning habits

Describe the JavaScript language and Its Uses

JavaScript, commonly abbreviated as JS, is the programming language of the web. Along with HTML and CSS, it's used to create virtually all the web pages and apps you interact with, from Google to Facebook to Wikipedia to Amazon to Netflix.

Each of these three main web technologies plays a role in creating the content you see on a website:

  • HyperText Markup Language (HTML) provides structure to the content, arranging it in a nested, tree-like way, and allows us to mark up the content with attributes like id and class.

  • Cascading Style Sheets (CSS) adds styling to the page, letting us customize the look of the content, often using id and class attributes, in addition to the semantic elements, to target the elements we want to style.

  • JavaScript does pretty much everything else and handles most of the dynamic behavior of a website. For example: reacting to user events (like clicking a button), changing the page's content without reloading, and executing network requests in the background. Like CSS, the joining of HTML elements and changes that happen when they're interacted with (clicked on, moused over, etc.) often happens by targeting elements by their id or class attribute.

When you hover your mouse over a button and it wiggles in anticipation, or when you see new notification alerts on Twitter without refreshing the page, or when new content progressively appears at the bottom of the page as you scroll down your Facebook news feed—that's all JavaScript. At this point, JavaScript is a fundamental aspect of most users' web experience.

JavaScript is one of the most popular languages in the world, and it shows no signs of slowing up. It's still the only programming language that can run in every major browser (HTML is a markup language and CSS is a style sheet language).

Outline the History of JavaScript

The first version of JavaScript was built incredibly quickly in 1995. There were a few other competitors vying to become the language of the web, but they never gained enough traction to knock off JavaScript. And then... not much happened. There were incremental improvements and adjustments, but JavaScript development around 2000 very much resembled JavaScript development in the mid-1990s.

The Emergence of Asynchronous JavaScript

Around the turn of the century, Microsoft wanted to give its customers a way to access their email via a web browser, so they added a new JavaScript feature to Internet Explorer that allowed an already-loaded web page to fire off a request for additional data. It was a huge improvement over existing webmail services that required the whole page to be reloaded in order to check for new email. The process of making requests for additional data became known as Asynchronous JavaScript and XML, or AJAX. (We'll take a long look at AJAX and asynchronous code execution later on in the JavaScript material.) By 2004, when Gmail came along with a heavy dependence on AJAX, JavaScript was in the early stages of a rise in popularity and usefulness that has continued to the present day.

Standardization and Modernization

Even though AJAX provided a lot of useful functionality to the language, JavaScript was still difficult to program. Different browsers implemented different features in different ways. There were a few competing camps which all had different ideas about what the language should be. In early 2009, everyone came together to agree on standardization. The fifth version of JavaScript was released in late 2009. It's known as ES5 ('ES' for ECMAScript, the official name of the JavaScript specification) or Harmony (because it harmonized competing implementations of the ECMAScript specification). (Note: We still refer to the language as JavaScript, and use the particular version titles only when we need to point to particular version features.)

Harmonization was great, but the language was still lacking modern language features common to most standard programming languages like PHP, Java, C, Python and Ruby. JavaScript began to address those concerns in 2015 with the unveiling of ES6 or ES2015, the sixth version of JavaScript. Since then, they have released updates every year, including ES2016 and ES2017, both of which have brought additional modern features into the language.

Compilation and JavaScript

The name JavaScript was chosen as a marketing ploy: the Java language was all the rage in 1995. The two languages share very little in common. Some JS syntax is borrowed from Java (to make it more familiar for those early developers coming over from the world of Java), but that's about it.

Unlike Java, JavaScript code doesn't need to be compiled. The code that you write in a JavaScript file is the exact same code that the web browser parses and runs. In a compiled language like Java, you write some code in a human- readable format, and then the compiler takes that code and essentially translates it into machine-readable code. That means that it's very difficult to open up the source code for an application written in a compiled language and poke around in it to understand what's going on.

Because JavaScript doesn't get compiled, that is exactly what we can do with JavaScript code. Towards the end of this JavaScript curriculum, you'll find yourself able to go to a website you like, open up the source code using your browser's developer tools, and look directly at all of the JavaScript code used on that site. This is a powerful feature of the language and an incredible tool for learning by example.

Write JavaScript in the Chrome Dev Tools Console

Every major browser comes with a built-in set of developer tools that you can use to inspect, modify, and debug the content of a web page.

The console is an environment in the browser where we can type and run arbitrary JavaScript code in the context of the current browser window. The console is sandboxed, meaning the only resources it has access to are those loaded on the current page. Once we start declaring variables and functions in separate JavaScript files, we'll be able to access and play around with them in the console. The console is the single best tool for debugging JavaScript in the browser, so start familiarizing yourself with it now.

The Ctrl+Shift+J / Cmd+Opt+J command should open up straight into the console. If, for whatever reason, it doesn't, you can always click on Console in the dropdown (when the dev tools are collapsed) or in the list of tabs:

To access the Chrome dev tools settings — for example, to change the theme from light to dark — click the three vertical dots:

If at any point the console becomes cluttered with errors, warnings, or anything else, click the Clear console button:

Okay, okay, enough background and setup. Let's write some code!

Coding

We'll start off with some simple math. In the console, type 1 + 1 and press enter. You should see the number 2 appear.

You just wrote and ran your first line of JavaScript code!

Next up, let's write some text. To make sure the JavaScript engine knows that we're trying to write some literal text, we need to wrap it in quotation marks, like so:

"This is some literal text in JavaScript!"

Go ahead and type that classic phrase, "Hello, world!", into the console and press enter. It returned "Hello, world!" right back to us. Try typing some more literal text into the console, such as your name. Don't forget the quotation marks!

Debugging

JavaScript comes with a number of built-in features that can help us build and debug our applications. One of the simplest is the alert() function, which creates a simple alert in the browser window:

Try it out yourself! Put some numbers, text, or maybe even a mathematical equation between alert()'s parentheses and see what happens.

This is just a quick demonstration of one of the many features JavaScript makes available to you in the browser. In the lessons to come, we'll learn a lot more about the built-in magic JavaScript provides for us.

Identify JavaScript Syntax and Best Practices

Using Semicolons

In JavaScript, ending each statement with a semicolon is optional. When you run some JavaScript code in the browser, the JavaScript engine actually makes multiple passes over the same code. The first pass is to parse the syntax of your code. The second pass is to initialize variables and functions and store them in memory. And the third pass is to actually execute the code line-by-line. We'll learn more about the second and third phases in an upcoming lesson.

Most programmers consider the first and second pass the "compilation phase." It's where JavaScript makes sure that your code is readable and it sets up the computer to run your code ("Hey, CPU, can we have enough memory to hold this Array?", etc.). It's a lot like setting up a chain of dominoes. The third phase, as we called it above, is often called the "execution phase." It's where the code is run top-down, left-to-right. It's where JavaScript tips over the first domino and starts the chain of "doing work."

During the first pass as it's parsing the syntax of your JavaScript file, the engine undertakes a process called automatic semicolon insertion. The name says it all, and this is why statement-ending semicolons are optional — the JavaScript engine will automatically insert them for us. There's one main gotcha that we'll talk about in the lesson introducing functions, but it generally works as expected. That being said, semicolons are part of the JavaScript syntax, whether you insert them or the engine does. It's not a bad idea to practice putting them at the end of your statements, at least until you become more comfortable with the overall syntax of the language. Many of the examples in upcoming lessons will include semicolons to show you where they go, and we recommend you follow the same patterns.

Referencing Functions, Keywords, and Variables

Throughout the JavaScript curriculum on Learn.co, we'll often refer to pieces of code in these READMEs. If the piece of code is a function, we'll include a pair of trailing parentheses to mark it as such, e.g., myFunction() or the already introduced alert(). If the piece of code is a keyword in the language or a variable that we're referencing, there'll be no parentheses: myVariable, debugger, if...else, etc.

Establish Good JavaScript Learning Habits

It's impossible to overstate how important practice is when you're learning a new programming language. You can read the READMEs and watch the videos, but the true education is in writing code — lots of it.

As you move through the JavaScript curriculum, you should almost always have a browser console open, either on the lesson page or in a separate window. Code along with every example. Get used to the syntax and familiarize yourself with the errors that arise when you mistype something. Clear the console or simply refresh the page whenever you need a clean slate. Code, code, code, code, code.

Resources

Conclusion

JavaScript is a popular and powerful programming language for the web. It works with HTML and CSS to provide many of the web experiences users now interact with daily. Its history shows that its evolution has been complicated, but improvements are happening now on a regular, yearly basis. We can use the console in Chrome Dev Tools to run JavaScript code and there are best practices to use when it comes to syntax and referencing functions, keywords and variables. The most effective way to understand JavaScript code is to practice writing it frequently.

PreviousJavaScriptNextJavaScript Data Types

Last updated 5 years ago

A language of many talents, JavaScript allows us to create incredibly diverse applications that run in the browser, on the back-end as NodeJS, on the desktop, and on mobile devices. It's a flexible language, allowing us to program in many different styles — and , in particular — mixing and matching concepts to adapt to our needs. It's powerful, scalable, and has a robust community of developers churning out new code and advancing the language. And, finally, it's a great first or second language to learn.

NOTE: To ensure that instructions and screenshots match up with your experience, use browser.

To , press Ctrl+Shift+J (Windows / Linux) or Cmd+Opt+J (Mac). Chrome ships with a whole suite of useful dev tools, but the only one we care about for now is the JavaScript console.

The code you wrote, 1 + 1 is an expression. In JavaScript, an expression is . The value that it returned, 2, is aptly referred to as the return value of the expression. Try out some more mathematical expressions and see what they return!

View on Learn.co and start learning to code for free.

functional
object-oriented
Google Chrome
open the dev tools in Chrome
a valid unit of code that returns a value
W3C — A Short History of JavaScript
Wikipedia — ECMAScript: Versions
MDN — Getting started with the Web
Intro to JavaScript
Opening the console
Clearing the console
Changing the theme
Celebration time!
Text in the console
Math in the console
Alerting in the console