Intro to JavaScript

advertisement
Intro to JavaScript
Anna Gerber
Intro to JavaScript
Anna Gerber
Programming is like writing a recipe…
Ingredients
(values &
variables)
Directions
(statements)
Intro to JavaScript
Anna Gerber
Programming languages
Intro to JavaScript
Anna Gerber
Tools
Web Browser
• We will use Google
Chrome with built-in
developer tools
https://developers.goog
le.com/chromedeveloper-tools/
Intro to JavaScript
Anna Gerber
Editor
• JavaScript (JS) programs
are stored in text files with
.js file extension or
embedded in HTML
documents
• Use your favourite text
editor to create and edit JS
• We will use Chrome's
console and JSFiddle
(online editor)
http://jsfiddle.net/
Console
• Right-click in Chrome
and select Inspect
Element or select
View > Developer >
Developer Tools
from the menu
Intro to JavaScript
Anna Gerber
• Select the Console tab
from the top of the
developer tools panel
• Type in and hit return to
run (evaluate)
statements
Values
• Numbers
– Integers (whole numbers) e.g. 0, 1, 2, 3, 4
– Floats (fractional numbers) e.g. 3.14
• Strings
– "A string of characters"
– 'This is also a string, but in single quotes'
– "Escape quotes with backslash like this: \" ";
• Booleans
– true
– false
Intro to JavaScript
Anna Gerber
Numeric operators
•
•
•
•
•
•
•
Addition: 5 + 3
Subtraction: 7 – 6
Multiplication: 5.3 * 2.7
Division: 20 / 4
Modulo: 8 % 2
Increment: 5++
Decrement: 2--
Intro to JavaScript
Anna Gerber
Try evaluating
some numeric
expressions
using the console
String operators
• Concatenation
// Evaluates to "this is a concatenated string"
"this is " + "a concatenated string"
• What happens if you add a number to a string?
"Here is a string with a number " + 7
Try it in the
console!
Intro to JavaScript
Anna Gerber
Variables
Store a value with a name for reference elsewhere
in the program
Declaration:
var myVariable;
Assignment statements:
myVariable = true;
Declaration and initial assignment:
var x = 0;
var myString = "This is a string";
Intro to JavaScript
Anna Gerber
Assignment shorthands
Shorthands for variable assignment include:
+=
-=
Experiment with
variable
*=
declarations and
/=
assignment
statements using
%=
the console
x += 3
is equivalent to
x = x + 3
Intro to JavaScript
Anna Gerber
Statements
• Optionally separated by semi-colons
• Use curly braces { } to group statements into
blocks
var radius = 3;
var circumference = 2 * Math.PI * radius;
console.log("result is " + circumference)
Intro to JavaScript
Anna Gerber
Comments
// This is a comment until the end of this line only
var aVariable = "Not a comment";
/*
*
*
*/
//
//
This is a comment spanning several lines,
until the star slash
Use comments to disable/enable statements
var anotherVariable = "Disabled code";
Intro to JavaScript
Anna Gerber
Functions
• A block of statements that can be named and called
• Can take parameters e.g. radius
• Can perform an action or return a result (or both!)
function calculateCircumference (radius) {
var circumference = 2 * Math.PI * radius;
return circumference;
}
// The function is called elsewhere in the program, we
pass in the value 3 for the radius
var myCircumference = calculateCircumference(3);
Intro to JavaScript
Anna Gerber
Evaluating a function via the console
• Use the console to evaluate the
calculateCircumference function
• We can call the function with different values
and combine it with other statements
• The console is great for experimenting however
our code is lost when we restart the browser
Intro to JavaScript
Anna Gerber
Built-in libraries
• Math.PI is a constant (a variable that never
changes value) from the built-in Math library.
Some additional Math functions:
–
–
–
–
–
–
Math.round(4.7)
Math.sqrt(9)
Math.max(1,5)
Math.min(6,7)
Math.floor(5.6)
Math.random()
Experiment with
these functions
using the console
• console.log() is a built-in function (in Chrome)
that prints values to the console
Intro to JavaScript
Anna Gerber
Comparison operators
• Expressions based on comparison operators
evaluate to a boolean:
– Equal:
• 3.5 == 2 // (evaluates to false)
– Not equal:
• "aString" != "anotherString" // (true)
– Greater than / (or equal):
• 6 > 6 // (false)
• 6 >= 6 // (true)
– Less than / (or equal):
• 5 < 3 // (false)
• 5 <= 3 // (false)
Intro to JavaScript
Anna Gerber
Boolean operators
• Combine boolean expressions using logical
operators:
– AND
&&
– OR
||
– NOT
!
Intro to JavaScript
Anna Gerber
Conditional statements
Implement alternative behaviours based on
conditions
if (temperature < 20) {
console.log("It is cold");
} else if (temperature >= 20 && temperature < 29) {
console.log("It is warm");
} else {
console.log("it is hot");
}
Intro to JavaScript
Anna Gerber
JSFiddle
• Online editor and development environment,
allows code to be saved and shared
• Great for prototyping
Intro to JavaScript
Anna Gerber
Exercise: Dice game
• Using JSFiddle, write a function that generates a
random number between 1 and 6 to simulate the
toss of a die
var diceToss = Math.floor(Math.random() * 6 + 1);
• If the number is 6, the game is won. Print a
message to the console indicating whether the
game was won or lost.
if (diceToss == 6) {
console.log("Hooray, you won!");
...
Sample solution: http://jsfiddle.net/AnnaGerber/epaAs/0/
Intro to JavaScript
Anna Gerber
Loops
While loop
var maxLimit = 20, counter = 0, value = 0;
while (value != 6 && counter < maxLimit) {
// ensure variables in loop condition can change
}
For loop
for (var i = 0; i < 10; i++){
// print 0,1,2,3,4,5,6,7,8.9
console.log(i);
}
Update the dice game to keep rolling until the result is 6.
Display the number of rolls it took to win.
Sample solution: http://jsfiddle.net/AnnaGerber/epaAs/2/
Intro to JavaScript
Anna Gerber
Exercise: Using the DOM
• We can access the HTML elements on a web
page via the DOM (Document Object Model)
• Modify the dice game to display the message on
the HTML page instead of the console:
– Create a div element to display the result:
<div id="result"></div>
– Update element content within the script:
document.getElementById('result').innerHTML = ...
Sample solution: http://jsfiddle.net/AnnaGerber/epaAs/1/
Intro to JavaScript
Anna Gerber
Arrays
An ordered list of values
var myArray = [1,6,10];
var anotherArray =
["first value", 5, "third value", false];
// Access values – indexed from 0
myArray[0] // 1
mnotherArray[2] // "third value"
Intro to JavaScript
Anna Gerber
Objects
• Objects have
– State (variables)
– Behaviour (functions)
• Many built-in types are objects e.g. Array, String
var anArray = new Array()
anArray.push("red") // behaviour, anArray is ["red"]
anArray.length // state, it is 1
anArray.push("blue") // anArray is ["red","blue"]
anArray.length // value of length is now 2
var myString = "here's a string"
myString.length // 15
myString.split(" ") // ["here's", "a", "string"]
myString.toUpperCase() // "HERE'S A STRING"
Intro to JavaScript
Anna Gerber
JavaScript Object Notation (JSON)
var myMovies = [
{
name: "The Hobbit",
year: "2013",
director: "Peter Jackson",
stars: ["Ian McKellen", "Martin Freeman", "Richard Armitage"]
},
{
name: "Star Trek",
year: "2009",
director: "J. J. Abrams",
stars: ["Chris Pine", "Zachary Quinto", "Leonard Nimoy", "Zoe
Saldana"]
}
]
Intro to JavaScript
Anna Gerber
Including scripts using JSFiddle
• Developers often make use use of libraries or
frameworks when developing web applications
• In addition to code, Libraries and frameworks
often provide a Cascading Style Sheet (CSS) to
control the appearance of content created
• In JSFiddle, we can select from a set of popular
JS libraries under Frameworks and
Extensions or link to arbitrary scripts or CSS
files under External Resources
• Content Distribution Networks provide hosted
versions of many popular JS libraries and
frameworks. We will use http://cdnjs.com/
Intro to JavaScript
Anna Gerber
Exercise: Working with maps
• We will use the leaflet library to create a map
• Create a JSFiddle and include leaflet JS and
CSS from CDNJS
• Add HTML element to contain the map
<div style="width:100%;height:400px" id="map"></div>
• Add JS to render the map
var map = L.map('map').setView(
[-27.48,153.02], // lat long for South Bank
14 // zoom level
);
// create tile layer using Open Street Map tiles
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png')
.addTo(map);
Intro to JavaScript
Anna Gerber
Exercise: Working with maps (continued)
• Add a marker:
L.marker([-27.48,153.02]).addTo(map)
.bindPopup('South Bank, Brisbane')
.openPopup();
• Explore the leaflet documentation for more
options
– http://leafletjs.com/reference.html
Sample solution: http://jsfiddle.net/AnnaGerber/hXxe4/
Intro to JavaScript
Anna Gerber
Exercise: Data Visualisation
• We will use the Rickshaw charting library, based
on the Data-Driven Documents (D3) framework,
to draw a chart to visualise some data
Average rainfall in mm per year per state
NSW &
Year ACT
2005 498
NT
477
QLD
478
SA
206
TAS
1250
VIC
616
WA
306
2004 493
637
610
214
1223
578
463
2003 484
686
518
260
1227
611
388
Data
source:http://www.water.gov.au/WaterAvailability/Whatisourtotalwaterresourc
e/Rainfalldistribution/index.aspx?Menu=Level1_3_1_2
Intro to JavaScript
Anna Gerber
Exercise: Data visualisation (continued)
• Create a JSFiddle based on the D3 framework
• Add CDNJS links to external resources
(Rickshaw JS and CSS) to the fiddle
• Fork this JSFiddle containing the raw data in
JSON
format:http://jsfiddle.net/AnnaGerber/zN8Eh/0/
Intro to JavaScript
Anna Gerber
Exercise: Data visualisation (continued)
• Create a Graph object using the data:
var graph = new Rickshaw.Graph( {
// attach the graph to the chart element
element: document.querySelector("#chart"),
// render as a stacked area chart
renderer: 'area',
series: chartData
});
graph.render();
• Look at the Rickshaw docs to find out how to
customize the graph e.g add hover tips, legend:
– http://code.shutterstock.com/rickshaw/
Sample solution: http://jsfiddle.net/AnnaGerber/zN8Eh/1/
Intro to JavaScript
Anna Gerber
Download