On Github kenkunz / js-crash-course
Are you convinced yet?
Source: Alex's blog › Javascript vs Perl vs Python vs Lua speed comparison
Supports object-oriented, imperative and functional programming styles.
console.log('Hello, world!');Run
// these are all number literals console.log( 1, 1.23, 1.2e4, 1.2e-4, 0377, 0xFF ); // here are some other interesting numbers console.log( 0/1 , 1/0, -1/0, 0/0 ); // they're all numbers console.log(typeof 1, typeof Infinity, typeof NaN);Run
var s = "foo"; console.log( s.length ); console.log( s.toUpperCase() ); console.log( s[1], s.charAt(1), s.charCodeAt(1) ); console.log( s + "bar" ); var s2 = s.replace("oo", "owl"); console.log( s, s2 ); console.log( typeof s );Run
console.log( true, false ); console.log( true && false ); console.log( true || false ); console.log( !true ); console.log( 0 === 0, 0 !== 0 ); console.log( typeof true, typeof false ); // note: all of these evaluate to false: false, 0, "", null, undefined;Run
var o = { foo: "abc", bar: 1, baz: { a: "bingo", b: "flamingo" } } console.log( o.foo ); console.log( o["bar"] ); console.log( o.baz.a ); var key = "bar"; console.log( o[key] );Run
JSON = JavaScript Object Notation
var a = [1, 2, 3, "foo"]; var b = Array(100); console.log( a.length, b.length ); a[20] = "twenty"; console.log( a.length, a[20], a[19] ); console.log( Object.keys(a) ); console.log( typeof a );Run
function randomInt(max) { var random = Math.random() * max; var randomInt = Math.round(random); return randomInt; } console.log( randomInt(100) ); console.log( randomInt(1000) );Run
var foo = 'foo', bar = [ 1, 2, 3 ], baz; console.log( foo, bar, baz ); if (true) { var foo = 1; } // console.log(foo);Run
var foo = 'foo'; function bar() { var foo = 'bar'; return foo; } console.log( bar() ); console.log( foo );Run
var foo, bar; function foobar() { foo = 'foo'; var bar = 'bar'; } foobar(); console.log( foo, bar );Run
var a = 0.1, b = 0.2, c = 0.3; if (a + b === c) { console.log('JavaScript does good maths!'); } else if (a * 2 === b) { console.log('at least sometimes!'); } else { console.log('wtf?'); }Run
var fav = prompt("What's your favorite color?"); switch (fav.toLowerCase()) { case "blue": console.log("mine too!"); break; case "green": console.log("it's not easy being green..."); break; default: console.log("how nice"); }Run
(often an anti-pattern)
var list = [1, 2, 3, 4, 5]; var item; while (item = list.pop()) { console.log(item); } // this will run at least once do { console.log('length:', list.length); } while (list.length);Run
var list = ["one", "two", "three", "four", "five"]; // just like C for ( var idx = 0 ; idx < list.length ; idx++ ) { console.log( list[idx] ); }Run
var person = { name: 'Ken', title: 'Director of Product Development', favoriteMovie: 'District 9' } for (key in person) { console.log( key, ":", person[key] ); } // note: no guaranteed orderingRun
// ... temporarily redefine console.log var _originalLog = console.log; console.log = function(val) { _originalLog("EVAL LOG: " + val); } var code = 'foo bar baz'; try { eval(code); } catch(e) { console.error('EVAL ERROR: ' + e.toString()); } finally { console.log = _originalLog; }Run
We're not in Kansas Classical Inheritance land anymore
// _any_ function can be used as a constructor function foo() { return 'foo'; } // use the 'new' operator to construct an object var f = new foo(); console.log( f.constructor ); console.log( f.__proto__ === foo.prototype );Run
function Shape(id) { this.id = id; } Shape.prototype.shapeName = 'Generic Shape'; Shape.prototype.inspect = function() { return this.shapeName + " (" + this.id + ")"; } var shape = new Shape(123); console.log( shape.inspect() );Run
function Shape(id) { this.id = id; } Shape.prototype.shapeName = 'Generic Shape'; Shape.prototype.inspect = function() { return this.shapeName + " (" + this.id + ")"; } function Rectangle(width, length) { this.width = width; this.length = length; this.id = width + 'x' + length; } Rectangle.prototype = new Shape(); Rectangle.prototype.shapeName = 'Rectangle'; Rectangle.prototype.area = function() { return this.width * this.length; }Run
let foo = 'foo'; if (true) { let foo = "bar"; console.log(foo); } for (let foo=1; foo<2; foo++) { console.log(foo); } console.log(foo);Run
var a = [ "Hydrogen", "Helium", "Lithium", "Beryllium" ]; // old way a.map(function(s){ return s.length }); // new way a.map( s => s.length );Run
function Foo() { this.val = 10; setTimeout(function() { console.log(this.val); }, 100); setTimeout(() => console.log(this.val), 200); } new Foo();Run
class Person { constructor(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } get name() { return this.firstName + " " + this.lastName; } set name(name) { var names = name.split(" "); this.firstName = names[0]; this.lastName = names[1]; } }Run
// default arguments var hello = function(name = "guest") { console.log(name); } // destructuring assignment [ first, , last ] = [ 1, 2, 3, 4, 5 ];Run
How the IE6 DOM almost killed my soul
$( "button.continue" ).html( "Next Step..." )
var hiddenBox = $( "#banner-message" ); $( "#button-container button" ).on( "click", function( event ) { hiddenBox.show(); });
$.ajax({ url: "/api/getWeather", data: { zipcode: 97201 }, success: function( data ) { $( "#weather-temp" ).html( "" + data + " degrees" ); } });