1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | // Javascript Objects let user = new Object(); // "object constructor" syntax let user = {}; // "object literal" syntax let user = { // an object name: "John", // by key "name" store value "John" age: 30 // by key "age" store value 30 }; user.name; // = "John", Access member variables user.age; // = 30 user.salary; // = undefined user['name']; // = "John", Alternative access member variables user['age']; // = 30 user.isAdmin = True. // Add new variable and assign value // Alternative using computed properties let engineer = { ['name']: "keith", ['age']: 30 }; 'age' in engineer; // true 'salary' in engineer; // false for (key in engineer) { console.log(key); } name age function makeUser(name, age) { return { name: name, age: age, // ...other properties }; } // Is the same as function makeUser(name, age) { return { name, // same as name: name age, // same as age: age // ... }; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | // Object References let user1 = {name: "Keith"}; // user1.name = "Keith" let user2 = user1; // Same object, different references // user1.name = "Keith" user2.name = "Fred" // user2.name = "Fred" // user1.name = "Fred" user1 == user2 // true user1 === user2 // true // Object Copying let user3 = {} for (let key in user1) { user2[key] = user[key]; } // user3.name = "Fred" user3 == user2 // true user3 === user2 // false let user = { name: "John" }; let permissions1 = { canView: true }; let permissions2 = { canEdit: true }; // copies all properties from permissions1 and permissions2 into user Object.assign(user, permissions1, permissions2); let user = { name: "John", age: 30 }; let clone = Object.assign({}, user); // Spread operator const user = { name: "Kingsley", age: 28, job: "Web Developer" } const clone = {...user} console.log(clone); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // use of 'this' let user = { name: "John", age: 30, sayHi() { // "this" is the "current object" alert(this.name); } }; user.sayHi(); |
1 2 3 4 5 6 7 8 9 10 11 12 13 | // new operator function developer (name, language) { this.name = name; this.language = language; this.isAdmin = false; } let dev1 = new developer("Fred", "C++") let dev2 = new developer("Fred", "Java") dev1 == dev2 // false dev1 === dev2 // false |
1 2 3 4 5 | /// Chaining obj?.prop // returns obj.prop if obj exists, otherwise undefined. obj?.[prop] // returns obj[prop] if obj exists, otherwise undefined. obj.method?.() // calls obj.method() if obj.method exists, otherwise returns undefined. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | // Primitive Types // Numbers let num2 = 1; let num2 = 1.34; let num3 = 1000000000; let num4 = 1_000_000_000; let billion = 1e9; let num5 = 1e-6; // = 0.000001 let a = 7.3e9; let b = 7300000000; let c = 7_300_000_000; a == b == c let num6 = 0xff; // Hex let num7 = 0b11111111; // Binary let num8 = 0o377; // Octal num6.toString(10) // To Decimal num6.toString(2) // To Bimary num6.toString(8) // To Octal num6.toString(16) // To Hex 1234..toString(16) // double dot notation Math.floor(10.1); // = 10, Rounds down Math.ceil(10.7); // = 11, Rounds Up Math.round(10.3); // = 19, Rounds to nearest integer num.toFixed(2); // To 2 decimal places isNaN(2) // false isNaN("keiff") // true isNaN(Infinity) // false isNaN(NaN) // true isFinite("15")). // true isFinite("str") ) // false, because a special value: NaN isFinite(Infinity) // false, because a special value: Infinity parseInt('100px') ); // 100 parseFloat('12.5em') ); // 12.5 parseInt('12.3') ); // 12, only the integer part is returned parseFloat('12.3.4') ); // 12.3, the second point stops the reading // Strings let single = 'single-quoted'; let double = "double-quoted"; let backticks = `backticks`; let bt2 = `1 + 2 = ${sum(1, 2)}.` // Allows us to embed other strings single.length == 13 single[0] == 's' single[single.length-1] = 'd' 'Keith'.toUpperCase() // KEITH 'Keith'.toLowerCase() // keith let str = "Written my Keith"; str.indexOf('Keith'); // == 11 str.indexOf('keith'); // -1 str.includes('Keith'); // true str.startsWith('Written'); // true str.endsWith('Keith'); // true str.slice(start, end); str.substring(start, end); str.substr(start, len); // Arrays let arr = new Array(); let arr = []; let fruits = ["Apple", "Orange", "Plum"]; fruits[2] = 'Pear'; // now ["Apple", "Orange", "Pear"] fruits[3] = 'Plum'; // now ["Apple", "Orange", "Pear", "Plum"] fruits.length == 4 fruits[fruits.length-1] == fruits.at(-1) fruits.pop() // now ["Orange", "Pear", ] fruits.push("Lemon") // now ["Orange", "Pear", "Lemon"] fruits.shift() // now ["Pear", "Plum", "Lemon"] fruits.unshift("Melon") // now ["Melon", "Pear", "Plum", "Lemon"] for (let i = 0; i < arr.fruits; i++) { ... } for (let fruit of fruits) { ... } // Iterables see Symbol.iterator // Maps ( inc WeakMap ) let map = new Map(); let map = new Map(Object.entries(obj)); map.set("name", "Keith); map.set("place", "Scotland); map.get("name") // "Keith" map.has("name") // true map.delete("name") map.size() // size = 1 map.clear() // size = 0 for (let key of map.keys() { "name", "place", etc } for (let val of map.values() { "Keith", "Scotland", etc } for (let entry of map.entries() { ["Keith", "Scotland"], etc } // Sets ( inc WeakSet ) let set = new Set(); set.set("Keith); set.set("Fred); set.size() // size = 2 set.set("Keith); set.size() // size = 2. No duplicates allowed set.has("Keith") // true map.delete("Keith") map.size() // size = 1 map.clear() // size = 0 // Date & Time // JSON |