200 likes | 315 Views
4.4 JavaScript (JS). Deitel Ch. 7, 8, 9, 10. JavaScript & Java: Similarities. JS (JavaScript) is case-sensitive Operators arithmetic: unary + , unary - , + , - , * , / , % bit-wise: ~ (unary), & , | , << , >> , >>> logical: ! (unary), && , ||
E N D
4.4 JavaScript (JS) Deitel Ch. 7, 8, 9, 10
JavaScript & Java: Similarities • JS (JavaScript) is case-sensitive • Operators • arithmetic: unary +, unary -, +, -, *, /, % • bit-wise: ~ (unary), &, |, <<, >>, >>> • logical: ! (unary), &&, || • strings: + (concatenation) • compound assignment: • ++, --, • op= where op is one of the binary operators above, e.g., +=, -=, |=, &&=, • relational: ==, !=, <, >, <=, >= • conditional: op1 ? op2 : op3 (if op1 then op2 else op3)
JS & Java: Similarities (cont.) • Assignment with = • Syntax and semantic of control structures • if • if-else • shift-case • while • do-while • for • except for-in, that's different • Block {…}
JS & Java: Similarities (cont.+) • Syntax of identifers • e.g., index_1, theCamelNotation • Syntax of numeric and string constants: • e.g., -40, 3.14, 0.1E-7, 1.2e2, NaN, "a string", 0xFF00FF, 0x0a1b2c • Special characters: /n, /t, /f , /r, /", /', //, etc. • Special values: null, true, false • Subprogram calls: sub(p1,p2,…) • Array initialization • e.g.: var cars = ["Mini", "Miata"]; • Array indices begin with 0, end with length-1 • Array access: cars[0]
JS & Java: Similarities (cont.++) • break statement • continue statement • return statement • Subprograms can throw exceptions • exceptions are objects, can carry information • difference: subprograms don't declare what they throw • try-catch statement • Object instantiation: new Name(…) • All objects inherit method toString(…)
JS & Java: Differences • Type-less variables vs. strongly typed • Interpreted vs. hybrid • Functional features vs. purely imperative • Syntax: declarations, subprograms, classes, … • Additional statements • Different scope rules • Only few standard objects vs. rich set of supporting classes (JDK) • Very different Object-Oriented Facilities • object-prototype vs. class concept • no encapsulation • different inheritance • different syntax
Variables • Variables can be declared with var • mandatory for locals • optional, but recommended for globals • Global variables are assigned outside of functions • Typing is implicit • values have types, not variables • a variable can hold a value of any type • the expression decides the type • Type conversion errors are detected at run-time!
Types • Types: • "primitive": • undefined, null, boolean, number, string • function, object • Operator typeof • returns "undefined", "boolean", "number", "string", "function" or "object" • null or arrays are also "object"s
Values • Strings can be enclosed in ' • 'the "other" way' • Special value: undefined • var a = [1, , , 2]; // a[1],a[2] are undefined • undefined can be tested • if (value) {use(value)} else {alert("undefined value");} • In a condition • 0, "", null and undefined are interpreted as false • everything else is interpreted as true • Watch out: JS doesn't protect you against misuse of values in a condition!
Arrays • Array is an explicit object Array • e.g.: var cards = new Array(); • e.g.: var cards = new Array(12);//0..11 undefined • e.g.: var nos = new Array(1,2,3);//=[1,2,3] • Predefined property length • Assigning an element at index that didn't exist is ok • it extends the array • An associative array is not an Array object • indices can be strings • array notation used for accessing an object's properties • see later
Array methods • push(item) appends the item at index length • i.e., increments length • pop() removes and returns the last item • decrements length • shift() removes and returns the first item • decrements length and indices of all other items • slice(from,[to]) returns the subarrayfrom..to-1 • concat(array) appends all items of array • splice(from,n,[it1,it2,…]) • replaces n items starting at from by items it1,it2,… • reverse(), sort(), toString()
Statements • Statements don't need to be separated by; • but they can – it's recommended • ; is needed for several statements on one line - don't do that! • for-in statements assigns consecutive indices • e.g.: for (var i in anArray) {alert(anArray[i]);} • with statement • allows using properties of an object without object prefix • e.g.:with (document) { write("<h1>Greetings</h1>"); //= document.write() write("<p>Hi there!</p>");}
Subprograms • Syntax • function name (…) {…} • Anonymous functions • name = function (…) {…} • called the same way: name(…) • Function body is stored as text • it can be retrieved and modified! • Functions are data • they can be assigned to variables, stored in an array, etc. • A function is an object, can be defined that way • var sum = new Function("a","b","return a+b"); • A function can also define a "class" (see later)
Function Parameters • It's ok to call a function with fewer parameters • you can check for undefined values • also, arguments property holds an array of all parameter values • Parameter passing • by value • numbers, strings, true, false, null, undefined • by reference • objects • Return values are passed the same way
Built-in Functions: Dialogs • alert(message) • displays a modal dialog with message and OK button • often used while debugging • e.g., alert("variable=" + variable); • used to display multiple lines • e.g., alert("line 1\nline 2\nline3"); • confirm(message) • displays a modal dialog with message and with buttons OK and Cancel • returns true if the user clicked OK • returns false if the she clicked Cancel • prompt(message) • displays a modal dialog with message, input field and OK button • returns the text that the user typed into the input field
Built-in Functions (cont.) • parseInt(string) • attempts to convert the string into an integer number and return it • returns the integral part of a real number or NaN if string isn't a number • parseFloat(string) • attempts to convert the string into an floating point number and return it • returns NaN if string isn't a number • eval(expression) • interprets the expression as JavaScript code
JavaScript Pitfalls • JavaScript is "silent" • run-time errors stop script's execution • syntax errors may not matter if the code is not executed • JS allows assignments within expressions • like Java • e.g. var x=++y – x=y--; //heck, what? • never use that! don't do that!
Browser Pitfalls • IE just reports "runtime error" • Firefox error line numbers are off • check a line before or after • JS in IE is not the same as JS in Firefox is not the same as JS in Opera is not the same as … • in other words: var browsers = [Firefox,IE,Opera,Safari]; var text="You have to test and test because\n"; for (var i = 0; i < browsers.length; i++) { text+="JS in "+browsers[i]+" isn't the same as in\n"; } alert (text+"...");
JS & Java • Facit: There are a lot of similarities But despite these similarities JS is very different from Java
More to Come • Object-Oriented JavaScript • JavaScript with DOM • Events with JavaScript