StringStrings are immutable. Once it is made, a string can never be changed.
Strings containing exactly the sdame characters in the same order are considered to be the same string.
// true
"d" + "o" + "g" === "dog"
for...inIt is usually neccessary to test object.hasOwnProperty(variable) to determine whether the property name is truly a member of the object or was found instead on the prototype chain
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
...
}
}
throwThrow an error in the console
throw new Error("You have an error...");
Object LiteralsQuotes around a property’s name in an object literal are optional if the name would be a legal JavaScript name and not a reserved word.
var empty_obj = {};
var names = {
"first-name": "John",
"last-name": "Smith"
}
OR ||| The | operator can be used to fill in default values. |
var middle = stooge["middle-name"] || "(none)";
var status = flight.status || "unknown";
ReferenceObjects are passed around by reference. They are never copied.
var x = stooge;
x.nickname = "Curly";
// nick is 'Curly' because x and stooge are references to the same object
var nick = stooge.nickname;
// a, b, and c each refer to a different empty object
var a = {}, b = {}, c = {};
// a, b, and c all refer to the same empty object
a = b = c = {};
PrototypeEvery object is linked to a prototype object from which it can inherit properties. All objects created from object literals are linked to object.prototype.
Global Abatementsingle global variable for your application. This significantly reduce the chance of bad interactions with other application., widges, or libraries.
MyApp = {};
MyApp.names = {
"first-name": "John",
"last-name": "Smith"
};
argumentsIf a function is called with too many arguments (more than declared), these arguments can be reached using the arguments object.
function add() {
for (var i = 0; i < arguments.length; i++) {
// output: 1, 2, 3, 4
console.log(arguments[i]);
}
}
add(1, 2, 3, 4);
The method invocation patternWhen a function is stored as property in an object, it’s called method. When method is invoked, this is bound to that object.
var obj = {
value: 0,
increment: function(inc) {
this.value += typeof inc === "number" ? inc : 1;
}
}
// output: 1
obj.increment();
// output: 20
console.log(obj.increment(20));
The constructor invocation patternJavaScript is a prototypal inheritance language. That means that objects can inherit properties directly from other objects. The language is class-free.
// create a constructor function call Quo.
// it makes an object with a status property.
var Quo = function (string) {
this.status = string;
}
// give all instances of Quo a public method
// called get_status
Quo.prototype.get_status = function() {
return this.status;
}
// make an instance of Quo
var myQuo = new Quo("superman");
// output: superman
console.log(myQuo.get_status());
Use of this style of constructor functions is not recommended.
Argumentsthis is not a particularly useful pattern and because of a design error, arguments is not really an array. It’s an array-link object.
var sum = function() {
var total = 0;
for (var i = 0; i < arguments.length; i++) {
total += arguments[i]
}
return total;
}
// output: 15
console.log(sum(1, 2, 3, 4, 5));
ReturnThe return statement can be used to cause the function to return early. A function always returns a value. If the return value is not specified, the undefined is returned.