JavaScript is a high-level, interpreted programming language that is used to make web pages interactive. It is a client-side scripting language that is executed on the user's web browser. JavaScript is used to add interactivity, animations, and other dynamic features to web pages. It can also be used for creating standalone applications, games, and server-side programming.
Here's an example of a simple JavaScript program that displays an alert message:
When this code is executed, it will display a pop-up message on the user's browser window with the text "Hello, world!".
JavaScript and Java are two different programming languages with distinct features and purposes.
JavaScript is a scripting language primarily used for creating dynamic and interactive web pages. It is executed on the client-side, i.e., in the user's web browser, and is primarily used for web development.
On the other hand, Java is a general-purpose programming language that can be used for developing a wide range of applications, from mobile apps to enterprise software. It is a compiled language that runs on the server-side, and can also be used for client-side applications.
The two languages differ in their syntax, structure, and the way they are used. While they both share some programming concepts, they are distinct programming languages with different use cases.
ECMAScript is a scripting language specification that provides the basis for many programming languages, including JavaScript. It defines the core features and syntax of a scripting language, including variables, control structures, functions, and object-oriented programming features.
JavaScript is an implementation of ECMAScript and includes additional features and APIs for working with web browsers and other environments. For example, JavaScript includes the Document Object Model (DOM) API for manipulating web pages, and the XMLHttpRequest (XHR) API for making HTTP requests.
Other languages that are based on ECMAScript include ActionScript, JScript, and TypeScript.
In JavaScript, variables are used to store data values. A variable is declared using the var
, let
, or const
keyword, followed by a variable name, and optionally initialized with a value.
For example:
Variables declared using var
are function-scoped, while variables declared using let
and const
are block-scoped. Block-scoped variables can be used only within the block they are defined in, while function-scoped variables can be used anywhere within the function they are defined in.
Variables can be reassigned with a new value using the assignment operator (=), and their values can be accessed and manipulated using various operations and methods in JavaScript.
Hoisting in JavaScript is a behavior that allows variable and function declarations to be moved to the top of their respective scopes during the compilation phase, regardless of where they are actually defined in the code. This means that variables and functions can be accessed before they are declared. However, only the declaration is hoisted, not the assignment.
For example:
In this code snippet, the variable x
is declared after it is assigned a value. However, due to hoisting, the code will still work and print 5
to the console.
It's generally considered good practice to declare all variables at the beginning of their respective scopes to avoid confusion and unexpected behavior due to hoisting.
In JavaScript, scope refers to the visibility or accessibility of variables and functions in different parts of the code. There are two types of scope in JavaScript: global scope and local scope.
Global scope refers to variables and functions that are accessible throughout the entire code, while local scope refers to variables and functions that are only accessible within a specific block of code.
Here's an example to illustrate:
In this example, a
is declared in the global scope and is accessible from within the foo
function. However, b
is declared in the local scope of the foo
function and is not accessible from outside of that function.
It's important to understand scope in order to write clean and maintainable code, as well as to avoid variable naming conflicts and other issues that can arise from variable and function visibility.
Closure in JavaScript refers to the ability of a function to access variables in its outer lexical environment even after that function has returned. This is made possible by the fact that functions in JavaScript create a closure over their lexical environment.
Here is an example of a closure in JavaScript:
In the example above, outer()
returns a function inner()
. inner()
has access to the variable x
defined in outer()
, even after outer()
has returned. This is because inner()
has created a closure over its outer lexical environment, which includes the variable x
.
The variable closureExample
now holds a reference to the inner()
function and can be called to output the value of x
which is 10
.
JavaScript has 8 primitive data types and 1 complex data type. Here's a brief description of each with an example:
- String: Represents textual data, enclosed within single or double quotes.
Example:
"Hello World"
- Number: Represents numerical data, with or without decimal points.
Example:
123
or3.14
- Boolean: Represents true or false values.
Example:
true
- Null: Represents an intentional absence of any object value.
Example:
null
- Undefined: Represents an uninitialized, non-existent, or undefined value.
Example:
undefined
- Symbol: Represents a unique identifier, introduced in ES6.
Example:
let id = Symbol();
- BigInt: Represents integers larger than 2^53 - 1, introduced in ES10.
Example:
let bigNum = BigInt(1234567890123456789);
- Object: Represents a collection of related data and functionality.
Example:
let person = {name: "John", age: 30, city: "New York"};
Note that primitive data types are immutable, while objects are mutable.
In JavaScript, a primitive data type is a data type that represents a single value, and is not an object. There are six primitive data types in JavaScript, which include:
- String - represents textual data enclosed in quotes, such as
"Hello, world!"
- Number - represents numeric data, such as
42
or3.14
- Boolean - represents a logical entity, either
true
orfalse
- Undefined - represents a variable that has been declared but has not been assigned a value
- Null - represents a deliberate non-value or absence of any object value
- Symbol - represents a unique value and is used as an identifier for object properties
Here's an example of using primitive data types in JavaScript:
A non-primitive data type in JavaScript is an object, which is a collection of key-value pairs. Objects are mutable, meaning their values can be changed after creation.
Examples of non-primitive data types in JavaScript include arrays, functions, and objects. Here is an example of an object in JavaScript:
In this example, person
is an object with three properties: name
, age
, and address
. The address
property is itself an object with three properties: street
, city
, and state
. The values of these properties can be accessed using dot notation or bracket notation.
NaN stands for "Not a Number"
in JavaScript, and it is a value returned when a mathematical operation or function cannot produce a meaningful result.
For example, dividing a string by a number or multiplying an object by a boolean value will result in NaN.
Here is an example:
It's important to note that NaN is not equal to any other value, including itself, so you cannot use the ==
or ===
operators to check for NaN. Instead, you can use the isNaN()
function to determine whether a value is NaN:
In JavaScript, ==
is the loose equality operator, while ===
is the strict equality operator.
The ==
operator compares two values for equality, performing type coercion if necessary. For example, 1 == '1'
is true
, because the 1
is coerced to a string and then compared to the string '1'
.
The ===
operator, on the other hand, compares two values for equality without performing type coercion. For example, 1 === '1'
is false, because the two values are of different types.
Here's a simple example to illustrate the difference:
In JavaScript, functions are a block of code that performs a specific task. They allow you to break down complex problems into smaller, reusable code blocks, making your code more organized and easier to maintain. Functions can take input parameters and return values, or they can simply execute code without returning anything.
Here's a simple example of a function in JavaScript that takes two parameters and returns their sum:
In this example, addNumbers
is the function that takes two parameters, num1
and num2
, and returns their sum using the return
statement. We then call the function and pass in the values 5
and 10
. Finally, we log the result of the function call to the console.
In JavaScript, a function can be declared in two ways: function declaration and function expression.
Function Declaration:
A function declaration is a statement that declares a named function. It is defined using the "function"
keyword followed by the function name, parameter list, and function body. The function can be called before or after the declaration.
Example:
Function Expression:
A function expression is a function that is assigned to a variable or property. It can be defined using the "function"
keyword or by using an arrow function. The function can only be called after the declaration.
Example:
The main difference between the two is that a function declaration is hoisted to the top of its scope, so it can be called before it's defined, while a function expression is not hoisted and can only be called after it's defined.
In JavaScript, var
and let
are both used to declare variables, but there are some differences between the two.
The main difference is in their scoping behavior. Variables declared with var have function-level scope or global scope, while variables declared with let have block-level scope.
Here is an example:
In this example, myFunction
declares a variable x
using var
, which has function-level scope. So when the if
statement inside the function changes the value of x
to 20, that change is reflected outside the if
statement as well.
On the other hand, myOtherFunction
declares a variable y
using let
, which has block-level scope. So when the if
statement inside the function changes the value of y
to 20, that change is not reflected outside the if
statement.
Overall, let
is a more modern and flexible way of declaring variables in JavaScript, while var
is an older and less flexible way. It is generally recommended to use let
instead of var
in modern JavaScript code.
The difference between const
and let
in JavaScript is that const
is used to declare a variable that can't be reassigned after its initial value, whereas let
is used to declare a variable that can be reassigned.
Here is an example of using const
and let
:
In general, it is a best practice to use const
when the value of the variable will not change, and to use let
when the value may change over time.
The ternary operator in JavaScript is a shorthand way of writing an if-else
statement.
It has the following syntax:
condition ? value1 : value2
If the condition evaluates to true
, the expression returns value1
, otherwise it returns value2
.
Here's an example of how to use the ternary operator to assign a value to a variable based on a condition:
In this example, the ternary operator is used to check if age
is greater than or equal to 18. If it is, the value of message
is set to "You are an adult"
. If it's not, the value of message
is set to "You are a minor"
.
An arrow function is a more concise way of writing a function in JavaScript. It was introduced in ES6 and is commonly used to write anonymous functions.
Here is an example of a arrow function and its traditional function equivalent:
In the arrow function example, the parameters are wrapped in parentheses, followed by the arrow symbol (=>
), and then the function body. The function body is implicitly returned, so there is no need to use the return
keyword. The const
keyword is used to assign the function to a variable, just like in the traditional function example.
In JavaScript, an object is a non-primitive data type that can hold properties and methods. Objects are a collection of key-value pairs where the key is a string or symbol and the value can be any data type, including another object.
Here is an example of an object in JavaScript:
In the example above, we have an object called person
that has several properties including a name, age, address (which is another object), hobbies (which is an array), and a method called sayHello
. We can access the properties and methods of an object using dot notation:
In JavaScript, the prototype is an object that serves as a template for other objects to inherit properties and methods from. It is a fundamental concept in JavaScript's object-oriented programming paradigm.
Every object in JavaScript has a prototype, which can be accessed using the __proto__
property. The prototype itself is an object that can have properties and methods.
Here's an example that illustrates how the prototype works in JavaScript:
In the example above, we define a Person
constructor function and add a fullName()
method to its prototype. When we create a new Person
object using the new keyword, the object inherits the fullName()
method from its prototype. This allows us to call the fullName()
method on the person
object, even though it wasn't defined directly on the object itself.
In JavaScript, an object is an unordered collection of related data in the form of key-value pairs, whereas an array is an ordered collection of values, each identified by an index.
Here is an example of an object and array:
The main difference between them is that objects use keys to access their values, while arrays use indexes. Additionally, objects are more suited for storing data that has associated properties or attributes, while arrays are better for storing a list of values that need to be accessed sequentially.
For example, if we wanted to access the value of the age
property in the person
object, we would do it like this:
console.log(person.age); // Output: 30
On the other hand, if we wanted to access the second item in the fruits array, we would do it like this:
console.log(fruits[1]); // Output: 'banana'
In JavaScript, a callback function is a function that is passed as an argument to another function and is executed when that function finishes its task. The primary purpose of using a callback function is to ensure that a certain code is executed only after a certain task is completed.
Here is an example of a callback function:
In this example, doHomework()
is a function that takes two arguments, the subject name and a callback function. It logs a message indicating that the homework has started, and then calls the callback function. The finishedHomework()
function is the callback function that logs a message indicating that the homework is finished.
When doHomework()
is called with the subject 'Math'
and the finishedHomework()
function as its arguments, it logs 'Starting my Math homework.'
and then calls finishedHomework()
, which logs 'Finished my homework.'
.
In JavaScript, a Promise is an object that represents the eventual completion or failure of an asynchronous operation, and its resulting value. Promises provide a way to handle asynchronous operations in a more organized and maintainable way.
A Promise can be in one of three states:
- Pending: The initial state, neither fulfilled nor rejected.
- Fulfilled: The state when the asynchronous operation completed successfully and returned a result.
- Rejected: The state when the asynchronous operation failed and returned an error.
Promises have two main methods: then()
and catch()
. The then()
method is called when a Promise is fulfilled, and takes a callback function as an argument. The catch()
method is called when a Promise is rejected, and takes a callback function as an argument.
Here is an example of using a Promise in JavaScript:
In this example, fetchData()
returns a new Promise
that resolves after a 2 second delay with a mock data object. The then()
method is called with a callback function that logs the data to the console. The catch()
method is called with a callback function that logs any errors to the console.
Async/await is a way to write asynchronous code in a more synchronous-like way in JavaScript. It is built on top of Promises and provides a cleaner syntax for handling asynchronous operations.
Here's an example:
In this example, the fetchData
function is marked as async
, which means it returns a Promise
. Inside the function, we use the await
keyword to pause the function and wait for the Promise to resolve. We first await the response of the fetch
call, which returns a Promise that resolves to a response object. We then call the json()
method on the response object, which also returns a Promise that resolves to the actual data we want. Finally, we log the data to the console.
If any of the Promises reject, the try...catch
block will catch the error and log it to the console.
A closure is a feature in JavaScript that allows a function to access variables from its outer (enclosing) function, even after the outer function has returned. The inner function maintains a reference to the variables in its lexical scope. This enables creating private variables and methods in JavaScript.
Here's an example:
In this example, outer()
defines a variable x
and a nested function inner()
, which simply logs the value of x
to the console. outer()
then returns the inner()
function.
We then call outer()
and assign the result to the closure variable. When we call closure()
, it logs the value of x
to the console, even though x
is no longer in the scope of the closure()
function. This is possible because of the closure, which keeps a reference to x
in the lexical scope of inner()
even though outer()
has returned.
The event loop is a mechanism in JavaScript that manages the execution of code by placing tasks in a queue and executing them in a continuous loop. The event loop allows JavaScript to handle asynchronous tasks efficiently without blocking the execution of other code.
Here is a simple example of how the event loop works:
In this example, console.log('Start')
is executed first, followed by console.log('End')
. The two setTimeout
functions are then added to the event loop, with the second one set to execute before the first. Even though the second setTimeout
has a shorter delay, it is executed after the first one because it was added to the event loop later.
When the delay for the first setTimeout
expires, it is removed from the event loop and executed. The same happens for the second setTimeout
when its delay expires.
The event loop allows JavaScript to manage multiple tasks efficiently and ensures that the code runs smoothly without blocking the execution of other code.
In JavaScript, synchronous code is executed in sequence, one statement at a time, and each statement must finish executing before the next one starts. Asynchronous code, on the other hand, is executed out of sequence, and the next statement can begin executing before the previous one finishes.
Here's an example of synchronous code:
In this example, each console.log()
statement will execute in order, one after the other, and the output will be:
start
middle
end
In contrast, here's an example of asynchronous code:
In this example, the setTimeout()
function is executed asynchronously, so the console.log("end")
statement will execute immediately after the console.log("start")
statement, without waiting for the setTimeout()
function to finish. After 1 second, the setTimeout()
function will complete, and the callback function passed to it will execute, logging "middle"
to the console. The output of this code will be:
start
end
middle
This illustrates how asynchronous code can allow multiple tasks to be executed in parallel, rather than being forced to wait for each other to complete in sequence.
There are three types of loops in JavaScript:
for
loop: It is used to iterate a block of code a fixed number of times.
Example:
while
loop: It is used to iterate a block of code as long as the condition is true.
Example:do...while
loop: It is similar to thewhile
loop, but the block of code is executed at least once before the condition is checked.
Example:
Both for and forEach are used for looping in JavaScript, but there are some differences between them.
for
loop:
for
loop is a general-purpose loop used to iterate over arrays or other iterable objects, and it allows more control over the iteration process.for
loop can be used with break and continue statements to control the loop execution.- The
for
loop uses an index variable to keep track of the iteration, which can be incremented or decremented at each step.
Here is an example of for
loop that iterates over an array and prints each element:
forEach
loop:
forEach
is a method that is only available on arrays, and it is used to execute a provided function once for each array element.forEach
loop is simpler and more readable than for loop, especially for simple iteration tasks.forEach
loop does not allow breaking or continuing the loop execution, which makes it less flexible than for loop.
Here is an example of forEach
loop that iterates over an array and prints each element:
In summary, for
loop is more flexible and allows more control over the iteration process, while forEach
loop is simpler and more readable, especially for simple iteration tasks.
In JavaScript, both for
and while
loops are used for iterating over a block of code repeatedly. The main difference between the two is that for
loops are used when we know the number of iterations beforehand, while while
loops are used when we do not know the number of iterations beforehand.
Here's an example of a for
loop that iterates 5 times:
In this example, the loop will iterate 5 times because the condition i < 5
will eventually become false
.
Here's an example of a while
loop that iterates until a condition is met:
In this example, the loop will iterate until i
is no longer less than 5. The number of iterations is not predetermined, so a while
loop is more appropriate than a for
loop.
The spread operator is a feature in JavaScript that allows an iterable, like an array or a string, to be expanded into single elements or multiple elements. It is represented by three dots ( ...
) followed by the iterable object. The spread operator is used to make a copy of an array, concatenate arrays, pass arguments to a function, or create a new object with the same properties as an existing object.
Here is an example of how to use the spread operator to concatenate two arrays:
In this example, the spread operator is used to concatenate arr1
and arr2
into a new array called arr3
.
Here is another example of how to use the spread operator to pass arguments to a function:
In this example, the spread operator is used to pass the values of numbers
as arguments to the sum
function, which returns the sum of the numbers.
The rest parameter is a feature in JavaScript that allows a function to accept an indefinite number of arguments as an array. It is denoted by three dots (...
) followed by the name of the parameter. The rest parameter must be the last parameter in the function's parameter list.
Here is an example of a function that uses the rest parameter:
In the example above, the sum
function accepts an indefinite number of arguments as an array using the rest parameter ...numbers
. The function then uses the reduce
method to sum up all the numbers passed in and returns the total sum.
Destructuring assignment is a feature in JavaScript that allows you to unpack values from arrays, or properties from objects, into distinct variables. This can make it easier to work with complex data structures and write more concise code.
Here is an example of destructuring an array:
In this example, we declare a constant myArray
that contains three values. We then use destructuring assignment to unpack the values into separate variables: first
, second
, and third
.
Here is an example of destructuring an object:
In this example, we declare a constant myObject
that contains two properties. We then use destructuring assignment to unpack the properties into separate variables: name
and age
.
In JavaScript, null
and undefined
are both used to represent the absence of a value, but they are different in terms of their data type and intended use.
undefined
is a primitive data type in JavaScript that is automatically assigned to a variable that has been declared but has not been assigned a value. For example:
On the other hand, null
is an object data type that represents a deliberate non-value, and is typically assigned explicitly by the programmer. For example:
In other words, undefined
means that a variable has been declared but not assigned a value, while null
means that a variable has been deliberately assigned no value.
It's worth noting that both null
and undefined
are false values in JavaScript, which means that they are considered equivalent to false
in a boolean context. However, they are not equal to each other, as shown below:
Here, the ==
operator compares null
and undefined
for equality by type coercion, and returns true
because they are both false values. However, the ===
operator compares them by both value and type, and returns false
because they are not of the same data type.
In JavaScript, var
and let
are used for declaring variables. The main difference between them is their scope.
var
has function scope, meaning it is accessible within the function it is defined in or globally if it is defined outside of a function. It is also hoisted, meaning it can be accessed before it is declared.
Example:
let
, on the other hand, has block scope, meaning it is only accessible within the block it is defined in (a block is denoted by curly braces {}
). It is not hoisted and cannot be accessed before it is declared.
Example:
In general, it is recommended to use let
over var
due to its more strict scoping rules.
In JavaScript, let
and const
are both used to declare variables but they differ in their mutability.
let
is used to declare a variable whose value can be changed or reassigned.
Example:
const
, on the other hand, is used to declare a variable whose value cannot be changed once it is assigned. It creates a read-only reference to a value.
Example:
Therefore, let
should be used when the value of the variable needs to be reassigned or changed, whereas const
should be used when the value of the variable needs to remain constant or unchanged.
map()
and filter()
are two common higher-order functions in JavaScript used for manipulating arrays.
map()
is used to transform each element in an array and returns a new array with the same length as the original array. It takes a callback function as an argument, which is applied to each element of the array, and the result of the function is used to create the new array.
Example:
filter()
is used to filter out elements from an array based on a condition and returns a new array with the filtered elements. It also takes a callback function as an argument, which is applied to each element of the array. The elements that satisfy the condition specified in the callback function are added to the new array.
Example:
In summary, map()
is used to transform an array, while filter()
is used to filter an array.
In JavaScript, there are two types of data types: primitive and reference.
Primitive data types include numbers, strings, booleans, null, and undefined. These data types are passed by value, which means that when you assign a primitive value to a variable or pass it as a parameter to a function, a copy of that value is created.
For example:
Reference data types include objects, arrays, and functions. These data types are passed by reference, which means that when you assign a reference value to a variable or pass it as a parameter to a function, a reference to the original value is created.
For example:
Here, arr1
and arr2
both refer to the same array in memory, so when we modify arr1
, the changes are also reflected in arr2
.
In JavaScript, a constructor function is a function that is used to create and initialize objects of a specific type. It typically has a capitalized name and is defined using the function
keyword.
Here is an example of a constructor function for creating person objects:
In this example, the Person
function is used to create person1
and person2
objects. The new
keyword is used to create a new instance of the Person
object. The name
and age
arguments are used to set the name
and age
properties of the new object using the this
keyword inside the constructor function.
Constructor functions are commonly used in object-oriented programming to create multiple objects of the same type with shared properties and methods.
In JavaScript, a constructor function is a type of function used to create an object with its own properties and methods. It is used to create multiple instances of an object with similar properties and behaviors.
Example of a constructor function:
On the other hand, a class is a newer feature in JavaScript that provides a more organized and intuitive syntax for creating objects with shared properties and methods. Classes are essentially a template for creating objects.
Example of a class:
While constructor functions and classes share some similarities in terms of their purpose and functionality, classes provide a more concise and cleaner syntax for creating objects with shared properties and methods. Classes also have built-in support for inheritance, making them more powerful and flexible than constructor functions.
In JavaScript, the this
keyword refers to the object that is currently executing the code. Its value depends on how a function is called or invoked.
For example, in a method of an object, this
refers to the object itself:
However, in a regular function, this
refers to the global object (e.g. window
in a browser, global
in Node.js):
In the first example, sayHello
is called as a method of the person object, so this refers to the person object.
In JavaScript, both the call()
and apply()
methods are used to call a function with a given this
value and arguments. The main difference between the two methods is how the arguments are passed to the function.
The call()
method accepts arguments as a comma-separated list, whereas the apply()
method accepts arguments as an array. Here's an example to illustrate the difference:
In the example above, the person
object has a greet
method that logs a greeting with the name
property of the object. The call()
and apply()
methods are then used to call the greet
method with a different this
value (otherPerson)
and arguments.
With call()
, the arguments are passed as separate arguments after the this
value. With apply()
, the arguments are passed as an array after the this
value. Both methods achieve the same result of logging a personalized greeting for otherPerson
.
In JavaScript, both slice()
and splice()
are array methods that can manipulate arrays in different ways:
slice()
method returns a new array containing a portion of the original array. It does not modify the original array, but creates a shallow copy of the portion of the original array.
Example:
splice()
method, on the other hand, modifies the original array by adding or removing elements from it.
Example:
The first argument of splice()
specifies the index at which to start changing the array, the second argument specifies the number of elements to remove, and any additional arguments are the elements to be added to the array starting at the index specified by the first argument.
In JavaScript, copying an object or an array can be done in two ways: shallow copy and deep copy.
A shallow copy only creates a new reference to the original object or array, so any changes made to the copied object will affect the original object as well. In other words, the properties of the original object are not duplicated, but rather, they are shared between the original and copied objects.
On the other hand, a deep copy creates an entirely new object or array with all of its properties and sub-properties duplicated, so any changes made to the copied object will not affect the original object.
Here's an example of a shallow copy and a deep copy:
In the example above, we first create an array originalArray
that contains three elements, the third of which is a nested array. We then create a shallow copy of this array using the slice()
method, and a deep copy using the JSON.parse(JSON.stringify()) method
.
We then modify the first element of the nested array in both the shallow and deep copies. As a result, the original array is modified in the case of the shallow copy, but not in the case of the deep copy. This is because the shallow copy only creates a new reference to the original nested array, while the deep copy creates a new nested array with the same values as the original.
In JavaScript, the difference between pass by value and pass by reference lies in how the function arguments are passed and the data types being passed.
In pass by value, a copy of the value is passed to the function argument. This means that any changes made to the function argument will not affect the original value outside of the function. Examples of primitive data types passed by value include strings, numbers, and booleans.
Example:
In pass by reference, a reference to the object is passed to the function argument. This means that any changes made to the function argument will affect the original object outside of the function. Examples of non-primitive data types passed by reference include arrays and objects.
Example:
A generator function in JavaScript is a special type of function that can be paused and resumed during its execution, allowing you to generate a sequence of values on the fly. It uses the yield
keyword to pause the function and return a value to the caller, and can be resumed later by calling the function again.
Here's an example of a generator function that generates a sequence of Fibonacci numbers:
In this example, the fibonacci
function is a generator function that uses a while
loop to generate an infinite sequence of Fibonacci numbers. Each time the function is called with the next()
method, it yields the current value of a
and updates the values of a
and b
to generate the next number in the sequence. The fib
variable is an instance of the generator that is created by calling the fibonacci
function. Each time fib.next()
is called, the generator is resumed and the next value in the sequence is returned.
In JavaScript, a module is a reusable block of code that can be exported from one program and imported into another program. Modules provide a way to organize code, keep it private, and prevent naming collisions.
Modules are used in Node.js and in modern front-end frameworks such as React and Vue.js to build scalable and maintainable applications.
Here's an example of how to export and import a module in JavaScript:
In this example, the greet
function is defined in the module.js
file and then exported using the export
keyword. In the main.js
file, the greet
function is imported using the import
statement and then called with the argument 'John'
. The output of the program is Hello, John!
.
import
and require
are two ways to include code from other JavaScript files (modules) into your current file.
require
is a function that is used in CommonJS modules, which is the standard module format used in Node.js. It returns an object representing the module, which you can then use to access any exported values. Here is an example:
import
is a keyword used in ES6 modules, which is the standard module format used in modern browsers. It is a declarative syntax that allows you to selectively import specific values from a module. Here is an example:
In summary, require
is used in CommonJS modules and returns an object representing the module, while import
is used in ES6 modules and provides a declarative syntax for selectively importing specific values from a module.
In JavaScript, localStorage
and sessionStorage
are two web storage APIs that allow you to store key/value pairs in the browser. The main difference between them is their lifespan and scope.
localStorage
stores data with no expiration date, and the data persists even after the browser window is closed or the computer is restarted. The data is available to all windows with the same origin (same protocol, host, and port).
On the other hand, sessionStorage
stores data only for a single session (i.e., while the browser window/tab is open). Once the window/tab is closed, the data is lost. The data is available only to the window/tab that created it.
Here's an example of both:
A cookie is a small piece of data that is sent from a website and stored on a user's computer by the user's web browser while the user is browsing the website. Cookies can be used to store information about the user's preferences, login status, and other data that can be useful for the website.
Cookies can be created and manipulated using JavaScript's document.cookie
property. Here is an example of creating a cookie that expires in one hour:
This code sets a cookie named "username" with the value "John Doe" and an expiration time of one hour from the current time. The toUTCString()
method is used to convert the expiration time to a string in UTC format, which is required by the expires
attribute of the cookie.