mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-08-11 09:14:39 +02:00
[javascript/en] Clarify objects, remove premature reference to prototypes
- Prototypes are referenced in Section 3 before being discussed (in Section 5) - Also, prototypes are referenced while talking about for-loops, which IMHO distracts from the discussion of the loop structure itself - Added example that shows prototype-chain-walking via for-in in Section 5
This commit is contained in:
@@ -138,7 +138,7 @@ undefined; // used to indicate a value is not currently present (although
|
|||||||
// Note that 0 is falsy and "0" is truthy, even though 0 == "0".
|
// Note that 0 is falsy and "0" is truthy, even though 0 == "0".
|
||||||
|
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
// 2. Variables, Arrays and Objects
|
// 2. Variables, Arrays and basics of Objects
|
||||||
|
|
||||||
// Variables are declared with the `var` keyword. JavaScript is dynamically
|
// Variables are declared with the `var` keyword. JavaScript is dynamically
|
||||||
// typed, so you don't need to specify type. Assignment uses a single `=`
|
// typed, so you don't need to specify type. Assignment uses a single `=`
|
||||||
@@ -200,6 +200,11 @@ myObj.myThirdKey = true;
|
|||||||
// If you try to access a value that's not yet set, you'll get undefined.
|
// If you try to access a value that's not yet set, you'll get undefined.
|
||||||
myObj.myFourthKey; // = undefined
|
myObj.myFourthKey; // = undefined
|
||||||
|
|
||||||
|
// JavaScript objects are not instantiated from blueprints ("classes" in other
|
||||||
|
// object-oriented languages), but may refer to another special object called a
|
||||||
|
// "prototype". See later section for more info.
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
// 3. Logic and Control Structures
|
// 3. Logic and Control Structures
|
||||||
|
|
||||||
@@ -225,7 +230,7 @@ do {
|
|||||||
} while (!isValid(input))
|
} while (!isValid(input))
|
||||||
|
|
||||||
// The `for` loop is the same as C and Java:
|
// The `for` loop is the same as C and Java:
|
||||||
// initialisation; continue condition; iteration.
|
// initialization; continue condition; iteration.
|
||||||
for (var i = 0; i < 5; i++){
|
for (var i = 0; i < 5; i++){
|
||||||
// will run 5 times
|
// will run 5 times
|
||||||
}
|
}
|
||||||
@@ -241,22 +246,25 @@ for (var i = 0; i < 10; i++) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The for/in statement iterates over every property across the entire prototype chain.
|
// The for/in statement allows iteration over properties of an object.
|
||||||
var description = "";
|
var description = "";
|
||||||
var person = {fname:"Paul", lname:"Ken", age:18};
|
var person = {fname:"Paul", lname:"Ken", age:18};
|
||||||
for (var x in person){
|
for (var x in person){
|
||||||
description += person[x] + " ";
|
description += person[x] + " ";
|
||||||
}
|
} // description = 'Paul Ken 18 '
|
||||||
|
|
||||||
// To only consider properties attached to the object itself
|
// It also works for array objects but iterates over the indices
|
||||||
// and not its prototypes, use the `hasOwnProperty()` check.
|
var myArray = [1, 2, 3, "apple", "banana", function(){}]
|
||||||
var description = "";
|
for (var index in myArray) {
|
||||||
var person = {fname:"Paul", lname:"Ken", age:18};
|
console.log(index + ": " + myArray[index]);
|
||||||
for (var x in person){
|
|
||||||
if (person.hasOwnProperty(x)){
|
|
||||||
description += person[x] + " ";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
///prints:
|
||||||
|
// 0: 1
|
||||||
|
// 1: 2
|
||||||
|
// 2: 3
|
||||||
|
// 3: apple
|
||||||
|
// 4: banana
|
||||||
|
// 5: function () {}
|
||||||
|
|
||||||
// For/in should not be used to iterate over an Array where the index order
|
// For/in should not be used to iterate over an Array where the index order
|
||||||
// is important, as there is no guarantee that for/in will return the indexes
|
// is important, as there is no guarantee that for/in will return the indexes
|
||||||
@@ -273,7 +281,6 @@ if (colour == "red" || colour == "blue"){
|
|||||||
// && and || "short circuit", which is useful for setting default values.
|
// && and || "short circuit", which is useful for setting default values.
|
||||||
var name = otherName || "default";
|
var name = otherName || "default";
|
||||||
|
|
||||||
|
|
||||||
// The `switch` statement checks for equality with `===`.
|
// The `switch` statement checks for equality with `===`.
|
||||||
// Use 'break' after each case
|
// Use 'break' after each case
|
||||||
// or the cases after the correct one will be executed too.
|
// or the cases after the correct one will be executed too.
|
||||||
@@ -485,6 +492,26 @@ myObj.myBoolean; // = true
|
|||||||
myPrototype.meaningOfLife = 43;
|
myPrototype.meaningOfLife = 43;
|
||||||
myObj.meaningOfLife; // = 43
|
myObj.meaningOfLife; // = 43
|
||||||
|
|
||||||
|
// The for/in statement allows iteration over properties of an object,
|
||||||
|
// walking up the prototype chain until it sees a null prototype.
|
||||||
|
for (var x in myObj){
|
||||||
|
console.log(myObj[x]);
|
||||||
|
}
|
||||||
|
///prints:
|
||||||
|
// Hello world!
|
||||||
|
// 42
|
||||||
|
// [Function: myFunc]
|
||||||
|
|
||||||
|
// To only consider properties attached to the object itself
|
||||||
|
// and not its prototypes, use the `hasOwnProperty()` check.
|
||||||
|
for (var x in myObj){
|
||||||
|
if (myObj.hasOwnProperty(x)){
|
||||||
|
console.log(myObj[x]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
///prints:
|
||||||
|
// Hello world!
|
||||||
|
|
||||||
// We mentioned that `__proto__` was non-standard, and there's no standard way to
|
// We mentioned that `__proto__` was non-standard, and there's no standard way to
|
||||||
// change the prototype of an existing object. However, there are two ways to
|
// change the prototype of an existing object. However, there are two ways to
|
||||||
// create a new object with a given prototype.
|
// create a new object with a given prototype.
|
||||||
@@ -570,12 +597,15 @@ of the language.
|
|||||||
|
|
||||||
[JavaScript: The Definitive Guide][6] is a classic guide and reference book.
|
[JavaScript: The Definitive Guide][6] is a classic guide and reference book.
|
||||||
|
|
||||||
[Eloquent Javascript][8] by Marijn Haverbeke is an excellent JS book/ebook with attached terminal
|
[Eloquent Javascript][8] by Marijn Haverbeke is an excellent JS book/ebook with
|
||||||
|
attached terminal
|
||||||
|
|
||||||
[Eloquent Javascript - The Annotated Version][9] by Gordon Zhu is also a great derivative of Eloquent Javascript with extra explanations and clarifications for some of the more complicated examples.
|
[Eloquent Javascript - The Annotated Version][9] by Gordon Zhu is also a great
|
||||||
|
derivative of Eloquent Javascript with extra explanations and clarifications for
|
||||||
[Javascript: The Right Way][10] is a guide intended to introduce new developers to JavaScript and help experienced developers learn more about its best practices.
|
some of the more complicated examples.
|
||||||
|
|
||||||
|
[Javascript: The Right Way][10] is a guide intended to introduce new developers
|
||||||
|
to JavaScript and help experienced developers learn more about its best practices.
|
||||||
|
|
||||||
In addition to direct contributors to this article, some content is adapted from
|
In addition to direct contributors to this article, some content is adapted from
|
||||||
Louie Dinh's Python tutorial on this site, and the [JS Tutorial][7] on the
|
Louie Dinh's Python tutorial on this site, and the [JS Tutorial][7] on the
|
||||||
|
Reference in New Issue
Block a user