From 16454c8c6fcdb78b2cb58c1e9909f53cb3eb9880 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Sat, 19 Sep 2015 23:28:31 +0530 Subject: [PATCH 001/141] Added my Resume Added my Resume --- Nishant_resume.js | 117 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 Nishant_resume.js diff --git a/Nishant_resume.js b/Nishant_resume.js new file mode 100644 index 0000000..42993b8 --- /dev/null +++ b/Nishant_resume.js @@ -0,0 +1,117 @@ +/** + * The Curriculum vitae of Nishant Kumar + * + * Hi there, I am Nishant. I am UI Engineering Lead, JavaScript Engineer, + * Mozila Tech Contributor, CodeMentor Front-end Expert, Writer from India. + */ + +(function() { + 'use strict'; + + /* + About Me + */ + var me = { + name: 'Nishant Kumar', + job: 'UI Engineering Lead', + organization: 'Big Parser', + status: 'Not availble for Hire full time', + location: 'India', + experience: '4 years 2 month', + skills: { + 'scripting-language' :['javascript'] + 'frameworks': ['angular.js','backbone.js','sails.js'], + 'library' : ['jQuery'] + 'tools': ['Gulp', 'Grunt', 'bower','yoman','Git'], + 'testing': ['jasmine', 'protractor'], + 'backend': ['node.js', 'express.js'], + 'dataBase': ['mongoDb', 'SQL'], + 'uncategorized' : ['C','C#','HTML','CSS', 'HTML5','JSON'] + } + }; + + /* + Contact Details + */ + var me_contact = { + 'email' : 'nihantanu@gmail.com', + 'skypeId' : 'mfsi_nishantk', + 'linkedIn' :'http://in.linkedin.com/in/nishantkumar1' + 'gitHub' : 'github.com/nishant8BITS' + 'stackOverFlow' : 'http://stackoverflow.com/users/430803/nishant' + 'codementor': 'codementor.io/nihantanu' + } + + /* + Education + */ + var education = { + 'post-Graduate': { + 'college': 'Birla Institute of Technology and Science, Pilani', + 'Major' : 'Software System', + 'Year' :'2016' + }, + 'graduation' : { + 'college': 'ICFAI University, Dehradun', + 'Major' : 'Computer Science & Engineering', + 'Year' :'2011' + } + } + + /** + * Nice things people have said about me. + */ + + /** + * Nishant is a very smart and thoughtful person as an engineer. He truly cares + * about helping others and values the learning experience for young software + * engineers. He is very patient - a key trait as an engineer. Nishant will help + * guide you through problems and help you understand software engineering + * concepts. Hands down I would hire Nishant to be on a team that will not only + * help a business but help other engineers grow as well. + * -Gary Tsai, Software Engineer + */ + + /** + * Nishant is a quick learner and he has very deep understanding on UI stack. He + * also is a good mentor and help other to understand the technology stack. One + * good thing I observed while working with him is he always focus on insist on + * highest standard in his code/solution as well as idea. Keep it up. + * -Apurv Gupta (WDE II at Amazon) + */ + + /** + * Nishant is one of the best person I'm working with. Along with his strong + * technical understanding of how things work, he also keeps on motivating to team + * and helps them to participate effectively & maintaining their productivity to + * better work towards achieving a goal. He always prefers to have full stack + * knowledge of the product & leads a team with great enthusiasm. He can deliver + * end to end any product he is working on. + * -Yash Shah (SRE at Linkedin) + */ + + /** + * I have been working with Nishant since last one year on a cloud-based product, + * He is one of the vibrant contributor in the team and always been dedicated to + * his work. He has very good level of knowledge when it comes to overall front-end + * architecture solutions and specifically on frameworks like backbone & angular. + * -Mohiuddin Parekh ( Founder & CEO at Decojent) + */ + + /** + * I first met Nishant 3 months ago when I told him I was looking for help with + * AngularJS and asked him to mentor me. One of the first things I noticed was that + * he had a great learning attitude, because he told me that he was looking forward + * to learning from me, something I wasn’t expecting from a mentor! He is fun, + * sweet, generous and has a great sense of humor. We have quickly become friends + * and I think we have spent more time hanging out on Telegram (instant messaging) + * and Skype than we have coding. I had never written my own AngularJS directive + * before so I asked him if he could write one for me for an autocomplete feature. + * I was impressed with his work and because of it I was then able to write my own + * directives. We have spent a lot of time chatting and I think there is so much + * more he can do that I have not yet seen. I can see he also has a passion for + * startups. + * -Jenny Swift (Software Engineer) + */ + +})(); From d7bca626e507a50199fb529e5f146f2b8418aafa Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Sat, 19 Sep 2015 23:30:14 +0530 Subject: [PATCH 002/141] Update Nishant_resume.js --- Nishant_resume.js | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Nishant_resume.js b/Nishant_resume.js index 42993b8..f2ea75c 100644 --- a/Nishant_resume.js +++ b/Nishant_resume.js @@ -64,46 +64,46 @@ /** * Nishant is a very smart and thoughtful person as an engineer. He truly cares - * about helping others and values the learning experience for young software - * engineers. He is very patient - a key trait as an engineer. Nishant will help - * guide you through problems and help you understand software engineering - * concepts. Hands down I would hire Nishant to be on a team that will not only - * help a business but help other engineers grow as well. - * -Gary Tsai, Software Engineer + * about helping others and values the learning experience for young software + * engineers. He is very patient - a key trait as an engineer. Nishant will help + * guide you through problems and help you understand software engineering + * concepts. Hands down I would hire Nishant to be on a team that will not only + * help a business but help other engineers grow as well. + * -Gary Tsai, Software Engineer */ /** * Nishant is a quick learner and he has very deep understanding on UI stack. He - * also is a good mentor and help other to understand the technology stack. One - * good thing I observed while working with him is he always focus on insist on - * highest standard in his code/solution as well as idea. Keep it up. + * also is a good mentor and help other to understand the technology stack. One + * good thing I observed while working with him is he always focus on insist on + * highest standard in his code/solution as well as idea. Keep it up. * -Apurv Gupta (WDE II at Amazon) */ /** * Nishant is one of the best person I'm working with. Along with his strong - * technical understanding of how things work, he also keeps on motivating to team + * technical understanding of how things work, he also keeps on motivating to team * and helps them to participate effectively & maintaining their productivity to - * better work towards achieving a goal. He always prefers to have full stack - * knowledge of the product & leads a team with great enthusiasm. He can deliver - * end to end any product he is working on. - * -Yash Shah (SRE at Linkedin) + * better work towards achieving a goal. He always prefers to have full stack + * knowledge of the product & leads a team with great enthusiasm. He can deliver + * end to end any product he is working on. + * -Yash Shah (SRE at Linkedin) */ /** * I have been working with Nishant since last one year on a cloud-based product, - * He is one of the vibrant contributor in the team and always been dedicated to - * his work. He has very good level of knowledge when it comes to overall front-end - * architecture solutions and specifically on frameworks like backbone & angular. + * He is one of the vibrant contributor in the team and always been dedicated to + * his work. He has very good level of knowledge when it comes to overall front-end + * architecture solutions and specifically on frameworks like backbone & angular. * -Mohiuddin Parekh ( Founder & CEO at Decojent) */ /** * I first met Nishant 3 months ago when I told him I was looking for help with * AngularJS and asked him to mentor me. One of the first things I noticed was that - * he had a great learning attitude, because he told me that he was looking forward - * to learning from me, something I wasn’t expecting from a mentor! He is fun, - * sweet, generous and has a great sense of humor. We have quickly become friends + * he had a great learning attitude, because he told me that he was looking forward + * to learning from me, something I wasn’t expecting from a mentor! He is fun, + * sweet, generous and has a great sense of humor. We have quickly become friends * and I think we have spent more time hanging out on Telegram (instant messaging) * and Skype than we have coding. I had never written my own AngularJS directive * before so I asked him if he could write one for me for an autocomplete feature. @@ -111,7 +111,7 @@ * directives. We have spent a lot of time chatting and I think there is so much * more he can do that I have not yet seen. I can see he also has a passion for * startups. - * -Jenny Swift (Software Engineer) + * -Jenny Swift (Software Engineer) */ })(); From 486af76860aa7e7e3ea57af85bb503df996ffe57 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Tue, 17 Nov 2015 16:30:20 +0530 Subject: [PATCH 003/141] Added question and cover page --- README.md | 318 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 318 insertions(+) diff --git a/README.md b/README.md index fc9816a..cc758da 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +![](coverPage.png) + # 101-JavaScript-Interview-Question ##### 1. Difference between `undefined` and `not defined` in JavaScript @@ -634,3 +636,319 @@ function getSize(object){ ``` **Bonus**: We can also use `Underscore` (recommended, As it's lightweight) to calculate object length. +## Question 22 +##### Difference between `Function`, `Method` and `Constructor` calls in JavaScript. + +If your are familiar with Object-oriented programming, More likely familiar to thinking of functions, methods, and class constructors as three separate things. But In JavaScript, these are just three different usage patterns of one single construct. + +functions : The simplest usages of function call: + +``` javascript + function helloWorld(name){ + return "hello world, " + name; + } + + helloWorld("JS Geeks"); // "hello world JS Geeks" +``` +Methods in JavaScript are nothing more than object properties that reference to function. + +``` javascript +var obj = { + helloWorld : function(){ + return "hello world, " + this.name; + }, + name: 'John Carter' +} +obj.helloWorld(); // // "hello world John Carter" +``` +Notice how `helloWorld` refer to `this` properties of obj. Here It's clear or you might have already understood that `this` gets bound to `obj`. But Interesting point that we can copy a reference to the same function `helloWorld` in another object and get a difference answer. Let see: + +``` javascript +var obj2 = { + helloWorld : obj.helloWorld, + name: 'John Doe' +} +obj2.helloWorld(); // "hello world John Doe" +``` +You might be wonder what exactly happens in a method call here. Here call expression itself determine the binding of this `this`, The expression `obj2.helloWorld()` looks up the `helloWorld` property of obj and calls it with receiver object `obj2`. + +The third use of functions is as constructors. Like function and method, `constructors` are defined with function. + +``` javascript +function Employee(name, age){ + this.name = name; + this.age = age; +} + +var emp1 = new Employee('John Doe', 28); +emp1.name; // "John Doe" +emp1.age; // 28 +``` +Unlike function calls and method calls, a constructor call `new Employee('John Doe', 28)` create a brand new object and passes it as the value of `this`, and implicitly returns the new object as it's result. + +The primary role of constructor function is to initialize the object. + +## Question 23 +##### What would be the output of below code ? + + +``` javascript + function User(name){ + this.name = name || "JsGeeks"; + } + + var person = new User("xyz")["location"] = "USA"; + console.log(person); +``` + +Output of above code would be `USA`. Here `new User("xyz")` create a brand new object and created property `location` on that and `USA` has been assigned to object property location and that has been referenced by person. + +Let say `new User("xyz")` crated a object called `foo` and returned now `foo["location"]` would be assigned value as `USA` and `person` is referencing to `foo["location"]`. + +## Question 24 +##### Write a mul function which will output when invoked as below syntax. + +``` javascript + console.log(mul(2)(3)(4)); // output : 24 + console.log(mul(4)(3)(4)); // output : 48 +``` +Below is code followed by an explanation how it works: + +``` javascript +function mul (x) { + return function (y) { // anonymous function + return function (z) { // anonymous function + return x * y * z; + }; + }; +} +``` +Here `mul` function accept first argument and return anonymous function which take second parameter and return anonymous function which take third parameter and return multiplication of arguments which is being passed in successive. + +In Javascript function defined inside has access to outer function variable and function is first class object so it can be returned by function as well and passed as argument in another function. + +* A function is an instance of the Object type +* A function can have properties and has a link back to its constructor method +* Function can be stored as variable +* Function can be pass as a parameter to another function +* Function can be return from function + +## Question 25 +##### What is the difference between a method and a function in javascript? + +A function is a piece of code that is called by name and function itself not associated with any object and not defined inside any object. It can be passed data to operate on (i.e. parameter) and can optionally return data (the return value). + +``` javascript +// Function definition +function myFunc(){ + // Do some stuff; +} + +// Calling function +myFunc(); +``` + +Here myFunc() function call is not associated with object hence not invoked through any object. + +A function can be self-invoking anonymous function or named self-invoking function + +``` javascript +// Named Self-invoking Function +(function myFunc(){ + // Do some stuff; +})(); + +// Anonymous Self-invoking Function +(function(){ + // Do some stuff; +})(); +``` + +In case of named self-invoking anonymous function or anonymous self-invoking function there is no need of call function explicitly. + + A method is a piece of code that is called by name and that is associated with object. In most respects it is identical to function call except for some key difference: + +* It is implicitly passed for the object for which it was called. +* It is able to operate on data that is contained within the class ( remembering that an object is an instance of a class- the class is the definition, the object is an instance of that) +* Method call is always associated with object + +``` javascript +var methodObject = { + attribute : "xyz", + display : function () { // Method + console.log(this.attribute); + } +}; + +// Call method +methodObject.display(); +``` + +Here methodObject is an object and display is method which is associated with methodObject. + +## Question 26 +##### What is JavaScript Self-Invoking anonymous function or Self-Executing anonymous function. + +A `self-invoking` anonymous function also called `self-executing anonymous function` runs immediately or automatically when we define it and self-invoking anonymous function doesn't have any name at all. +Self-Invoking anonymous function syntax: + +``` javascript +(function(){ + console.log("Self-Invoking function code logic "); +})(); +Output: Self-Invoking function code logic +``` +We must have to know the fact that JavaScript functions run immediately when we put `()` after their names. + +``` javascript +function display(){ + console.log("Display me"); +} +display(); // This will run immediately + +Output: "Display me" +/* +This will not run immediately as we haven't put () after function +name, only function name is use full when we want to pass it as +callback to another function or method. +*/ +display; + +function testCallBack(callback){ + callback (); // This will be call display method immediately + if callback parameter is being set method display +} +testCallBack(display); // Here display function is being passed as callback +``` +## Question 27 +##### Describe Singleton Pattern In JavaScript ? + +The singleton pattern is the most commonly used design pattern and one that you will probably is more than any others. It provides a great way to wrap code into logical unit that can be accessed through a single variable. +The Singleton design pattern is used when only one instance of object is needed throughout the lifetime of an application. + +In JavaScript there is different way to achieve singleton object than any other object oriented supported language (Java, C++). In JavaScript Singleton pattern have many uses, they can be used for NameSpacing, which reduce the number of global variables in your page (Prevent from polluting global space), Organising code in a consistent manner, which increase the readability and maintainability of your pages. +There are two important point in the traditional definition of Singleton pattern: +* There should be only one instance allowed for a class and +* We should allow global point of access to that single instance +Let me define singleton pattern in JavaScript context: + +>It is an object that is used to create namespace and group together a related set of methods and attributes (encapsulation) and if we allow to instantiate than it can be instantiate only once. + +In JavaScript we can create singleton though object literal, However there are some another way but that I will cover in next post. + +A singleton object consists of two parts: The object itself, containing the members (Both methods and attributes) within it, and global variable used to access it. The variable is global so that object can be accessed anywhere in the page, this is key feature of the singleton pattern. + +**JavaScript: A Singleton as a Namespace** + +As I have already stated above that singleton can be used to declare Namespace in JavaScript. NameSpacing is a large part of responsible programming in JavaScript. Because everything can be overwritten, and it is very easy to wipe out variable by mistake or a function, or even a class without even knowing it. +A common example which happen frequently when you are working with another team member parallel, + +```javascript +function findUserName(id){ + +} + +/* Later in the page another programmer +added code */ +var findUserName = $('#user_list'); + +/* You are trying to call :( */ +console.log(findUserName()) +``` +One of the best way to prevent accidentally overwriting variable is to namespace your code within a singleton object. + +```javascript +/* Using Namespace */ + +var MyNameSpace = { + + findUserName : function(id){ + + }, + // Other methods and attribute go here as well +} + +/* Later in the page another programmer +added code */ +var findUserName = $('#user_list'); + +/* You are trying to call and you make this time workable */ +console.log(MyNameSpace.findUserName()); +``` +#####Singleton Design Pattern Implementation + +```javascript +/* Lazy Instantiation skeleton for a singleton pattern */ + +var MyNameSpace = {}; +MyNameSpace.Singleton = (function(){ + + // Private attribute that holds the single instance + var singletonInstance; + + // All of the normal code goes here + function constructor(){ + // Private members + var privateVar1 = "Nishant"; + var privateVar2 = [1,2,3,4,5]; + + function privateMethod1(){ + // code stuff + } + + function privateMethod1(){ + // code stuff + } + + return { + attribute1 : "Nishant", + publicMethod: function(){ + alert("Nishant");// some code logic + } + } + } + + return { + // public method ( Global access point to Singleton object) + getInstance: function(){ + //instance already exist then return + if(!singletonInstance){ + singletonInstance = constructor(); + } + return singletonInstance; + } + } + } +})(); + +// getting access of publicMethod +console.log(MyNamespace.Singleton.getInstance().publicMethod()); +``` + +The singleton implemented above is easy to understand. The singleton class maintains a static reference to the lone singleton instance and return that reference from the static getInstance() method. + +## Question 28 +##### What are the way by which we can create object in JavaScript ? + +**Method 1:** `Function Based` + +If we want to create several similar `objects`. In below code sample, `Employee` which is called *constructor function*. This is similar to classes in object oriented languages. + +```javascript + + function Employee(fName, lName, age, salary){ + this.firstName = fName; + this.lastName = lName; + this.age = age; + this.salary = salary; + } + + // Creating multiple object which have similar property but diff value assigned to object property. + var employee1 = new Employee('John', 'Moto', 24, '5000$'); + var employee1 = new Employee('Ryan', 'Jor', 26, '3000$'); + var employee1 = new Employee('Andre', 'Salt', 26, '4000$'); +``` + +**Method 2:** `Object Constructor` + + From c438fcd68dbc0274d6063a7d88ec39a5bb268c5d Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Tue, 17 Nov 2015 16:43:09 +0530 Subject: [PATCH 004/141] Added png --- coverPage.png | Bin 0 -> 331997 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 coverPage.png diff --git a/coverPage.png b/coverPage.png new file mode 100644 index 0000000000000000000000000000000000000000..b839b9cae897335c200a8fa49d9017af61792834 GIT binary patch literal 331997 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%0DEHfN+94>XiYoM+&_BcI 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�&Q;tye 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 literal 0 HcmV?d00001 From 13c075d4eff1c5cedd494ee890a9857f55e66021 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Tue, 17 Nov 2015 19:19:47 +0530 Subject: [PATCH 005/141] Changed cover pic --- coverPage.png | Bin 331997 -> 346238 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/coverPage.png b/coverPage.png index b839b9cae897335c200a8fa49d9017af61792834..8f42fc9c80731fe725e86883bad66b0c7140f785 100644 GIT binary patch delta 40798 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 {pXLa1On3!NLu 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 Ucb$}R$w3q5G^(Y+LD_x(1KUFYEdT%j From 503e557e96acc319376252bc6e9fa63aa2d44e7a Mon Sep 17 00:00:00 2001 From: Tian Permana Date: Wed, 2 Dec 2015 16:51:27 +0700 Subject: [PATCH 006/141] Proof read, fix typo, better grammar & tidier code example --- README.md | 1007 +++++++++++++++++++++++++++-------------------------- 1 file changed, 516 insertions(+), 491 deletions(-) diff --git a/README.md b/README.md index cc758da..f3869c4 100644 --- a/README.md +++ b/README.md @@ -1,87 +1,87 @@ ![](coverPage.png) # 101-JavaScript-Interview-Question +## 1. Difference between `undefined` and `not defined` in JavaScript +> In JavaScript if you try to use a variable that doesn't exist and has not been declared, then JavaScript will throw an error `var name is not defined` and script will stop execution thereafter. But If you use `typeof undeclared_variable` then it will return `undefined`. -##### 1. Difference between `undefined` and `not defined` in JavaScript +Before starting further discussion let understand the difference between declaration and definition. -> In JavaScript if you try to use variable that doesn't exist and has not been declared, then JavaScript will throw an error `var name is not defined` and script will stop execution there after. But If you use `typeof undeclared_variable` then it will return `undefined`. - -Before starting further discussion let understand the difference between deceleration and definition. - -`var x` is a declaration because you are not defining what value it holds yet, but you are declaring it's existence and the need of memory allocation. +`var x` is a declaration because you are not defining what value it holds yet, but you are declaring its existence and the need of memory allocation. ```javascript > var x; // declaring x -> console.log(x); //output: undefined +> console.log(x); //output: undefined ``` -`var x = 1` is both declaration and definition (also we can say we are doing initialisation), Here declaration and assignment of value happen inline for variable x, In JavaScript every variable declaration and function declaration brings to the top of it's current scope in which It's declared then assignment happen in order this term is called `hoisting`. +`var x = 1` is both declaration and definition (also we can say we are doing initialisation), Here declaration and assignment of value happen inline for variable x, In JavaScript every variable declaration and function declaration brings to the top of its current scope in which it's declared then assignment happen in order this term is called `hoisting`. -> A variable that is declare but not define and when we try to access it, It will result `undefined`. +> A variable that is declared but not define and when we try to access it, It will result `undefined`. ```javascript var x; // Declaration if(typeof x === 'undefined') // Will return true - ``` -> A variable that is neither declare nor defined, when we try to reference such variable then It result `not defined`. + +> A variable that neither declared nor defined when we try to reference such variable then It result `not defined`. ```javascript > console.log(y); // Output: ReferenceError: y is not defined ``` -###### Ref Link: -http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration +### Ref Link: +[http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration](http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration) -##### 2. What will be the output of below code ? +## 2. What will be the output of below code? ```javascript - var y = 1; - if (function f(){}) { - y += typeof f; - } - console.log(y); +var y = 1; +if (function f() {}) { + y += typeof f; +} +console.log(y); ``` -> Above code would give output `1undefined`. If condition statement evaluate using `eval` so `eval(function f(){})` which return `function f(){}` which is true so inside if statement code execute. `typeof f` return undefined because if statement code execute at run time, so statement inside `if` condition evaluated at run time. + +> Above code would give output `1undefined`. If condition statement evaluate using `eval` so `eval(function f() {})` which return `function f() {}` which is true so inside if statement code execute. `typeof f` return undefined because if statement code execute at run time, so statement inside `if` condition evaluated at run time. ```javascript - var k = 1; - if (1) { - eval(function foo(){}); - k += typeof foo; - } - console.log(k); +var k = 1; +if (1) { + eval(function foo() {}); + k += typeof foo; +} +console.log(k); ``` + Above code will also output `1undefined`. ```javascript - var k = 1; - if (1) { - function foo(){}; - k += typeof foo; - } - console.log(k); // output 1function +var k = 1; +if (1) { + function foo() {}; + k += typeof foo; +} +console.log(k); // output 1function ``` -##### 3. What is drawback of creating true private in JavaScript? -> One of the drawback of creating true private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. +## 3. What is drawback of creating true private in JavaScript? +> One of the drawback of creating a true private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. ```javascript var Employee = function (name, company, salary) { - this.name = name || ""; //Public attribute default value is null - this.company = company || ""; //Public attribute default value is null - this.salary = salary || 5000; //Public attribute default value is null + this.name = name || ""; //Public attribute default value is null + this.company = company || ""; //Public attribute default value is null + this.salary = salary || 5000; //Public attribute default value is null - // Private method - var increaseSlary = function () { - this.salary = this.salary + 1000; - }; + // Private method + var increaseSlary = function () { + this.salary = this.salary + 1000; + }; - // Public method - this.dispalyIncreasedSalary = function() { - increaseSlary(); - console.log(this.salary); - }; + // Public method + this.dispalyIncreasedSalary = function() { + increaseSlary(); + console.log(this.salary); + }; }; // Create Employee class object @@ -91,41 +91,40 @@ var emp2 = new Employee("Merry","Pluto",2000); // Create Employee class object var emp3 = new Employee("Ren","Pluto",2500); ``` -Here each instance variable `emp1`, `emp2`, `emp3` has own copy of increaseSalary private method. -So as recommendation don’t go for private method unless it’s necessary. +Here each instance variable `emp1`, `emp2`, `emp3` has own copy of increaseSalary private method. -##### 4.What is “closure” in javascript? Provide an example ? +So as recommendation don't go for a private method unless it's necessary. -> A closure is a function defined inside another function (called parent function) and has access to variable which is declared and defined in parent function scope. +## 4.What is “closure” in javascript? Provide an example? +> A closure is a function defined inside another function (called parent function) and has access to the variable which is declared and defined in parent function scope. The closure has access to variable in three scopes: - - * Variable declared in his own scope - * Variable declared in parent function scope - * Variable declared in global namespace +- Variable declared in his own scope +- Variable declared in parent function scope +- Variable declared in global namespace ```javascript -var globalVar = "abc"; +var globalVar = "abc"; -// Parent self invoking function +// Parent self invoking function (function outerFunction (outerArg) { // begin of scope outerFunction - // Variable declared in outerFunction function scope - var outerFuncVar = 'x'; - // Closure self-invoking function - (function innerFunction (innerArg) { // begin of scope innerFunction - // variable declared in innerFunction function scope - var innerFuncVar = "y"; - console.log( - "outerArg = " + outerArg + "\n" + - "outerFuncVar = " + outerFuncVar + "\n" + - "innerArg = " + innerArg + "\n" + - "innerFuncVar = " + innerFuncVar + "\n" + - "globalVar = " + globalVar); - - }// end of scope innerFunction)(5); // Pass 5 as parameter -}// end of scope outerFunction )(7); // Pass 7 as parameter + // Variable declared in outerFunction function scope + var outerFuncVar = 'x'; + // Closure self-invoking function + (function innerFunction (innerArg) { // begin of scope innerFunction + // variable declared in innerFunction function scope + var innerFuncVar = "y"; + console.log( + "outerArg = " + outerArg + "\n" + + "outerFuncVar = " + outerFuncVar + "\n" + + "innerArg = " + innerArg + "\n" + + "innerFuncVar = " + innerFuncVar + "\n" + + "globalVar = " + globalVar); + }// end of scope innerFunction)(5); // Pass 5 as parameter +}// end of scope outerFunction )(7); // Pass 7 as parameter ``` + `innerFunction` is closure which is defined inside `outerFunction` and has access to all variable which is declared and defined in outerFunction scope. In addition to this function defined inside function as closure has access to variable which is declared in `global namespace`. Output of above code would be: @@ -136,192 +135,209 @@ outerFuncVar = x innerArg = 5 innerFuncVar = y globalVar = abc - ``` -##### 5. Write a mul function which will properly when invoked as below syntax. - - ```javascript - console.log(mul(2)(3)(4)); // output : 24 - console.log(mul(4)(3)(4)); // output : 48 - ``` +## 5. Write a mul function which will properly when invoked as below syntax. + +```javascript +console.log(mul(2)(3)(4)); // output : 24 +console.log(mul(4)(3)(4)); // output : 48 +``` > Below is code followed by an explanation how it works: ```javascript function mul (x) { - return function (y) { // anonymous function - return function (z) { // anonymous function - return x * y * z; - }; + return function (y) { // anonymous function + return function (z) { // anonymous function + return x * y * z; }; + }; } ``` -Here `mul` function accept first argument and return anonymous function which take second parameter and return anonymous function which take third parameter and return multiplication of arguments which is being passed in successive - -In Javascript function defined inside has access to outer function variable and function is first class object so it can be returned by function as well and passed as argument in another function. +Here `mul` function accept the first argument and return anonymous function which take the second parameter and return anonymous function which take the third parameter and return multiplication of arguments which is being passed in successive -* A function is an instance of the Object type -* A function can have properties and has a link back to its constructor method -* Function can be stored as variable -* Function can be pass as a parameter to another function -* Function can be return from function - -#### 6. How to empty an array in JavaScript ? +In Javascript function defined inside has access to outer function variable and function is the first class object so it can be returned by function as well and passed as argument in another function. +- A function is an instance of the Object type +- A function can have properties and has a link back to its constructor method +- Function can be stored as variable +- Function can be pass as a parameter to another function +- Function can be returned from function +### 6. How to empty an array in JavaScript? For instance, ```javascript - var arrayList = ['a','b','c','d','e','f']; +var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; ``` -How can we empty above array ? -> There are couple of ways by which we can empty an array, So let's discuss all the possible way by which we can empty an array. +How can we empty above array? + +> There are a couple of ways by which we can empty an array, So let's discuss all the possible way by which we can empty an array. + +### Method 1 -#### Method 1 ```javascript -arrayList = [] +arrayList = []; ``` -Above code will set the variable `arrayList` to a new empty array. This is recommended if you don't have **references to the original array** `arrayList` anywhere else because It will actually create new empty array. You should be careful with this way of empty the array,because if you have referenced this array from another variable, then the original reference array will remain unchanged, Only use this way if you have only reference the array by it's original variable `arrayList`. + +Above code will set the variable `arrayList` to a new empty array. This is recommended if you don't have **references to the original array** `arrayList` anywhere else because It will actually create a new empty array. You should be careful with this way of empty the array, because if you have referenced this array from another variable, then the original reference array will remain unchanged, Only use this way if you have only referenced the array by its original variable `arrayList`. For Instance, ```javascript -var arrayList = ['a','b','c','d','e','f']; // Created array -var anotherArrayList = arrayList; // Referenced arrayList by another variable -arrayList = []; // Empty the array -console.log(anotherArrayList); // Output ['a','b','c','d','e','f'] +var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; // Created array +var anotherArrayList = arrayList; // Referenced arrayList by another variable +arrayList = []; // Empty the array +console.log(anotherArrayList); // Output ['a', 'b', 'c', 'd', 'e', 'f'] ``` - -#### Method 2 + +### Method 2 + ```javascript arrayList.length = 0; ``` -Above code will clear the existing array by setting it's length to 0. This way of empty the array also update all the reference variable which pointing to the original array. This way of empty the array is useful when you want to update all the another reference variable which pointing to `arrayList`. + +Above code will clear the existing array by setting its length to 0. This way of empty the array also update all the reference variable which pointing to the original array. This way of empty the array is useful when you want to update all the another reference variable which pointing to `arrayList`. For Instance, ```javascript -var arrayList = ['a','b','c','d','e','f']; // Created array -var anotherArrayList = arrayList; // Referenced arrayList by another variable +var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; // Created array +var anotherArrayList = arrayList; // Referenced arrayList by another variable arrayList.length = 0; // Empty the array by setting length to 0 console.log(anotherArrayList); // Output [] ``` -#### Method 3 + +### Method 3 + ```javascript arrayList.splice(0, arrayList.length); ``` + Above implementation will also work perfectly. This way of empty the array will also update all the references of original array. ```javascript -var arrayList = ['a','b','c','d','e','f']; // Created array -var anotherArrayList = arrayList; // Referenced arrayList by another variable +var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; // Created array +var anotherArrayList = arrayList; // Referenced arrayList by another variable arrayList.splice(0, arrayList.length); // Empty the array by setting length to 0 console.log(anotherArrayList); // Output [] ``` -#### Method 4 + +### Method 4 ```javascript -while(arrayList.length){ - arrayList.pop(); +while(arrayList.length) { + arrayList.pop(); } ``` -Above implementation can also empty the array. But not recommended to use often. -#### 7. How to check if an object is an array or not ? +Above implementation can also empty the array. But not recommended to use often. -> The best way to find whether a object is instance of a particular class or not using `toString` method from `Object.prototype` +### 7. How to check if an object is an array or not? +> The best way to find whether an object is instance of a particular class or not using `toString` method from `Object.prototype` ```javascript - var arrayList = [1,2,3]; +var arrayList = [1 , 2, 3]; ``` -One of the best use cases of type checking of object is when we do method overloading in JavaScript. For understanding this let sat we have a method called `greet` which take one single string and also list of string, so making our greet method workable in both situation we need to know what kind of parameter is being passed, is it single value or list of value ? + +One of the best use cases of type checking of an object is when we do method overloading in JavaScript. For understanding this let say we have a method called `greet` which take one single string and also a list of string, so making our `greet` method workable in both situation we need to know what kind of parameter is being passed, is it single value or list of value? ```javascript - function greet(param){ - if(){ // here have to check whether param is array or not - }else{ - } - } +function greet(param) { + if() { + // here have to check whether param is array or not + } + else { + } +} ``` + However in above implementation it might not necessary to check type for array, we can check for single value string and put array logic code in else block, let see below code for the same. ```javascript - function greet(param){ - if(typeof param === 'string'){ - }else{ - // If param is of type array then this block of code would execute - } + function greet(param) { + if(typeof param === 'string') { + } + else { + // If param is of type array then this block of code would execute + } } ``` -Now It's fine we can go with above two implementation, but when we have situation like parameter can be `single value`, `array`, and `object` type then we will be in trouble. -Coming back to checking type of object, As we mentioned that we can use -`Object.prototype.toString` +Now it's fine we can go with above two implementations, but when we have a situation like parameter can be `single value`, `array`, and `object` type then we will be in trouble. + +Coming back to checking type of object, As we mentioned that we can use `Object.prototype.toString` ```javascript -if( Object.prototype.toString.call( arrayList ) === '[object Array]' ) { - console.log('Array!'); +if(Object.prototype.toString.call(arrayList) === '[object Array]') { + console.log('Array!'); } ``` If you are using `jQuery` then you can also used jQuery `isArray` method: ```javascript - if($.isArray(arrayList)){ - console.log('Array'); - }else{ - console.log('Not an array'); - } +if($.isArray(arrayList)) { + console.log('Array'); +} else { + console.log('Not an array'); +} ``` + FYI jQuery uses `Object.prototype.toString.call` internally to check whether object is an array or not. -In Modern browser you can also use +In Modern browser you can also use + ```javascript Array.isArray(arrayList); ``` + `Array.isArray` is supported by Chrome 5, Firefox 4.0, IE 9, Opera 10.5 and Safari 5 - -##### 8. What will be the output of below code ? + +#### 8. What will be the output of below code? ```javascript -var output = (function(x){ - delete x; - return x; - })(0); - - console.log(output); +var output = (function(x) { + delete x; + return x; +})(0); + +console.log(output); ``` -> Above code will output `0` as output. `delete` operator is used to delete property from object. Here `x` is not an object it's **local variable**. `delete` operator doesn't affect local variable. -##### 9. What will be the output of below code ? +> Above code will output `0` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **local variable**. `delete` operator doesn't affect local variable. + +#### 9. What will be the output of below code? ```javascript var x = 1; -var output = (function(){ - delete x; - return x; - })(); - - console.log(output); +var output = (function() { + delete x; + return x; +})(); + +console.log(output); ``` + > Above code will output `1` as output. `delete` operator is used to delete property from object. Here `x` is not an object it's **global variable** of type `number`. -##### 10. What will be the output of below code ? +#### 10. What will be the output of below code? ```javascript var x = { foo : 1}; -var output = (function(){ - delete x.foo; - return x.foo; - })(); - - console.log(output); +var output = (function() { + delete x.foo; + return x.foo; +})(); + +console.log(output); ``` -> Above code will output `undefined` as output. `delete` operator is used to delete property from object. Here `x` is an object which has foo as a property and from self-invoking function we are deleting foo property of object `x` and after deletion we are trying to reference deleted property `foo` which result `undefined`. -##### 11. What will be the output of below code ? +> Above code will output `undefined` as output. `delete` operator is used to delete a property from an object. Here `x` is an object which has foo as a property and from self-invoking function we are deleting foo property of object `x` and after deletion we are trying to reference deleted property `foo` which result `undefined`. + +#### 11. What will be the output of below code? ```javascript var Employee = { @@ -331,351 +347,371 @@ var emp1 = Object.create(Employee); delete emp1.company console.log(emp1.company); ``` -> Above code will output `xyz` as output. Here `emp1` object got company as **prototype** property. delete operator doesn't delete prototype property. -`emp1` object doesn't have **company** as it's own property. you can test it `console.log(emp1.hasOwnProperty('company')); //output : false` However we can delete company property directly from `Employee` object using `delete Employee.company` or we can also delete from `emp1` object using `__proto__` property `delete emp1.__proto__.company`. +> Above code will output `xyz` as output. Here `emp1` object got company as **prototype** property. delete operator doesn't delete prototype property. + +`emp1` object doesn't have **company** as its own property. you can test it `console.log(emp1.hasOwnProperty('company')); //output : false` However we can delete company property directly from `Employee` object using `delete Employee.company` or we can also delete from `emp1` object using `__proto__` property `delete emp1.__proto__.company`. -##### 12. What is `undefined x 1` in JavaScript +#### 12. What is `undefined x 1` in JavaScript ```javascript -var trees = ["redwood","bay","cedar","oak","maple"]; +var trees = ["redwood", "bay", "cedar", "oak", "maple"]; delete trees[3]; ``` -when you run above code and do `console.log(trees);` in chrome developer console then you will get -`["redwood", "bay", "cedar", undefined × 1, "maple"]` and when you run above code in Firefox browser console then you will get `["redwood", "bay", "cedar", undefined, "maple"]` so from these It's cleared that chrome has it's own way of displaying uninitialised index in array. But when you check `trees[3] === undefined` in both of the browser you will get similar output as `true`. + +when you run above code and do `console.log(trees);` in chrome developer console then you will get `["redwood", "bay", "cedar", undefined × 1, "maple"]` and when you run above code in Firefox browser console then you will get `["redwood", "bay", "cedar", undefined, "maple"]` so from these it's cleared that chrome has its own way of displaying uninitialised index in array. But when you check `trees[3] === undefined` in both of the browser you will get similar output as `true`. **Note:** Please remember you need not check for uninitialised index of array in `trees[3] === 'undefined × 1'` it will give error, Because `'undefined × 1'` this is just way of displaying uninitialised index of array in chrome. -##### 13. What will be the output of below code ? +#### 13. What will be the output of below code? ```javascript -var trees = ["xyz","xxxx","test","ryan","apple"]; +var trees = ["xyz", "xxxx", "test", "ryan", "apple"]; delete trees[3]; - - console.log(trees.length); +console.log(trees.length); ``` + > Above code will output `5` as output. When we used `delete` operator for deleting an array element then, the array length is not affected from this. This holds even if you deleted all the element of array using `delete` operator. -So when delete operator removes an array element that deleted element is not longer present in array. In place of value at deleted index `undefiend x 1` in **chrome** and `undefiend` is placed at the index. If you do `console.log(trees)` output `["xyz", "xxxx", "test", undefined × 1, "apple"]` in Chrome and in Firefox `["xyz", "xxxx", "test", undefined, "apple"]`. +So when delete operator removes an array element that deleted element is not longer present in array. In place of value at deleted index `undefined x 1` in **chrome** and `undefined` is placed at the index. If you do `console.log(trees)` output `["xyz", "xxxx", "test", undefined × 1, "apple"]` in Chrome and in Firefox `["xyz", "xxxx", "test", undefined, "apple"]`. -##### 14. What will be the output of below code ? +#### 14. What will be the output of below code? ```javascript var bar = true; console.log(bar + 0); console.log(bar + "xyz"); console.log(bar + true); -console.log(bar + false); +console.log(bar + false); ``` -> Above code will output `1, "truexyz", 2, 1` as output. General guideline for addition of operator: - -> * Number + Number -> Addition -> * Boolean + Number -> Addition -> * Boolean + Number -> Addition -> * Number + String -> Concatenation -> * String + Boolean -> Concatenation -> * String + String -> Concatenation +> Above code will output `1, "truexyz", 2, 1` as output. General guideline for addition of operator: + - Number + Number -> Addition + - Boolean + Number -> Addition + - Boolean + Number -> Addition + - Number + String -> Concatenation + - String + Boolean -> Concatenation + - String + String -> Concatenation -##### 15. What will be the output of below code ? +#### 15. What will be the output of below code? ```javascript var z = 1, y = z = typeof y; -console.log(y); +console.log(y); ``` -> Above code will output `undefined` as output. According to `associativity` rule operator with same precedence are processed based on there associativity property of operator. Here associativity of assignment operator is `Right to Left` so first `typeof y` will evaluate first which is `undefined` and assigned to `z` and then `y` would be assigned value of z and then `z` would be assign value `1`. -##### 16. What will be the output of below code ? +> Above code will output `undefined` as output. According to `associativity` rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is `undefined` and assigned to `z` and then `y` would be assigned the value of z and then `z` would be assign value `1`. + +#### 16. What will be the output of below code? ```javascript - // NFE (Named Function Expression - var foo = function bar(){ return 12; }; - typeof bar(); +// NFE (Named Function Expression +var foo = function bar() { return 12; }; +typeof bar(); ``` -> Above code will output `Reference Error` as output. For making above code work you can re-write above code as follow: + +> Above code will output `Reference Error` as output. For making above code work you can re-write above code as follow: **Sample 1** ```javascript - var bar = function(){ return 12; }; - typeof bar(); +var bar = function() { return 12; }; +typeof bar(); ``` -or + +or **Sample 2** ```javascript - function bar(){ return 12; }; - typeof bar(); +function bar() { return 12; }; +typeof bar(); ``` + function definition can have only one reference variable as a function name, In above code **sample 1** bar is reference variable which is pointing to `anonymous function` and in **sample 2** function definition is name function. ```javascript - var foo = function bar(){ - // foo is visible here - // bar is visible here - console.log(typeof bar()); // Work here :) - }; - // foo is visible here - // bar is undefined here - +var foo = function bar() { + // foo is visible here + // bar is visible here + console.log(typeof bar()); // Work here :) +}; +// foo is visible here +// bar is undefined here ``` -##### 17. what is difference between declaring function in below format ? +#### 17. What is the difference between declaring a function in below format? ```javascript - var foo = function(){ - // Some code - }; +var foo = function() { + // Some code +}; ``` ```javascript - function bar(){ - // Some code - }; +function bar() { + // Some code +}; ``` -The main difference is function `foo` is defined at `run-time` whereas function `bar` is defined at parse time. For understanding It in better way let see below code : + +The main difference is function `foo` is defined at `run-time` whereas function `bar` is defined at parse time. For understanding It in better way let see below code : ```javascript -Run-Time function declaration +Run-Time function declaration + foo(); // Call foo function here, It will give Error + var foo = function() { + console.log("Hi I am inside Foo"); + }; + ``` + ```javascript +function bar() { + console.log("Hi I am inside Foo"); +}; + ``` -The another advantage of first-one way of declaration that you can declare function based on certain condition for example: + +The another advantage of first-one way of declaration that you can declare function based on certain condition for example: ```javascript ``` -But If you try to run similar code in below format It would give error + +But If you try to run similar code in below format It would give error ```javascript ``` -##### 18. what is function hoisting in JavaScript? +#### 18. what is function hoisting in JavaScript? **Function Expression** ```javascript - var foo = function foo(){ - return 12; - }; + var foo = function foo() { + return 12; + }; ``` + > In JavaScript variable and functions are `hoisted`. Let's take function `hoisting` first. Basically, the JavaScript interpreter looks ahead to find all the variable declaration and hoists them to the top of the function where it's declared. For Example: ```javascript - foo(); // Here foo is still undefined - var foo = function foo(){ - return 12; - }; +foo(); // Here foo is still undefined +var foo = function foo() { + return 12; +}; ``` -Above code behind the scene look something like below code: - ```javascript - var foo = undefined; - foo(); // Here foo is undefined - foo = function foo(){ - / Some code stuff - } - ``` - ```javascript - var foo = undefined; - foo = function foo(){ - / Some code stuff - } - foo(); // Now foo is defined here - ``` +Above code behind the scene look something like below code: - ##### 19. What will be the output of below code ? +```javascript +var foo = undefined; +foo(); // Here foo is undefined +foo = function foo() { + // Some code stuff +} +``` - ```javascript - var salary = "1000$"; +```javascript +var foo = undefined; +foo = function foo() { + // Some code stuff +} +foo(); // Now foo is defined here +``` - (function () { - console.log("Original salary was " + salary); +#### 19. What will be the output of below code? - var salary = "5000$"; +```javascript +var salary = "1000$"; - console.log("My New Salary " + salary); - })(); - ``` - > Above code will output: `undefined, 5000$`. JavaScript has hoisting concept where newbie get tricked. In above code, you might be expecting `salary` to retain it's value from outer scope until the point that `salary` was re-declared in the inner scope. But due to `hoisting` salary value was `undefined` instead. To understand It better have a look of below code, here `salary` variable is hoisted and declared at the top in function scope and while doing console.log it's result `undefined` and after that it's been redeclare and assigned `5000$`. +(function () { + console.log("Original salary was " + salary); - ```javascript - var salary = "1000$"; + var salary = "5000$"; - (function () { - var salary = undefined; - console.log("Original salary was " + salary); + console.log("My New Salary " + salary); +})(); +``` - salary = "5000$"; +> Above code will output: `undefined, 5000$`. JavaScript has hoisting concept where newbie gets tricked. In above code, you might be expecting `salary` to retain it values from outer scope until the point that `salary` was re-declared in the inner scope. But due to `hoisting` salary value was `undefined` instead. To understand It better have a look of below code, here `salary` variable is hoisted and declared at the top in function scope and while doing console.log it's result `undefined` and after that it's been redeclared and assigned `5000$`. + +```javascript +var salary = "1000$"; - console.log("My New Salary " + salary); - })(); - ``` +(function () { + var salary = undefined; + console.log("Original salary was " + salary); - ##### 20. What is the `instanceof` operator in JavaScript? what would be the output of below code ? + salary = "5000$"; + + console.log("My New Salary " + salary); +})(); +``` + +#### 20. What is the `instanceof` operator in JavaScript? what would be the output of below code? ```javascript -function foo(){ - return foo; +function foo() { + return foo; } new foo() instanceof foo; ``` -> `instanceof` operator checks the current object and return true if the object is of the the specified type. -For Example: +> `instanceof` operator checks the current object and return true if the object is of the specified type. + +For Example: ```javascript - var dog = new Animal(); - dog instanceof Animal // Output : true +var dog = new Animal(); +dog instanceof Animal; // Output : true ``` + Here `dog instanceof Animal` is true since `dog` inherits from `Animal.prototype` ```javascript - var name = new String("xyz"); - name instanceof String // Output : true +var name = new String("xyz"); +name instanceof String; // Output : true ``` -Here `name instanceof String` is true since `dog` inherits from `String.prototype`. Now let's understand the working of below code + +Here `name instanceof String` is true since `dog` inherits from `String.prototype`. Now let's understand the working of below code ```javascript -function foo(){ - return foo; +function foo() { + return foo; } new foo() instanceof foo; ``` + Here function `foo` is returning `foo` which is again pointer to function `foo` ```javascript -function foo(){ - return foo; +function foo() { + return foo; } var bar = new foo(); -// here bar is pointer to function foo(){return foo}. +// here bar is pointer to function foo() {return foo}. ``` -So the `new foo() instanceof foo` return `false`; +So the `new foo() instanceof foo` return `false`; -Ref Link: http://stackoverflow.com/questions/2449254/what-is-the-instanceof-operator-in-javascript +Ref Link: [http://stackoverflow.com/questions/2449254/what-is-the-instanceof-operator-in-javascript](http://stackoverflow.com/questions/2449254/what-is-the-instanceof-operator-in-javascript) -##### 21. If we have JavaScript associative array as below code : +#### 21. If we have JavaScript associative array as below code: ```javascript - var counterArray = { - A : 3, - B : 4 - }; - counterArray["C"] = 1; +var counterArray = { + A : 3, + B : 4 +}; +counterArray["C"] = 1; ``` -##### How we will calculate length of the above associative array `counterArray` -> There are no in-built function and property available to calculate length of associative array object, However there are ways by which we can calculate the length of associative array object, In addition to this we can also extend `Object` by adding method or property on prototype for calculate length but extending object might break enumeration in various libraries or might create cross-browser issue, so It's not recommended unless it's necessary. There are various way by which we can calculate length. +#### How we will calculate length of the above associative array `counterArray` +> There are no built-in function and property available to calculate length of associative array object, However there are ways by which we can calculate the length of associative array object, In addition to this we can also extend `Object` by adding method or property on prototype for calculate length but extending object might break enumeration in various libraries or might create cross-browser issue, so it's not recommended unless it's necessary. There is various way by which we can calculate length. `Object` has `keys` method which can we used to calculate the length of object. ```javascript - Object.keys(counterArray).length // Output 2 +Object.keys(counterArray).length; // Output 2 ``` + We can also calculate length of object by iterating through object and by doing count of own property of object. ```javascript -function getSize(object){ - var count = 0; - for(key in object){ - // hasOwnProperty method check own property of object - if(object.hasOwnProperty(key)) count++; - } - return count; +function getSize(object) { + var count = 0; + for(key in object) { + // hasOwnProperty method check own property of object + if(object.hasOwnProperty(key)) count++; + } + return count; } ``` + > We can also add `length` method directly on `Object` see below code. ```javascript - Object.length = function(){ - var count = 0; - for(key in object){ - // hasOwnProperty method check own property of object - if(object.hasOwnProperty(key)) count++; - } - return count; +Object.length = function() { + var count = 0; + for(key in object) { + // hasOwnProperty method check own property of object + if(object.hasOwnProperty(key)) count++; } - //Get the size of any object using - console.log(Object.length(counterArray)) + return count; +} +//Get the size of any object using +console.log(Object.length(counterArray)); ``` -**Bonus**: We can also use `Underscore` (recommended, As it's lightweight) to calculate object length. -## Question 22 -##### Difference between `Function`, `Method` and `Constructor` calls in JavaScript. +**Bonus**: We can also use `Underscore` (recommended, as it's lightweight) to calculate object length. -If your are familiar with Object-oriented programming, More likely familiar to thinking of functions, methods, and class constructors as three separate things. But In JavaScript, these are just three different usage patterns of one single construct. +## Question 22 +### Difference between `Function`, `Method` and `Constructor` calls in JavaScript. +If your are familiar with Object-oriented programming, More likely familiar to thinking of functions, methods, and class constructors as three separate things. But In JavaScript, these are just three different usage patterns of one single construct. functions : The simplest usages of function call: -``` javascript - function helloWorld(name){ - return "hello world, " + name; - } - - helloWorld("JS Geeks"); // "hello world JS Geeks" +```javascript +function helloWorld(name) { + return "hello world, " + name; +} + +helloWorld("JS Geeks"); // "hello world JS Geeks" ``` -Methods in JavaScript are nothing more than object properties that reference to function. -``` javascript +Methods in JavaScript are nothing more than object properties that reference to a function. + +```javascript var obj = { - helloWorld : function(){ - return "hello world, " + this.name; + helloWorld : function() { + return "hello world, " + this.name; }, name: 'John Carter' -} +} obj.helloWorld(); // // "hello world John Carter" ``` -Notice how `helloWorld` refer to `this` properties of obj. Here It's clear or you might have already understood that `this` gets bound to `obj`. But Interesting point that we can copy a reference to the same function `helloWorld` in another object and get a difference answer. Let see: -``` javascript +Notice how `helloWorld` refer to `this` properties of obj. Here It's clear or you might have already understood that `this` gets bound to `obj`. But the interesting point that we can copy a reference to the same function `helloWorld` in another object and get a difference answer. Let see: + +```javascript var obj2 = { helloWorld : obj.helloWorld, name: 'John Doe' } obj2.helloWorld(); // "hello world John Doe" ``` + You might be wonder what exactly happens in a method call here. Here call expression itself determine the binding of this `this`, The expression `obj2.helloWorld()` looks up the `helloWorld` property of obj and calls it with receiver object `obj2`. The third use of functions is as constructors. Like function and method, `constructors` are defined with function. -``` javascript -function Employee(name, age){ +```javascript +function Employee(name, age) { this.name = name; this.age = age; } @@ -684,67 +720,67 @@ var emp1 = new Employee('John Doe', 28); emp1.name; // "John Doe" emp1.age; // 28 ``` -Unlike function calls and method calls, a constructor call `new Employee('John Doe', 28)` create a brand new object and passes it as the value of `this`, and implicitly returns the new object as it's result. -The primary role of constructor function is to initialize the object. +Unlike function calls and method calls, a constructor call `new Employee('John Doe', 28)` create a brand new object and passes it as the value of `this`, and implicitly returns the new object as it's result. + +The primary role of the constructor function is to initialize the object. ## Question 23 -##### What would be the output of below code ? +### What would be the output of below code? +```javascript +function User(name) { + this.name = name || "JsGeeks"; +} -``` javascript - function User(name){ - this.name = name || "JsGeeks"; - } - - var person = new User("xyz")["location"] = "USA"; - console.log(person); +var person = new User("xyz")["location"] = "USA"; +console.log(person); ``` -Output of above code would be `USA`. Here `new User("xyz")` create a brand new object and created property `location` on that and `USA` has been assigned to object property location and that has been referenced by person. +The output of above code would be `USA`. Here `new User("xyz")` create a brand new object and created property `location` on that and `USA` has been assigned to object property location and that has been referenced by the person. Let say `new User("xyz")` crated a object called `foo` and returned now `foo["location"]` would be assigned value as `USA` and `person` is referencing to `foo["location"]`. ## Question 24 -##### Write a mul function which will output when invoked as below syntax. +### Write a mul function which will output when invoked as below syntax. -``` javascript - console.log(mul(2)(3)(4)); // output : 24 - console.log(mul(4)(3)(4)); // output : 48 +```javascript +console.log(mul(2)(3)(4)); // output : 24 +console.log(mul(4)(3)(4)); // output : 48 ``` + Below is code followed by an explanation how it works: - -``` javascript + +```javascript function mul (x) { - return function (y) { // anonymous function - return function (z) { // anonymous function - return x * y * z; - }; + return function (y) { // anonymous function + return function (z) { // anonymous function + return x * y * z; }; + }; } ``` -Here `mul` function accept first argument and return anonymous function which take second parameter and return anonymous function which take third parameter and return multiplication of arguments which is being passed in successive. -In Javascript function defined inside has access to outer function variable and function is first class object so it can be returned by function as well and passed as argument in another function. +Here `mul` function accept the first argument and return anonymous function which take the second parameter and return anonymous function which take the third parameter and return multiplication of arguments which is being passed in successive. -* A function is an instance of the Object type -* A function can have properties and has a link back to its constructor method -* Function can be stored as variable -* Function can be pass as a parameter to another function -* Function can be return from function +In Javascript function defined inside has access to outer function variable and function is a first class object so it can be returned by a function as well and passed as the argument in another function. +- A function is an instance of the Object type +- A function can have properties and has a link back to its constructor method +- Function can be stored as variable +- Function can be pass as a parameter to another function +- Function can be returned from function ## Question 25 -##### What is the difference between a method and a function in javascript? - +### What is the difference between a method and a function in javascript? A function is a piece of code that is called by name and function itself not associated with any object and not defined inside any object. It can be passed data to operate on (i.e. parameter) and can optionally return data (the return value). -``` javascript -// Function definition -function myFunc(){ - // Do some stuff; +```javascript +// Function definition +function myFunc() { + // Do some stuff; } -// Calling function +// Calling function myFunc(); ``` @@ -752,203 +788,192 @@ Here myFunc() function call is not associated with object hence not invoked thro A function can be self-invoking anonymous function or named self-invoking function -``` javascript +```javascript // Named Self-invoking Function -(function myFunc(){ - // Do some stuff; +(function myFunc() { + // Do some stuff; })(); // Anonymous Self-invoking Function -(function(){ - // Do some stuff; +(function() { + // Do some stuff; })(); ``` -In case of named self-invoking anonymous function or anonymous self-invoking function there is no need of call function explicitly. - - A method is a piece of code that is called by name and that is associated with object. In most respects it is identical to function call except for some key difference: +In a case of named self-invoking anonymous function or anonymous self-invoking function, there is no need of call function explicitly. -* It is implicitly passed for the object for which it was called. -* It is able to operate on data that is contained within the class ( remembering that an object is an instance of a class- the class is the definition, the object is an instance of that) -* Method call is always associated with object +A method is a piece of code that is called by name and that is associated with the object. In most respects it is identical to function call except for some key difference: +- It is implicitly passed for the object for which it was called. +- It is able to operate on data that is contained within the class (remembering that an object is an instance of a class- the class is the definition, the object is an instance of that) +- Method call is always associated with object -``` javascript +```javascript var methodObject = { - attribute : "xyz", - display : function () { // Method - console.log(this.attribute); - } + attribute: "xyz", + display: function () { // Method + console.log(this.attribute); + } }; -// Call method +// Call method methodObject.display(); ``` -Here methodObject is an object and display is method which is associated with methodObject. +Here methodObject is an object and display is a method which is associated with methodObject. ## Question 26 -##### What is JavaScript Self-Invoking anonymous function or Self-Executing anonymous function. +### What is JavaScript Self-Invoking anonymous function or Self-Executing anonymous function. +A `self-invoking` anonymous function also called `self-executing anonymous function` runs immediately or automatically when we define it and self-invoking anonymous function doesn't have any name at all. Self-Invoking anonymous function syntax: -A `self-invoking` anonymous function also called `self-executing anonymous function` runs immediately or automatically when we define it and self-invoking anonymous function doesn't have any name at all. -Self-Invoking anonymous function syntax: - -``` javascript -(function(){ - console.log("Self-Invoking function code logic "); +```javascript +(function() { + console.log("Self-Invoking function code logic "); })(); Output: Self-Invoking function code logic ``` + We must have to know the fact that JavaScript functions run immediately when we put `()` after their names. -``` javascript -function display(){ - console.log("Display me"); +```javascript +function display() { + console.log("Display me"); } display(); // This will run immediately Output: "Display me" -/* -This will not run immediately as we haven't put () after function -name, only function name is use full when we want to pass it as +/* +This will not run immediately as we haven't put () after function +name, function name is use full when we want to pass it as callback to another function or method. */ -display; +display; -function testCallBack(callback){ - callback (); // This will be call display method immediately - if callback parameter is being set method display +function testCallBack(callback) { + callback (); // This will be call display method immediately if callback parameter is being set method display } -testCallBack(display); // Here display function is being passed as callback +testCallBack(display); // Here display function is being passed as callback ``` + ## Question 27 -##### Describe Singleton Pattern In JavaScript ? +### Describe Singleton Pattern In JavaScript? +The singleton pattern is the most commonly used design pattern and one that you will probably is more than any others. It provides a great way to wrap the code into a logical unit that can be accessed through a single variable. The Singleton design pattern is used when only one instance of an object is needed throughout the lifetime of an application. -The singleton pattern is the most commonly used design pattern and one that you will probably is more than any others. It provides a great way to wrap code into logical unit that can be accessed through a single variable. -The Singleton design pattern is used when only one instance of object is needed throughout the lifetime of an application. - -In JavaScript there is different way to achieve singleton object than any other object oriented supported language (Java, C++). In JavaScript Singleton pattern have many uses, they can be used for NameSpacing, which reduce the number of global variables in your page (Prevent from polluting global space), Organising code in a consistent manner, which increase the readability and maintainability of your pages. -There are two important point in the traditional definition of Singleton pattern: -* There should be only one instance allowed for a class and -* We should allow global point of access to that single instance -Let me define singleton pattern in JavaScript context: +In JavaScript there is a different way to achieve singleton object than any other object oriented supported language (Java, C++). In JavaScript Singleton pattern have many uses, they can be used for NameSpacing, which reduce the number of global variables in your page (Prevent from polluting global space), Organising code in a consistent manner, which increase the readability and maintainability of your pages. There are two important points in the traditional definition of Singleton pattern: +- There should be only one instance allowed for a class and +- We should allow global point of access to that single instance +- Let me define singleton pattern in JavaScript context: ->It is an object that is used to create namespace and group together a related set of methods and attributes (encapsulation) and if we allow to instantiate than it can be instantiate only once. +> It is an object that is used to create namespace and group together a related set of methods and attributes (encapsulation) and if we allow to instantiate than it can be instantiate only once. + +In JavaScript we can create singleton though object literal, However there are some another way but that I will cover in next post. -In JavaScript we can create singleton though object literal, However there are some another way but that I will cover in next post. - A singleton object consists of two parts: The object itself, containing the members (Both methods and attributes) within it, and global variable used to access it. The variable is global so that object can be accessed anywhere in the page, this is key feature of the singleton pattern. **JavaScript: A Singleton as a Namespace** -As I have already stated above that singleton can be used to declare Namespace in JavaScript. NameSpacing is a large part of responsible programming in JavaScript. Because everything can be overwritten, and it is very easy to wipe out variable by mistake or a function, or even a class without even knowing it. -A common example which happen frequently when you are working with another team member parallel, +As I have already stated above that singleton can be used to declare Namespace in JavaScript. NameSpacing is a large part of responsible programming in JavaScript. Because everything can be overwritten, and it is very easy to wipe out variable by mistake or a function, or even a class without even knowing it. A common example which happen frequently when you are working with another team member parallel, ```javascript -function findUserName(id){ - +function findUserName(id) { + } -/* Later in the page another programmer +/* Later in the page another programmer added code */ var findUserName = $('#user_list'); /* You are trying to call :( */ console.log(findUserName()) ``` + One of the best way to prevent accidentally overwriting variable is to namespace your code within a singleton object. ```javascript /* Using Namespace */ var MyNameSpace = { - - findUserName : function(id){ - - }, - // Other methods and attribute go here as well + findUserName : function(id) {}, + // Other methods and attribute go here as well } -/* Later in the page another programmer +/* Later in the page another programmer added code */ var findUserName = $('#user_list'); /* You are trying to call and you make this time workable */ console.log(MyNameSpace.findUserName()); ``` -#####Singleton Design Pattern Implementation + +### Singleton Design Pattern Implementation ```javascript /* Lazy Instantiation skeleton for a singleton pattern */ var MyNameSpace = {}; -MyNameSpace.Singleton = (function(){ +MyNameSpace.Singleton = (function() { // Private attribute that holds the single instance var singletonInstance; - - // All of the normal code goes here - function constructor(){ - // Private members - var privateVar1 = "Nishant"; - var privateVar2 = [1,2,3,4,5]; - - function privateMethod1(){ - // code stuff - } - - function privateMethod1(){ - // code stuff - } - - return { - attribute1 : "Nishant", - publicMethod: function(){ - alert("Nishant");// some code logic - } - } + + // All of the normal code goes here + function constructor() { + // Private members + var privateVar1 = "Nishant"; + var privateVar2 = [1,2,3,4,5]; + + function privateMethod1() { + // code stuff + } + + function privateMethod1() { + // code stuff + } + + return { + attribute1 : "Nishant", + publicMethod: function() { + alert("Nishant");// some code logic } - - return { - // public method ( Global access point to Singleton object) - getInstance: function(){ - //instance already exist then return - if(!singletonInstance){ - singletonInstance = constructor(); - } - return singletonInstance; - } + } + } + + return { + // public method (Global access point to Singleton object) + getInstance: function() { + //instance already exist then return + if(!singletonInstance) { + singletonInstance = constructor(); } + return singletonInstance; + } } + })(); -// getting access of publicMethod +// getting access of publicMethod console.log(MyNamespace.Singleton.getInstance().publicMethod()); ``` The singleton implemented above is easy to understand. The singleton class maintains a static reference to the lone singleton instance and return that reference from the static getInstance() method. ## Question 28 -##### What are the way by which we can create object in JavaScript ? - +### What are the way by which we can create an object in JavaScript? **Method 1:** `Function Based` -If we want to create several similar `objects`. In below code sample, `Employee` which is called *constructor function*. This is similar to classes in object oriented languages. +If we want to create several similar `objects`. In below code sample, `Employee` which is called _constructor function_. This is similar to classes in object oriented languages. ```javascript +function Employee(fName, lName, age, salary) { + this.firstName = fName; + this.lastName = lName; + this.age = age; + this.salary = salary; +} - function Employee(fName, lName, age, salary){ - this.firstName = fName; - this.lastName = lName; - this.age = age; - this.salary = salary; - } - - // Creating multiple object which have similar property but diff value assigned to object property. - var employee1 = new Employee('John', 'Moto', 24, '5000$'); - var employee1 = new Employee('Ryan', 'Jor', 26, '3000$'); - var employee1 = new Employee('Andre', 'Salt', 26, '4000$'); +// Creating multiple object which have similar property but diff value assigned to object property. +var employee1 = new Employee('John', 'Moto', 24, '5000$'); +var employee1 = new Employee('Ryan', 'Jor', 26, '3000$'); +var employee1 = new Employee('Andre', 'Salt', 26, '4000$'); ``` -**Method 2:** `Object Constructor` - - +**Method 2:** `Object Constructor` From 02decd8b205ea7a727f7e99d8369ae4598883611 Mon Sep 17 00:00:00 2001 From: Tian Permana Date: Wed, 2 Dec 2015 17:21:20 +0700 Subject: [PATCH 007/141] more typo fixing, grammar and codes --- README.md | 76 +++++++++++++++++++++++++++---------------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index f3869c4..f6babe1 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,15 @@ # 101-JavaScript-Interview-Question ## 1. Difference between `undefined` and `not defined` in JavaScript -> In JavaScript if you try to use a variable that doesn't exist and has not been declared, then JavaScript will throw an error `var name is not defined` and script will stop execution thereafter. But If you use `typeof undeclared_variable` then it will return `undefined`. +> In JavaScript if you try to use a variable that doesn't exist and has not been declared, then JavaScript will throw an error `var name is not defined` and the script will stop execute thereafter. But If you use `typeof undeclared_variable` then it will return `undefined`. Before starting further discussion let understand the difference between declaration and definition. `var x` is a declaration because you are not defining what value it holds yet, but you are declaring its existence and the need of memory allocation. ```javascript -> var x; // declaring x -> console.log(x); //output: undefined +var x; // declaring x +console.log(x); //output: undefined ``` `var x = 1` is both declaration and definition (also we can say we are doing initialisation), Here declaration and assignment of value happen inline for variable x, In JavaScript every variable declaration and function declaration brings to the top of its current scope in which it's declared then assignment happen in order this term is called `hoisting`. @@ -25,7 +25,7 @@ if(typeof x === 'undefined') // Will return true > A variable that neither declared nor defined when we try to reference such variable then It result `not defined`. ```javascript -> console.log(y); // Output: ReferenceError: y is not defined +console.log(y); // Output: ReferenceError: y is not defined ``` ### Ref Link: @@ -63,7 +63,7 @@ if (1) { console.log(k); // output 1function ``` -## 3. What is drawback of creating true private in JavaScript? +## 3. What is the drawback of creating true private in JavaScript? > One of the drawback of creating a true private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. ```javascript @@ -121,8 +121,8 @@ var globalVar = "abc"; "innerArg = " + innerArg + "\n" + "innerFuncVar = " + innerFuncVar + "\n" + "globalVar = " + globalVar); - }// end of scope innerFunction)(5); // Pass 5 as parameter -}// end of scope outerFunction )(7); // Pass 7 as parameter + } // end of scope innerFunction)(5); // Pass 5 as parameter +} // end of scope outerFunction )(7); // Pass 7 as parameter ``` `innerFunction` is closure which is defined inside `outerFunction` and has access to all variable which is declared and defined in outerFunction scope. In addition to this function defined inside function as closure has access to variable which is declared in `global namespace`. @@ -166,7 +166,7 @@ In Javascript function defined inside has access to outer function variable and - Function can be returned from function ### 6. How to empty an array in JavaScript? -For instance, +For instance: ```javascript var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; @@ -184,7 +184,7 @@ arrayList = []; Above code will set the variable `arrayList` to a new empty array. This is recommended if you don't have **references to the original array** `arrayList` anywhere else because It will actually create a new empty array. You should be careful with this way of empty the array, because if you have referenced this array from another variable, then the original reference array will remain unchanged, Only use this way if you have only referenced the array by its original variable `arrayList`. -For Instance, +For Instance: ```javascript var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; // Created array @@ -201,7 +201,7 @@ arrayList.length = 0; Above code will clear the existing array by setting its length to 0. This way of empty the array also update all the reference variable which pointing to the original array. This way of empty the array is useful when you want to update all the another reference variable which pointing to `arrayList`. -For Instance, +For Instance: ```javascript var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; // Created array @@ -216,7 +216,7 @@ console.log(anotherArrayList); // Output [] arrayList.splice(0, arrayList.length); ``` -Above implementation will also work perfectly. This way of empty the array will also update all the references of original array. +Above implementation will also work perfectly. This way of empty the array will also update all the references of the original array. ```javascript var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; // Created array @@ -254,19 +254,19 @@ function greet(param) { } ``` -However in above implementation it might not necessary to check type for array, we can check for single value string and put array logic code in else block, let see below code for the same. +However, in above implementation it might not necessary to check type for array, we can check for single value string and put array logic code in else block, let see below code for the same. ```javascript function greet(param) { - if(typeof param === 'string') { - } - else { - // If param is of type array then this block of code would execute - } + if(typeof param === 'string') { + } + else { + // If param is of type array then this block of code would execute + } } ``` -Now it's fine we can go with above two implementations, but when we have a situation like parameter can be `single value`, `array`, and `object` type then we will be in trouble. +Now it's fine we can go with above two implementations, but when we have a situation like a parameter can be `single value`, `array`, and `object` type then we will be in trouble. Coming back to checking type of object, As we mentioned that we can use `Object.prototype.toString` @@ -286,9 +286,9 @@ if($.isArray(arrayList)) { } ``` -FYI jQuery uses `Object.prototype.toString.call` internally to check whether object is an array or not. +FYI jQuery uses `Object.prototype.toString.call` internally to check whether an object is an array or not. -In Modern browser you can also use +In modern browser, you can also use: ```javascript Array.isArray(arrayList); @@ -350,7 +350,7 @@ console.log(emp1.company); > Above code will output `xyz` as output. Here `emp1` object got company as **prototype** property. delete operator doesn't delete prototype property. -`emp1` object doesn't have **company** as its own property. you can test it `console.log(emp1.hasOwnProperty('company')); //output : false` However we can delete company property directly from `Employee` object using `delete Employee.company` or we can also delete from `emp1` object using `__proto__` property `delete emp1.__proto__.company`. +`emp1` object doesn't have **company** as its own property. you can test it `console.log(emp1.hasOwnProperty('company')); //output : false` However, we can delete company property directly from `Employee` object using `delete Employee.company` or we can also delete from `emp1` object using `__proto__` property `delete emp1.__proto__.company`. #### 12. What is `undefined x 1` in JavaScript @@ -359,9 +359,9 @@ var trees = ["redwood", "bay", "cedar", "oak", "maple"]; delete trees[3]; ``` -when you run above code and do `console.log(trees);` in chrome developer console then you will get `["redwood", "bay", "cedar", undefined × 1, "maple"]` and when you run above code in Firefox browser console then you will get `["redwood", "bay", "cedar", undefined, "maple"]` so from these it's cleared that chrome has its own way of displaying uninitialised index in array. But when you check `trees[3] === undefined` in both of the browser you will get similar output as `true`. +when you run above code and do `console.log(trees);` in chrome developer console then you will get `["redwood", "bay", "cedar", undefined × 1, "maple"]` and when you run above code in Firefox browser console then you will get `["redwood", "bay", "cedar", undefined, "maple"]` so from these it's cleared that chrome has its own way of displaying uninitialized index in array. But when you check `trees[3] === undefined` in both of the browser you will get similar output as `true`. -**Note:** Please remember you need not check for uninitialised index of array in `trees[3] === 'undefined × 1'` it will give error, Because `'undefined × 1'` this is just way of displaying uninitialised index of array in chrome. +**Note:** Please remember you need not check for uninitialized index of array in `trees[3] === 'undefined × 1'` it will give error, Because `'undefined × 1'` this is just way of displaying uninitialized index of array in chrome. #### 13. What will be the output of below code? @@ -391,7 +391,7 @@ console.log(bar + false); - Boolean + Number -> Addition - Number + String -> Concatenation - String + Boolean -> Concatenation - - String + String -> Concatenation + - String + String -> Concatenation #### 15. What will be the output of below code? @@ -428,7 +428,7 @@ function bar() { return 12; }; typeof bar(); ``` -function definition can have only one reference variable as a function name, In above code **sample 1** bar is reference variable which is pointing to `anonymous function` and in **sample 2** function definition is name function. +The function definition can have only one reference variable as a function name, In above code **sample 1** bar is reference variable which is pointing to `anonymous function` and in **sample 2** function definition is name function. ```javascript var foo = function bar() { @@ -457,7 +457,7 @@ function bar() { The main difference is function `foo` is defined at `run-time` whereas function `bar` is defined at parse time. For understanding It in better way let see below code : ```javascript -Run-Time function declaration +// Run-Time function declaration ``` -But If you try to run similar code in below format It would give error +But If you try to run similar code in the following format, it would give an error ```javascript ``` @@ -548,14 +548,14 @@ But If you try to run similar code in the following format, it would give an err ```javascript ``` From c0e08a7ae86ea4c99354c83e6621ec8116ba923e Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Wed, 20 Jul 2016 11:21:39 +0530 Subject: [PATCH 029/141] Added More Questions --- README.md | 403 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 403 insertions(+) diff --git a/README.md b/README.md index 96ed3ac..fd68472 100644 --- a/README.md +++ b/README.md @@ -1246,6 +1246,409 @@ console.log(person.hasOwnProperty('name')); // print true console.log(person.hasOwnProperty('salary')); // print false ``` +## Question 34 +##### Best way to detect `undefined` object property in JavaScript. + +> Suppose we have given an object `person` + +```javascript +var person = { + name: 'Nishant', + age : 24 +} +``` +here `person` object has `name` and `age` property. Now we are trying to access **salary** property which we haven't declared on person object so while accessing it will return undefined. So how we will ensure whether property is undefined or not before performing some operation over it. + +**Explanation:** + +We can use `typeof` operator to check undefined + +```javascript +if(typeof someProperty === 'undefined'){ + console.log('something is undefined here'); +} +``` +Now we are trying to access salary property of person object. + +```javascript +if(typeof person.salary === 'undefined'){ + console.log("salary is undefined here because we haven't declared"); +} +``` +## Question 35 +##### How to check whether a key exist in a JavaScript object or not. + +>Let say we have `person` object with property **name** and **age** + +```javascript +var person = { + name: 'Nishant', + age: 24 +} +``` +Now we want to check whether `name` property exist in `person` object or not ? + +In JavaScript object can have own property, in above example name and age is own property of person object. Object also have some of inherited property of base object like toString is inherited property of person object. + +So how we will check whether property is own property or inherited property. + +Method 1: We can use `in` operator on objet to check own property or inherited property. + +```javascript +console.log('name' in person); // checking own property print true +console.log('salary' in person); // checking undefined property print false +``` +`in` operator also look into inherited property if it doesn't find property defined as own property. For instance If I check existence of toString property as we know that we haven't declared this property on person object so `in` operator look into there base property. + +Here + +```javascript +console.log('toString' in person); // Will print true +``` +If we want to test property of object instance not inherited properties then we will use `hasOwnProperty` method of object instance. + +```javascript +console.log(person.hasOwnProperty('toString')); // print false +console.log(person.hasOwnProperty('name')); // print true +console.log(person.hasOwnProperty('salary')); // print false +``` + +## Question 36 +##### What is best way to detect an arrays object on JavaScript ? + +>We always encounter in such situation where we need to know whether value is type of array or not. + +For Instance : Below code perform some operation based value type + +```javascript +function(value){ + if("value is an array"){ + // Then perform some operation + }else{ + // otherwise + } +} +``` + +Let's discuss some way to detect an array in JavaScript. + +**Method 1 :** + +Duck typing test for array type detection + +```javascript + // Duck typing arrays + function isArray(value){ + return typeof value.sort === 'function'; + } +``` +As we can see above isArray method will return true if value object have `sort` method of type `function`. Now assume you have created a object with sort method + +```javascript + var bar = { + sort: function(){ + // Some code + } + } +``` +Now when you check `isArray(bar)` then it will return true because bar object has sort method, But the fact is bar is not an array. + +So method 1 is not a best way to detect an array as you can see it's not handle the case when some object has sort method. + +**Method 2:** + +Juriy Zaytsev (Also known as kangax) proposed an elegant solution to this. + +```javascript + function isArray(value){ + return Object.prototype.toString.call(value) === '[object Array]'; + } +``` +This approach is most popular way to detecting a value of type array in JavaScript and recommended to use. This approach relies on the fact that, native toString() method on a given value produce a standard string in all browser. + +>ECMAScript 5 has introduced **Array.isArray()** method to detect an array type value. The sole purpose of this method is accurately detecting whether a value is an array or not. + +In many JavaScript libraries you may see below code for detecting an value of type array. + +```javascript +function(value){ + // ECMAScript 5 feature + if(typeof Array.isArray === 'function'){ + return Array.isArray(value); + }else{ + return Object.prototype.toString.call(value) === '[object Array]'; + } +} +``` + +## Question 37 +##### Best way to detect reference values of any type in JavaScript ? + +> In Javascript Object are called as reference type, Any value other then primitive is definitely a reference type. There are several built-in reference type such as **Object**, **Array**, **Function**, **Date**, **null** and **Error**. + +Detecting object using `typeof` operator + +```javascript +console.log(typeof {}); // object +console.log(typeof []); // object +console.log(typeof new Array()); // object +console.log(typeof null); // object +console.log(typeof new RegExp()); // object +console.log(typeof new Date()); // object +``` +But the downside of using typeof operator to detect an object is that typeof returns `object` for `null` (However this is fact that null is an object in JavaScript). + +The best way to detect an object of specific reference type using `instanceof` operator. + +>Syntax : **value** instanceof **constructor** + +```javascript +//Detecting an array +if(value instanceof Array){ + console.log("value is type of array"); +} +``` +```javascript +// Employee constructor function +function Employee(name){ + this.name = name; // Public property +} + +var emp1 = new Employee('John'); + +console.log(emp1 instanceof Employee); // true +``` +`instanceof` not only check the constructor which is used to create an object but also check it's prototype chain see below example. + +```javascript +console.log(emp1 instanceof Object); // true +``` + +## Question 38 +##### Describe Object-Based inheritance in JavaScript. + +> Object-based inheritance also called prototypal inheritance in which we one object inherit from another object without invoking a constructor function. + +The ECMAScript 5 **Object.create()** method is the easiest way for one object to inherit from another. + +**For Instance:** + +```javascript +var employee = { + name: 'Nishant', + displayName: function () { + console.log(this.name); + } +}; + +var emp1 = Object.create(employee); +console.log(emp1.displayName()); // output "Nishant" +``` + +Above example create a new object `emp1` that inherits from `employee`. Here the inheritance occur as emp1's prototype is set to employee. After this emp1 is able to access the same properties and method on employee until new properties or method with the same name are defined. + +**For Instance:** Defining displayName() method on emp1 automatically override the employee displayName. + +```javascript +emp1.displayName = function() { + console.log('xyz-Anonymous'); +}; + +employee.displayName();// "xyz-Anonymous" +emp1.displayName(); // "Nishant" +``` + +In addition to this **Object.create()** method also allows to specify a second argument which is an object containing additional properties and methods to add to the new object. + +**For Example** + +```javascript +var emp1 = Object.create(employee, { + name: { + value: "John" + } +}); + +emp1.displayName(); // "John" +employee.displayName(); // "Nishant" +``` +In above example, emp1 is created with it's own value for name, so calling **displayName()** method display `"John"` instead of `"Nishant"`. + +>Object created in this manner give you full control over newly created object. You are free to add, remove any properties and method you want. + +## Question 39 +##### Describe Type-Based inheritance in JavaScript. + +>Type-based inheritance works with constructor function instead of object, It means we need to call constructor function of the object from which you want to inherit. + +Let say we have `Person` class which has name, age, salary properties and **incrementSalary()** method. + +```javascript +function Person(name, age, salary) { + this.name = name; + this.age = age; + this.salary = salary; + this.incrementSalary = function (byValue) { + this.salary = this.salary + byValue; + }; +} +``` + +Now we wish to create Employee class which contains all the properties of Person class and wanted to add some additional properties into Employee class. + +```javascript +function Employee(company){ + this.company = company; +} + +//Prototypal Inheritance +Employee.prototype = new Person("Nishant", 24,5000); +``` +In above example, **Employee** type inherits from **Person**, which is called super types. It does so by assigning a new instance of Person to Employee prototype. After that, every instance of Employee inherits it's properties and methods from Person. + +```javascript +//Prototypal Inheritance +Employee.prototype = new Person("Nishant", 24,5000); + +var emp1 = new Employee("Google"); + +console.log(emp1 instanceof Person); // true +console.log(emp1 instanceof Employee); // true +``` + +Let's understand Constructor inheritance + +```javascript +//Defined Person class +function Person(name){ + this.name = name || "Nishant"; +} + +var obj = {}; + +// obj inherit Person class properties and method +Person.call(obj); // constructor inheritance + +console.log(obj); // Object {name: "Nishant"} +``` +Here we saw calling **Person.call(obj)** define the name properties from `Person` to `obj`. + +```javascript +console.log(name in obj); // true +``` +Type-based inheritance is best used with developer defined constructor function rather than natively in JavaScript. In addition to this also allows flexibility in how we create similar type of object. + +## Question 40 +##### How we can prevent modification of object in JavaScript ?. + +> ECMAScript 5 introduce several methods to prevent modification of object which lock down object to ensure that no one, accidentally or otherwise, change functionality of Object. + +There are three levels of preventing modification: + +**1: Prevent extensions :** + +No new properties or methods can be added to the object, but one can change the existing properties and method. + +For Example: + +```javascript +var employee = { + name: "Nishant" +}; + +// lock the object +Object.preventExtensions(employee); + +// Now try to change the employee object property name +employee.name = "John"; // work fine + +//Now try to add some new property to the object +employee.age = 24; // fails silently unless it's inside the strict mode +``` +**2: Seal :** + +>It is same as prevent extension, in addition to this also prevent existing properties and methods from being deleted. + +To seal an object, we use **Object.seal()** method. you can check whether an object is sealed or not using **Object.isSealed();** + +```javascript +var employee = { + name: "Nishant" +}; + +// Seal the object +Object.seal(employee); + +console.log(Object.isExtensible(employee)); // false +console.log(Object.isSealed(employee)); // true + +delete employee.name // fails silently unless it's in strict mode + +// Trying to add new property will give an error +employee.age = 30; // fails silently unless in strict mode +``` + +when an object is sealed, its existing properties and methods can't be removed. Sealed object are also non-extensible. + +**3: Freeze :** + +>Same as seal, In addition to this prevent existing properties methods from being modified (All properties and methods are read only). + +To freeze an object, use Object.freeze() method. We can also determine whether an object is frozen using Object.isFrozen(); + +```javascript +var employee = { + name: "Nishant" +}; + +//Freeze the object +Object.freeze(employee); + +// Seal the object +Object.seal(employee); + +console.log(Object.isExtensible(employee)); // false +console.log(Object.isSealed(employee)); // true +console.log(Object.isFrozen(employee)); // true + + +employee.name = "xyz"; // fails silently unless in strict mode +employee.age = 30; // fails silently unless in strict mode +delete employee.name // fails silently unless it's in strict mode +``` + +Frozen objects are considered both non-extensible and sealed. + +**Recommended:** + +If you are decided to prevent modification, sealed, freeze the object then use in strict mode so that you can catch the error. + +For Example: + +```javascript +"use strict"; + +var employee = { + name: "Nishant" +}; + +//Freeze the object +Object.freeze(employee); + +// Seal the object +Object.seal(employee); + +console.log(Object.isExtensible(employee)); // false +console.log(Object.isSealed(employee)); // true +console.log(Object.isFrozen(employee)); // true + + +employee.name = "xyz"; // fails silently unless in strict mode +employee.age = 30; // fails silently unless in strict mode +delete employee.name; // fails silently unless it's in strict mode +``` + + #Objective Question ## Hoisting From 1564ccd0d41dcd78bc6401dffb132e19864d1d06 Mon Sep 17 00:00:00 2001 From: ironmaniiith Date: Fri, 11 Nov 2016 09:04:40 +0530 Subject: [PATCH 030/141] Minor typos fix --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fd68472..d5f08f3 100644 --- a/README.md +++ b/README.md @@ -86,13 +86,13 @@ var Employee = function (name, company, salary) { this.salary = salary || 5000; //Public attribute default value is null // Private method - var increaseSlary = function () { + var increaseSalary = function () { this.salary = this.salary + 1000; }; // Public method this.dispalyIncreasedSalary = function() { - increaseSlary(); + increaseSalary(); console.log(this.salary); }; }; From bac96cf43b28d205bfdc4ad401baae75e177a589 Mon Sep 17 00:00:00 2001 From: ironmaniiith Date: Fri, 11 Nov 2016 17:02:47 +0530 Subject: [PATCH 031/141] Corrected minor mistake in section 4 removing the actual code out of comments --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fd68472..7512c15 100644 --- a/README.md +++ b/README.md @@ -137,8 +137,10 @@ var globalVar = "abc"; "innerArg = " + innerArg + "\n" + "innerFuncVar = " + innerFuncVar + "\n" + "globalVar = " + globalVar); - } // end of scope innerFunction)(5); // Pass 5 as parameter -} // end of scope outerFunction )(7); // Pass 7 as parameter + // end of scope innerFunction + })(5); // Pass 5 as parameter +// end of scope outerFunction +})(7); // Pass 7 as parameter ``` `innerFunction` is closure which is defined inside `outerFunction` and has access to all variable which is declared and defined in outerFunction scope. In addition to this function defined inside function as closure has access to variable which is declared in `global namespace`. From 8cb5e8af74d7875d31347cbf7dbd3bfd0f03a840 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Fri, 5 May 2017 10:17:42 +0530 Subject: [PATCH 032/141] Update Nishant_resume.js --- Nishant_resume.js | 96 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 77 insertions(+), 19 deletions(-) diff --git a/Nishant_resume.js b/Nishant_resume.js index 50d65cc..113a5e5 100644 --- a/Nishant_resume.js +++ b/Nishant_resume.js @@ -1,8 +1,17 @@ /** * The Curriculum vitae of Nishant Kumar * - * Hi there, I am Nishant. I am UI Engineering Lead, JavaScript Engineer, - * Mozila Tech Contributor, CodeMentor Front-end Expert, Writer from India. + * Hi there, I am Nishant. I am Software Architect @GetMyParking, + * Mozila Tech Contributor, Teacher at CodeInstitute (Dublin), CodeMentor Front-end Expert, + * JavaScript Interview Question Author from India. + * + * I love to pair program and ship quality code that's solidly tested. + * Skills that I'm proficient in and continue to learn with: Object Oriented JavaScript, + * JavaScript Design Pattern, MVC, Client Side Performance Optimization, Node.js, Angular.js, + * Backbone.js, Vue.js, HTML5 and Tools: Git jasmine Test Framework, Grunt, webpack, bower, yoman. + * + * Domain: Cloud Computing, Distributed Systems, Big Data, SOA, Data mining, Hadoop, NoSQL and Graph Database. + * */ (function() { @@ -11,29 +20,76 @@ /* About Me */ - var me = { + const me = { name: 'Nishant Kumar', - job: 'UI Engineering Lead', - organization: 'Big Parser', - status: 'Not availble for Hire full time', - location: 'India', - experience: '5 years', + job: 'Software Architect', + organization: 'GetMyParking', + status: 'Not availble for hire', + location: 'Noida, India', + experience: '5+ years', skills: { - 'scripting-language' :['javascript'] - 'frameworks': ['angular.js','backbone.js','sails.js'], + 'scripting-language' :['JavaScript','ECMAScript 6'] + 'frameworks': ['angular.js','React','Vue','Vuex','backbone.js','IONIC','sails.js'], 'library' : ['jQuery'] - 'tools': ['Gulp', 'Grunt', 'bower','yoman','Git'], - 'testing': ['jasmine', 'protractor'], - 'backend': ['node.js', 'express.js'], + 'tools': ['Webpack','Gulp', 'Grunt', 'bower','yoman','Git'], + 'testing': ['Jasmine', 'Protractor'], + 'backend': ['Node.js', 'Express.js','Python'], 'dataBase': ['mongoDb', 'SQL'], 'uncategorized' : ['C','C#','HTML','CSS', 'HTML5','JSON'] - } + }, + work_experience:[{ + 'company' : 'GetMyParking', + 'position': 'Software Architect', + 'duration': 'Jan 2017 - April 2017', + 'location': 'New Delhi', + 'job_type': 'Contract', + 'responsibility': { + "1": 'Responsible for designing and implementing development infrastructure', + "2": 'Manage risk identification and risk mitigation strategies associated with the architecture', + "3": 'Plan for new technology insertion', + "4": 'Make sure the right modeling is being done, to know that qualities like performance are going to be met', + "5": 'Commitment to following dev "best practices", with code-reviews, unit tests, etc.', + "6": 'Migrating monolithic base code to microservice based architecture to support million transaction per day', + "7": 'Creating and ensuring best practices properly followed for Node JS, and React JS based app.' + },{ + 'company' : 'Engineering Lead', + 'position' : 'BigParser.com', + 'duration' : 'Aug 2014 - Dec 2016', + 'location' : 'Pilani, New Delhi', + 'job_type': 'Contract, Hourly,Remotely', + 'responsibility': { + "1": 'Understanding Product Feature and Functionality Requirements of the Platform', + "2": 'Working with the Design and Architecture teams on design and framework issues.', + "3": 'Working interactions on all platforms including mobile devices', + "4": 'Developing client side MVC frameworks and Creating UI Libraries and using Angular/React JS', + "5": 'Optimize Performance through improved design', + "6": 'Working with the Back End teams on Server side integration of the Platform.', + "7": 'Providing Level 2 and Level 3, support of the UI and Partner Products in Testing, Stage and Client facing Production Environments.', + "8": 'Vertical Specific Customization of Cloud Platform including interfaces to Gmail, Dropbox, Box.Net' + },{ + 'company' : 'Sr. Software Engineering', + 'position' : 'Mindfire Solutions', + 'duration' : 'June 2011 - July 2014', + 'location' : 'Bhubaneswar, New Delhi', + 'job_type': 'Full Time', + 'responsibility': { + "1": 'Analyzed the business requirement with the project manager for different clients', + "2": 'Developed the Technical and functional specifications.', + "3": 'Developed the web based solutions and windows based solutions for various clients.', + "4": 'Perform monthly performance review of the application ', + "5": 'Developed a custom GUI for the ease of users', + "6": 'Developed discussion forum for internal use of knowledge flow within the organization.', + "7": 'Providing Level 2 and Level 3, support of the UI and Partner Products in Testing, Stage and Client facing Production Environments.', + "8": 'Trained the intern coming from various collages' + } + }], + 'notes': 'For project details & more work exp details please refer my linkedIn profile.' }; /* Contact Details */ - var me_contact = { + const me_contact = { 'email' : 'nihantanu@gmail.com', 'skypeId' : 'mfsi_nishantk', 'linkedIn' :'http://in.linkedin.com/in/nishantkumar1' @@ -45,18 +101,20 @@ /* Education */ - var education = { + const education = { 'post-Graduate': { 'college': 'Birla Institute of Technology and Science, Pilani', 'Major' : 'Software System', - 'Year' :'2016' + 'Year' :'2014-2016', + 'type': 'Regular, Pilani Campus' }, 'graduation' : { 'college': 'ICFAI University, Dehradun', 'Major' : 'Computer Science & Engineering', - 'Year' :'2011' + 'Year' :'2007-2011', + 'type': 'Regular' } - } + }, /** * Nice things people have said about me. From e11dded2d1b227a8cb04058d4c59dc828677a4f3 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Fri, 5 May 2017 10:19:20 +0530 Subject: [PATCH 033/141] Update Nishant_resume.js --- Nishant_resume.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Nishant_resume.js b/Nishant_resume.js index 113a5e5..fdabaa4 100644 --- a/Nishant_resume.js +++ b/Nishant_resume.js @@ -34,7 +34,7 @@ 'tools': ['Webpack','Gulp', 'Grunt', 'bower','yoman','Git'], 'testing': ['Jasmine', 'Protractor'], 'backend': ['Node.js', 'Express.js','Python'], - 'dataBase': ['mongoDb', 'SQL'], + 'dataBase': ['mongoDb', 'MYSQL'], 'uncategorized' : ['C','C#','HTML','CSS', 'HTML5','JSON'] }, work_experience:[{ From 3651071b9adb81b9a75419bdcc02ed0742243cfb Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Mon, 15 May 2017 22:39:33 +0530 Subject: [PATCH 034/141] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3dde5de..f750866 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![](coverPage.png) -## This Book will be completed by June 1 2016 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](http://goo.gl/forms/QSpxVtvsNb). +## This Book will be completed by Aug 1 2017 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](http://goo.gl/forms/QSpxVtvsNb). [![Join the chat at https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question](https://badges.gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question.svg)](https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) @@ -2008,7 +2008,7 @@ Answer: 1) Nishant Person ## Have doubt in this question ?? [Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) -## This Book will be completed by June 1 2016 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](http://goo.gl/forms/QSpxVtvsNb). +## This Book will be completed by Aug 1 2017 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](http://goo.gl/forms/QSpxVtvsNb). ##Contributing From 7e6c41ce3dc7c1bd68454bf2ec436e5745e5f5fe Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Tue, 30 May 2017 21:03:58 +0530 Subject: [PATCH 035/141] Added Some more exciting questions --- README.md | 1424 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1377 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index f750866..d2f3b18 100644 --- a/README.md +++ b/README.md @@ -1651,6 +1651,319 @@ delete employee.name; // fails silently unless it's in strict mode ``` +## Question 44 +##### Write a log function which will add prefix `(your message)` to every message you log using console.log ? +> For example, If you log `console.log("Some message")` then output should be **(your message) Some message** + +Logging error message or some informative message is always required when you dealing with client side JavaScript using console.log method. Some time you want to add some prefix to identify message generated log from your application hence you would like to prefix your app name in every console.log. + +A general way to do this keep adding your app name in every console.log message like + +```javascript +console.log('your app name' + 'some error message'); +``` +But doing in this way you have to write your app name everytime when you log message using console. + +There are some best way we can achieve this + +```javascript +function appLog() { + var args = Array.prototype.slice.call(argument); + args.unshift('your app name'); + console.log.apply(console, args); +} + +console.log(appLog("Some error message")); +//output of above console: 'your app name Some error message' +``` + +## Question 45 +##### Write a function which will test string as a literal and as an object ? + +For example: We can create string using string literal and using String constructor function. + +```javascript + // using string literal + var ltrlStr = "Hi I am string literal"; + // using String constructor function + var objStr = new String("Hi I am string object"); +``` +> We can use typeof operator to test string literal and instanceof operator to test String object. + +```javascript + function isString(str) { + return typeof(str) == 'string' || str instanceof String; + } + + var ltrlStr = "Hi I am string literal"; + var objStr = new String("Hi I am string object"); + console.log(isString(ltrlStr)); // true + console.log(isString(objStr)); // true +``` +## Question 46 +##### What is typical use case for anonymous function in JavaScript ? + +> Anonymous functions basically used in following scenario. + +1. No name is needed if function is only used in one place, then there is no need to add a name to function. + + Let's take the example of setTimeout function + + ```javascript + setTimeout(function(){ + alert("Hello"); + },1000); + ``` + Here there is no need of using named function when we are sure that function which will alert `hello` would use only once in application. + +2. Anonymous functions are declared inline and inline functions have advantages in the case that they can access variable in the parent scopes. + + Let's take a example of event handler. Notify event of particular type (such as click) for a given object. + + Let say we have HTML element (button) on which we want to add click event and when user do click on button we would like to execute some logic. + + ```html + + ``` + Add Event Listener + + ```javascript + var btn = document.getElementById('myBtn'); + btn.addEventListener('click', function () { + alert('button clicked'); + }); + ``` + + Above example shows used of anonymous function as a callback function in event handler. + +3. Passing anonymous function as a parameter to calling function. + + Example: + + ```javascript + // Function which will execute callback function + function processCallback(callback){ + if(typeof callback === 'function'){ + callback(); + } + } + + // Call function and pass anonymous function as callback + processCallback(function(){ + alert("Hi I am anonymous callback function"); + }); + ``` +The best way to take decision for using anonymous function is to asked. + +> Will the function which I am going to define will use anywhere else. + +If your answer is yes then go and create named function rather anonymous function. + +**Advantage of using anonymous function:** + +1. It can reduce a bit of code, particularly in recursive function and in callback function. +2. Avoid needless global namespace pollutions. + +## Question 47 +##### How to set a default parameter value ? + +> If you are coming from python/c# you might be using default value for function parameter incase value(formal parameter) has not been passed. For Instance : + +```python +// Define sentEmail function +// configuration : Configuration object +// provider : Email Service provider, Default would be gmail +def sentEmail(configuration, provider = 'Gmail'): + # Your code logic +``` +**In Pre ES6/ES2015** + +There are a lot of ways by which you can achieve this in pre ES2015. + +Let's understand below code by which we achieved setting default parameter value. + +**Method 1: Setting default parameter value** + +```javascript +function sentEmail(configuration, provider) { + // Set default value if user has not passed value for provider + provider = typeof provider !== 'undefined' ? provider : 'Gmail' + // Your code logic +; +} +// In this call we are not passing provider parameter value +sentEmail({ + from: 'xyz@gmail.com', + subject: 'Test Email' +}); +// Here we are passing Yahoo Mail as a provider value +sentEmail({ + from: 'xyz@gmail.com', + subject: 'Test Email' +}, 'Yahoo Mail'); +``` + +**Method 2: Setting default parameter value** + +```javascript +function sentEmail(configuration, provider) { + // Set default value if user has not passed value for provider + provider = provider || 'Gmail' + // Your code logic +; +} +// In this call we are not passing provider parameter value +sentEmail({ + from: 'xyz@gmail.com', + subject: 'Test Email' +}); +// Here we are passing Yahoo Mail as a provider value +sentEmail({ + from: 'xyz@gmail.com', + subject: 'Test Email' +}, 'Yahoo Mail'); +``` + +## Question 48 +##### Write code for merge two JavaScript Object dynamically. +> Let say you have two object + +```javascript +var person = { + name : 'John', + age : 24 +} + +var location = { + addressLine1 : 'Some Location x', + addressLine2 : 'Some Location y', + city : 'NewYork' +} +``` +Write merge function which will take two object and add all the own property of second object into first object. + +```javascript +merge(person , location); + +/* Now person should have 5 properties +name , age , addressLine1 , addressLine2 , city */ +``` +**Method 1: Using ES6, Object assign method** + +```javascript +function merge(toObj,fromObj){ + return Object.assign(person,location); +} +``` + +**Method 2: Without using in-built function** + +```javascript +function merge(toObj, fromObj) { + // Make sure both of the parameter is an object + if (typeof toObj === 'object' && typeof fromObj === 'object') { + for (var pro in fromObj) { + // Assign only own properties not inherited properties + if (fromObj.hasOwnProperty(pro)) { + // Assign property and value + toObj[pro] = fromObj[pro]; + } + } + }else{ + throw "Merge function can apply only on object"; + } +} +``` +## Question 49 +##### What is non-enumerable property in JavaScript and how can create ? + +>Object can have properties that don't show up when you iterate through object using for...in loop or using Object.keys() to get an array of property names. This properties is know as non-enumerable properties. + +Let say we have following object + +```javascript +var person = { + name: 'John' +}; +person.salary = '10000$'; +person['country'] = 'USA'; + +console.log(Object.keys(person)); // ['name', 'salary', 'country'] +``` +As we know that person object properties `name`, `salary` ,`country` are enumerable hence it's shown up when we called Object.keys(person). + +To create a non-enumerable property we have to use **Object.defineProperty()**. This is a special method for creating non-enumerable property in JavaScript. + +```javascript +var person = { + name: 'John' +}; +person.salary = '10000$'; +person['country'] = 'USA'; + +// Create non-enumerable property +Object.defineProperty(person, 'phoneNo',{ + value : '8888888888', + enumerable: false +}) + +Object.keys(person); // ['name', 'salary', 'country'] +``` +In above example `phoneNo` property didn't show up because we made it non-enumerable by setting **enumerable:false** + +Now let's try to change value of `phoneNo` + +```javascript +person.phoneNo = '7777777777'; +``` +Changing non-enumerable property value will return error in `strict mode`. In non-strict mode it won't through any error but it won't change the value of phoneNo. + +**Bonus** + +**Object.defineProperty()** is also let you create read-only properties as we saw above, we are not able to modify phoneNo value of a person object. + +## Question 50 +##### What is Function binding ? + +> Function binding falls in advance JavaScript category and this is very popular technique to use in conjunction with event handler and callback function to preserve code execution context while passing function as a parameter. + +Let's consider the following example: + +```javascript +var clickHandler = { + message: 'click event handler', + handleClick: function(event) { + console.log(this.message); + } +}; + +var btn = document.getElementById('myBtn'); +// Add click event to btn +btn.addEventListener('click', clickHandler.handleClick); +``` + +Here in this example clickHandler object is created which contain message properties and handleClick method. + +We have assigned handleClick method to a DOM button, which will be executed in response of click. When the button is clicked, then handleClick method is being called and console message. Here console.log should log the `click event handler` message but it actually log `undefined`. + +The problem of displaying `undefined` is because of the execution context of clickHandler.handleClick method is not being saved hence `this` pointing to button `btn` object. We can fix this issue using bind method. + +```javascript +var clickHandler = { + message: 'click event handler', + handleClick: function(event) { + console.log(this.message); + } +}; + +var btn = document.getElementById('myBtn'); +// Add click event to btn and bind the clickHandler object +btn.addEventListener('click', clickHandler.handleClick.bind(clickHandler)); +``` + +`bind` method is available to all the function similar to call and apply method which take argument value of `this`. + + #Objective Question ## Hoisting @@ -1695,6 +2008,154 @@ var employeeId = '1234abe'; Answer: 2) undefined +###4. What would be the output of following code? + +```javascript +var employeeId = '1234abe'; +(function() { + console.log(employeeId); + var employeeId = '122345'; + (function() { + var employeeId = 'abc1234'; + }()); +}()); +``` + +1. '122345' +2. undefined +3. '1234abe' +4. ReferenceError: employeeId is not defined + +Answer: 2) undefined + +###5. What would be the output of following code? + +```javascript +(function() { + console.log(typeof displayFunc); + var displayFunc = function(){ + console.log("Hi I am inside displayFunc"); + } +}()); +``` + +1. undefined +2. function +3. 'Hi I am inside displayFunc' +4. ReferenceError: displayFunc is not defined + +Answer: 1) undefined + +###6. What would be the output of following code? + +```javascript +var employeeId = 'abc123'; +function foo(){ + employeeId = '123bcd'; + return; +} +foo(); +console.log(employeeId); +``` + +1. undefined +2. '123bcd' +3. 'abc123' +4. ReferenceError: employeeId is not defined + +Answer: 2) '123bcd' + +###7. What would be the output of following code? + +```javascript +var employeeId = 'abc123'; + +function foo() { + employeeId = '123bcd'; + return; + + function employeeId() {} +} +foo(); +console.log(employeeId); +``` + +1. undefined +2. '123bcd' +3. 'abc123' +4. ReferenceError: employeeId is not defined + +Answer: 3) 'abc123' + +###8. What would be the output of following code? + +```javascript +var employeeId = 'abc123'; + +function foo() { + employeeId(); + return; + + function employeeId() { + console.log(typeof employeeId); + } +} +foo(); +``` + +1. undefined +2. function +3. string +4. ReferenceError: employeeId is not defined + +Answer: 2) 'function' + +###9. What would be the output of following code? + +```javascript +function foo() { + employeeId(); + var product = 'Car'; + return; + + function employeeId() { + console.log(product); + } +} +foo(); +``` + +1. undefined +2. Type Error +3. 'Car' +4. ReferenceError: product is not defined + +Answer: 1) undefined + +###10. What would be the output of following code? + +```javascript +(function foo() { + bar(); + + function bar() { + abc(); + console.log(typeof abc); + } + + function abc() { + console.log(typeof bar); + } +}()); +``` + +1. undefined undefined +2. Type Error +3. function function +4. ReferenceError: bar is not defined + +Answer: 3) function function + ## Object ###1. What would be the output of following code ? @@ -1704,7 +2165,7 @@ Answer: 2) undefined 'use strict'; var person = { - name: 'Nishant' + name: 'John' }; person.salary = '10000$'; person['country'] = 'USA'; @@ -1724,10 +2185,6 @@ Answer: 2) undefined Answer: 3) ["name", "salary", "country", "phoneNo"] -## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) - - ###2. What would be the output of following code ? ```javascript @@ -1735,7 +2192,7 @@ Answer: 3) ["name", "salary", "country", "phoneNo"] 'use strict'; var person = { - name: 'Nishant' + name: 'John' }; person.salary = '10000$'; person['country'] = 'USA'; @@ -1755,10 +2212,6 @@ Answer: 3) ["name", "salary", "country", "phoneNo"] Answer: 4) ["name", "salary", "country"] -## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) - - ###3. What would be the output of following code ? ```javascript @@ -1799,43 +2252,183 @@ Answer: 2) false false Answer: 2) false false -## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) - - -## Array - -###1. What would be the output of following code? +###5. What would be the output of following code ? ```javascript (function() { - var array = new Array('100'); - console.log(array); - console.log(array.length); + var objA = Object.create({ + foo: 'foo' + }); + var objB = Object.create({ + foo: 'foo' + }); + console.log(objA == objB); + console.log(objA === objB); }()); ``` +1. false true +2. false false +3. true false +4. true true + +Answer: 2) false false -1. undefined undefined -2. [undefined × 100] 100 -3. ["100"] 1 -4. ReferenceError: array is not defined +###6. What would be the output of following code ? -Answer: 3) ["100"] 1 +```javascript +(function() { + var objA = Object.create({ + foo: 'foo' + }); + var objB = Object.create(objA); + console.log(objA == objB); + console.log(objA === objB); +}()); +``` +1. false true +2. false false +3. true false +4. true true + +Answer: 2) false false -###2. What would be the output of following code? +###7. What would be the output of following code ? ```javascript (function() { - var array1 = []; - var array2 = new Array(100); - var array3 = new Array(['1',2,'3',4,5.6]); - console.log(array1); - console.log(array2); - console.log(array3); - console.log(array3.length); + var objA = Object.create({ + foo: 'foo' + }); + var objB = Object.create(objA); + console.log(objA.toString() == objB.toString()); + console.log(objA.toString() === objB.toString()); }()); ``` - +1. false true +2. false false +3. true false +4. true true + +Answer: 4) true true + +###8. What would be the output of following code ? + +```javascript +(function() { + var objA = Object.create({ + foo: 'foo' + }); + var objB = objA; + console.log(objA == objB); + console.log(objA === objB); + console.log(objA.toString() == objB.toString()); + console.log(objA.toString() === objB.toString()); +}()); +``` +1. true true true false +2. true false true true +3. true true true true +4. true true false false + +Answer: 3) true true true true + +###9. What would be the output of following code ? + +```javascript +(function() { + var objA = Object.create({ + foo: 'foo' + }); + var objB = objA; + objB.foo = 'bar'; + console.log(objA.foo); + console.log(objB.foo); +}()); +``` +1. foo bar +2. bar bar +3. foo foo +4. bar foo + +Answer: 2) bar bar + +###10. What would be the output of following code ? + +```javascript +(function() { + var objA = Object.create({ + foo: 'foo' + }); + var objB = objA; + objB.foo = 'bar'; + + delete objA.foo; + console.log(objA.foo); + console.log(objB.foo); +}()); +``` +1. foo bar +2. bar bar +3. foo foo +4. bar foo + +Answer: 3) foo foo + +###11. What would be the output of following code ? + +```javascript +(function() { + var objA = { + foo: 'foo' + }; + var objB = objA; + objB.foo = 'bar'; + + delete objA.foo; + console.log(objA.foo); + console.log(objB.foo); +}()); +``` +1. foo bar +2. undefined undefined +3. foo foo +4. undefined bar + +Answer: 2) undefined undefined + +## Array + +###1. What would be the output of following code? + +```javascript +(function() { + var array = new Array('100'); + console.log(array); + console.log(array.length); +}()); +``` + +1. undefined undefined +2. [undefined × 100] 100 +3. ["100"] 1 +4. ReferenceError: array is not defined + +Answer: 3) ["100"] 1 + +###2. What would be the output of following code? + +```javascript +(function() { + var array1 = []; + var array2 = new Array(100); + var array3 = new Array(['1',2,'3',4,5.6]); + console.log(array1); + console.log(array2); + console.log(array3); + console.log(array3.length); +}()); +``` + 1. [] [] [Array[5]] 1 2. [] [undefined × 100] Array[5] 5 3. [] [] ['1',2,'3',4,5.6] 5 @@ -1843,10 +2436,6 @@ Answer: 3) ["100"] 1 Answer: 1) [] [] [Array[5]] 1 -## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) - - ###3. What would be the output of following code? ```javascript @@ -1865,10 +2454,6 @@ Answer: 1) [] [] [Array[5]] 1 Answer: 1) 11 -## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) - - ###4. What would be the output of following code? ```javascript @@ -1887,6 +2472,200 @@ Answer: 1) 11 Answer: 3) 6 +###5. What would be the output of following code? + +```javascript +(function(){ + var animal = ['cow','horse']; + animal.push('cat'); + animal.unshift('dog','rat','goat'); + console.log(animal); +})(); +``` + +1. [ 'dog', 'rat', 'goat', 'cow', 'horse', 'cat' ] +2. [ 'cow', 'horse', 'cat', 'dog', 'rat', 'goat' ] +3. Type Error +4. undefined + +Answer: 1) [ 'dog', 'rat', 'goat', 'cow', 'horse', 'cat' ] + +###6. What would be the output of following code? + +```javascript +(function(){ + var array = [1,2,3,4,5]; + console.log(array.indexOf(2)); + console.log([{name: 'John'},{name : 'John'}].indexOf({name:'John'})); + console.log([[1],[2],[3],[4]].indexOf([3])); + console.log("abcdefgh".indexOf('e')); +})(); +``` + +1. 1 -1 -1 4 +2. 1 0 -1 4 +3. 1 -1 -1 -1 +4. 1 undefined -1 4 + +Answer: 1) 1 -1 -1 4 + +###7. What would be the output of following code? + +```javascript +(function(){ + var array = [1,2,3,4,5,1,2,3,4,5,6]; + console.log(array.indexOf(2)); + console.log(array.indexOf(2,3)); + console.log(array.indexOf(2,10)); +})(); +``` + +1. 1 -1 -1 +2. 1 6 -1 +3. 1 1 -1 +4. 1 undefined undefined + +Answer: 2) 1 6 -1 + +###8. What would be the output of following code? + +```javascript +(function(){ + var numbers = [2,3,4,8,9,11,13,12,16]; + var even = numbers.filter(function(element, index){ + return element % 2 === 0; + }); + console.log(even); + + var containsDivisibleby3 = numbers.some(function(element, index){ + return element % 3 === 0; + }); + + console.log(containsDivisibleby3); +})(); +``` + +1. [ 2, 4, 8, 12, 16 ] [ 0, 3, 0, 0, 9, 0, 12] +2. [ 2, 4, 8, 12, 16 ] [ 3, 9, 12] +3. [ 2, 4, 8, 12, 16 ] true +4. [ 2, 4, 8, 12, 16 ] false + +Answer: 3) [ 2, 4, 8, 12, 16 ] true + +###9. What would be the output of following code? + +```javascript +(function(){ + var containers = [2,0,false,"", '12', true]; + var containers = containers.filter(Boolean); + console.log(containers); + var containers = containers.filter(Number); + console.log(containers); + var containers = containers.filter(String); + console.log(containers); + var containers = containers.filter(Object); + console.log(containers); +})(); +``` + +1. [ 2, '12', true ] + [ 2, '12', true ] + [ 2, '12', true ] + [ 2, '12', true ] +2. [false, true] + [ 2 ] + ['12'] + [ ] +3. [2,0,false,"", '12', true] + [2,0,false,"", '12', true] + [2,0,false,"", '12', true] + [2,0,false,"", '12', true] +4. [ 2, '12', true ] + [ 2, '12', true, false ] + [ 2, '12', true,false ] + [ 2, '12', true,false] + + +Answer: 1) [ 2, '12', true ] + [ 2, '12', true ] + [ 2, '12', true ] + [ 2, '12', true ] + +###10. What would be the output of following code? + +```javascript +(function(){ + var list = ['foo','bar','john','ritz']; + console.log(list.slice(1)); + console.log(list.slice(1,3)); + console.log(list.slice()); + console.log(list.slice(2,2)); + console.log(list); +})(); +``` + +1. [ 'bar', 'john', 'ritz' ] + [ 'bar', 'john' ] + [ 'foo', 'bar', 'john', 'ritz' ] + [] + [ 'foo', 'bar', 'john', 'ritz' ] +2. [ 'bar', 'john', 'ritz' ] + [ 'bar', 'john','ritz ] + [ 'foo', 'bar', 'john', 'ritz' ] + [] + [ 'foo', 'bar', 'john', 'ritz' ] +3. [ 'john', 'ritz' ] + [ 'bar', 'john' ] + [ 'foo', 'bar', 'john', 'ritz' ] + [] + [ 'foo', 'bar', 'john', 'ritz' ] +4. [ 'foo' ] + [ 'bar', 'john' ] + [ 'foo', 'bar', 'john', 'ritz' ] + [] + [ 'foo', 'bar', 'john', 'ritz' ] + +Answer: 1) [ 'bar', 'john', 'ritz' ] + [ 'bar', 'john' ] + [ 'foo', 'bar', 'john', 'ritz' ] + [] + [ 'foo', 'bar', 'john', 'ritz' ] + +###11. What would be the output of following code? + +```javascript +(function(){ + var list = ['foo','bar','john']; + console.log(list.splice(1)); + console.log(list.splice(1,2)); + console.log(list); +})(); +``` + +1. [ 'bar', 'john' ] [] [ 'foo' ] +2. [ 'bar', 'john' ] [] [ 'bar', 'john' ] +3. [ 'bar', 'john' ] [ 'bar', 'john' ] [ 'bar', 'john' ] +4. [ 'bar', 'john' ] [] [] + +Answer: 1. [ 'bar', 'john' ] [] [ 'foo' ] + +###12. What would be the output of following code? + +```javascript +(function(){ + var arrayNumb = [2, 8, 15, 16, 23, 42]; + arrayNumb.sort(); + console.log(arrayNumb); +})(); +``` + +1. [2, 8, 15, 16, 23, 42] +2. [42, 23, 26, 15, 8, 2] +3. [ 15, 16, 2, 23, 42, 8 ] +4. [ 2, 8, 15, 16, 23, 42 ] + +Answer: 3. [ 15, 16, 2, 23, 42, 8 ] + ## Function: ###1. What would be the output of following code ? @@ -1974,6 +2753,117 @@ console.log(obj.innerMessage()); 4. ReferenceError: this.message is not defined Answer: 3) undefined + +###5. What would the output of following code ? + +```javascript +var obj = { + message: 'Hello', + innerMessage: function () { + var self = this; + (function () { + console.log(self.message); + }()); + } +}; +console.log(obj.innerMessage()); +``` + +1. Type Error +2. 'Hello' +3. undefined +4. ReferenceError: self.message is not defined + +Answer: 2) 'Hello' + +###6. What would the output of following code ? + +```javascript +function myFunc(){ + console.log(this.message); +} +myFunc.message = "Hi John"; + +console.log(myFunc()); +``` + +1. Type Error +2. 'Hi John' +3. undefined +4. ReferenceError: this.message is not defined + +Answer: 3) undefined + +###7. What would the output of following code ? + +```javascript +function myFunc(){ + console.log(myFunc.message); +} +myFunc.message = "Hi John"; + +console.log(myFunc()); +``` + +1. Type Error +2. 'Hi John' +3. undefined +4. ReferenceError: this.message is not defined + +Answer: 2) 'Hi John' + +###8. What would the output of following code ? + +```javascript +function myFunc() { + myFunc.message = 'Hi John'; + console.log(myFunc.message); +} +console.log(myFunc()); +``` + +1. Type Error +2. 'Hi John' +3. undefined +4. ReferenceError: this.message is not defined + +Answer: 2) 'Hi John' + +###9. What would the output of following code ? + +```javascript +function myFunc(param1,param2) { + console.log(myFunc.length); +} +console.log(myFunc()); +console.log(myFunc("a","b")); +console.log(myFunc("a","b","c","d")); +``` + +1. 2 2 2 +2. 0 2 4 +3. undefined +4. ReferenceError + +Answer: a) 2 2 2 + +###10. What would the output of following code ? + +```javascript +function myFunc() { + console.log(arguments.length); +} +console.log(myFunc()); +console.log(myFunc("a","b")); +console.log(myFunc("a","b","c","d")); +``` + +1. 2 2 2 +2. 0 2 4 +3. undefined +4. ReferenceError + +Answer: 2) 0 2 4 ## Object Oriented @@ -1993,17 +2883,457 @@ Person.displayName = function(){ console.log(this.name); } -var person1 = new Person('Nishant'); +var person1 = new Person('John'); person1.displayName(); Person.displayName(); ``` -1. Nishant Person -2. Nishant John -3. Nishant undefined +1. John Person +2. John John +3. John undefined 4. John John -Answer: 1) Nishant Person +Answer: 1) John Person + +## Scopes + +###1. What would the output of following code ? + +```javascript +function passWordMngr() { + var password = '12345678'; + this.userName = 'John'; + return { + pwd: password + }; +} +// Block End +var userInfo = passWordMngr(); +console.log(userInfo.pwd); +console.log(userInfo.userName); +``` + +1. 12345678 Window +2. 12345678 John +3. 12345678 undefined +4. undefined undefined + +Answer: 3) 12345678 undefined + +###2. What would the output of following code ? + +```javascript +var employeeId = 'aq123'; +function Employee() { + this.employeeId = 'bq1uy'; +} +console.log(Employee.employeeId); +``` + +1. Reference Error +2. aq123 +3. bq1uy +4. undefined + +Answer: 4) undefined + +###3. What would the output of following code ? + +```javascript +var employeeId = 'aq123'; + +function Employee() { + this.employeeId = 'bq1uy'; +} +console.log(new Employee().employeeId); +Employee.prototype.employeeId = 'kj182'; +Employee.prototype.JobId = '1BJKSJ'; +console.log(new Employee().JobId); +console.log(new Employee().employeeId); +``` + +1. bq1uy 1BJKSJ bq1uy undefined +2. bq1uy 1BJKSJ bq1uy +3. bq1uy 1BJKSJ kj182 +4. undefined 1BJKSJ kj182 + +Answer: 2) bq1uy 1BJKSJ bq1uy + +###4. What would the output of following code ? + +```javascript +var employeeId = 'aq123'; +(function Employee() { + try { + throw 'foo123'; + } catch (employeeId) { + console.log(employeeId); + } + console.log(employeeId); +}()); +``` + +1. foo123 aq123 +2. foo123 foo123 +3. aq123 aq123 +4. foo123 undefined + +Answer: 1) foo123 aq123 + +## Call, Apply, Bind + +###1. What would the output of following code ? + +```javascript +(function() { + var greet = 'Hello World'; + var toGreet = [].filter.call(greet, function(element, index) { + return index > 5; + }); + console.log(toGreet); +}()); +``` + +1. Hello World +2. undefined +3. World +4. [ 'W', 'o', 'r', 'l', 'd' ] + +Answer: 4) [ 'W', 'o', 'r', 'l', 'd' ] + +###2. What would the output of following code ? + +```javascript +(function() { + var fooAccount = { + name: 'John', + amount: 4000, + deductAmount: function(amount) { + this.amount -= amount; + return 'Total amount left in account: ' + this.amount; + } + }; + var barAccount = { + name: 'John', + amount: 6000 + }; + var withdrawAmountBy = function(totalAmount) { + return fooAccount.deductAmount.bind(barAccount, totalAmount); + }; + console.log(withdrawAmountBy(400)()); + console.log(withdrawAmountBy(300)()); +}()); +``` + +1. Total amount left in account: 5600 Total amount left in account: 5300 +2. undefined undefined +3. Total amount left in account: 3600 Total amount left in account: 3300 +4. Total amount left in account: 5600 Total amount left in account: 5600 + +Answer: 1) Total amount left in account: 5600 Total amount left in account: 5300 + +###3. What would the output of following code ? + +```javascript +(function() { + var fooAccount = { + name: 'John', + amount: 4000, + deductAmount: function(amount) { + this.amount -= amount; + return this.amount; + } + }; + var barAccount = { + name: 'John', + amount: 6000 + }; + var withdrawAmountBy = function(totalAmount) { + return fooAccount.deductAmount.apply(barAccount, [totalAmount]); + }; + console.log(withdrawAmountBy(400)); + console.log(withdrawAmountBy(300)); + console.log(withdrawAmountBy(200)); +}()); +``` + +1. 5600 5300 5100 +2. 3600 3300 3100 +3. 5600 3300 5100 +4. undefined undefined undefined + +Answer: 1) 5600 5300 5100 + +###4. What would the output of following code ? + +```javascript +(function() { + var fooAccount = { + name: 'John', + amount: 6000, + deductAmount: function(amount) { + this.amount -= amount; + return this.amount; + } + }; + var barAccount = { + name: 'John', + amount: 4000 + }; + var withdrawAmountBy = function(totalAmount) { + return fooAccount.deductAmount.call(barAccount, totalAmount); + }; + console.log(withdrawAmountBy(400)); + console.log(withdrawAmountBy(300)); + console.log(withdrawAmountBy(200)); +}()); +``` + +1. 5600 5300 5100 +2. 3600 3300 3100 +3. 5600 3300 5100 +4. undefined undefined undefined + +Answer: 2) 3600 3300 3100 + +###5. What would the output of following code ? + +```javascript +(function greetNewCustomer() { + console.log('Hello ' + this.name); +}.bind({ + name: 'John' +})()); +``` + +1. Hello John +2. Reference Error +3. Window +4. undefined + +Answer: 1) Hello John + +###6. What would the output of following code ? + +```javascript +(function greetNewCustomer() { + console.log('Hello ' + this.name); +}.bind({ + name: 'John' +})()); +``` + +1. Hello John +2. Reference Error +3. Window +4. undefined + +Answer: 1) Hello John + +## Callback Function + +###1. What would the output of following code ? + +```javascript +function getDataFromServer(apiUrl){ + var name = "John"; + return { + then : function(fn){ + fn(name); + } + } +} + +getDataFromServer('www.google.com').then(function(name){ + console.log(name); +}); + +``` + +1. John +2. undefined +3. Reference Error +4. fn is not defined + +Answer: 1) John + +###2. What would the output of following code ? + +```javascript +(function(){ + var arrayNumb = [2, 8, 15, 16, 23, 42]; + Array.prototype.sort = function(a,b){ + return a - b; + }; + arrayNumb.sort(); + console.log(arrayNumb); +})(); + +(function(){ + var numberArray = [2, 8, 15, 16, 23, 42]; + numberArray.sort(function(a,b){ + if(a == b){ + return 0; + }else{ + return a < b ? -1 : 1; + } + }); + console.log(numberArray); +})(); + +(function(){ + var numberArray = [2, 8, 15, 16, 23, 42]; + numberArray.sort(function(a,b){ + return a-b; + }); + console.log(numberArray); +})(); +``` + +1. [ 2, 8, 15, 16, 23, 42 ] + [ 2, 8, 15, 16, 23, 42 ] + [ 2, 8, 15, 16, 23, 42 ] +2. undefined undefined undefined +3. [42, 23, 16, 15, 8, 2] + [42, 23, 16, 15, 8, 2] + [42, 23, 16, 15, 8, 2] +4. Reference Error + +Answer: 1) [ 2, 8, 15, 16, 23, 42 ] + [ 2, 8, 15, 16, 23, 42 ] + [ 2, 8, 15, 16, 23, 42 ] + +## Return Statement + +###1. What would the output of following code ? + +```javascript +(function(){ + function sayHello(){ + var name = "Hi John"; + return + { + fullName: name + } + } + console.log(sayHello().fullName); +})(); +``` + +1. Hi John +2. undefined +3. Reference Error +4. Uncaught TypeError: Cannot read property 'fullName' of undefined + +Answer: 4) Uncaught TypeError: Cannot read property 'fullName' of undefined + +###2. What would the output of following code ? + +```javascript +function getNumber(){ + return (2,4,5); +} + +var numb = getNumber(); +console.log(numb); +``` + +1. 5 +2. undefined +3. 2 +4. (2,4,5) + +Answer: 1) 5 + +###3. What would the output of following code ? + +```javascript +function getNumber(){ + return; +} + +var numb = getNumber(); +console.log(numb); +``` + +1. null +2. undefined +3. "" +4. 0 + +Answer: 2) undefined + +###4**. What would the output of following code ? + +```javascript +function mul(x){ + return function(y){ + return [x*y, function(z){ + return x*y + z; + }]; + } +} + +console.log(mul(2)(3)[0]); +console.log(mul(2)(3)[1](4)); +``` + +1. 6, 10 +2. undefined undefined +3. Reference Error +4. 10, 6 + +Answer: 1) 6, 10 + +###5**. What would the output of following code ? + +```javascript +function mul(x) { + return function(y) { + return { + result: x * y, + sum: function(z) { + return x * y + z; + } + }; + }; +} +console.log(mul(2)(3).result); +console.log(mul(2)(3).sum(4)); +``` + +1. 6, 10 +2. undefined undefined +3. Reference Error +4. 10, 6 + +Answer: 1) 6, 10 + +###6. What would the output of following code ? + +```javascript +function mul(x) { + return function(y) { + return function(z) { + return function(w) { + return function(p) { + return x * y * z * w * p; + }; + }; + }; + }; +} +console.log(mul(2)(3)(4)(5)(6)); +``` + +1. 720 +2. undefined +3. Reference Error +4. Type Error + +Answer: 1) 720 + + ## Have doubt in this question ?? [Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) From 707ab8790d301c7e8cdf40ef3bb143fcd1b84074 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Tue, 30 May 2017 21:10:07 +0530 Subject: [PATCH 036/141] Update README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index d2f3b18..8dd9a0e 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,14 @@ [![Join the chat at https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question](https://badges.gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question.svg)](https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +##License + +This book is released under a Creative Commons Attribution-Noncommercial- No Derivative Works 3.0 United States License. + +What this means it that the project is free to read and use, but the license does not permit commercial use of the material (i.e you can freely print out the questions for your own use, but you can't sell it). I'm trying to best to publish all of my books in a free + purchased (if you would like to support these projects) form so I would greatly appreciate it if you would respect these terms. + +Copyright Nishant Kumar, 2017. + ## Have question for me ? [Ask me @nishant kumar](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) From 3f1cb5a25392993cfcc4b2698f284a1d8197701c Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Sat, 15 Jul 2017 15:38:25 +0530 Subject: [PATCH 037/141] Added BSD 3-Clause License --- LICENSE | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..1edcd0d --- /dev/null +++ b/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2017, Nishant Kumar +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From 3ab3160ac1128406942dbcc8a7c7d957d8ce8790 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Mon, 31 Jul 2017 21:40:03 +0530 Subject: [PATCH 038/141] Added Codementor Link --- README.md | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 8dd9a0e..ac5ab66 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ What this means it that the project is free to read and use, but the license doe Copyright Nishant Kumar, 2017. ## Have question for me ? -[Ask me @nishant kumar](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Ask me @nishant kumar](https://www.codementor.io/nihantanu/) # 123-JavaScript-Interview-Question ## 1. Difference between `undefined` and `not defined` in JavaScript @@ -47,7 +47,7 @@ console.log(y); // Output: ReferenceError: y is not defined [http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration](http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration) ## Have doubt in this question ?? -[Schedule time to discuss with me @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule time to discuss with me @nishantk](https://www.codementor.io/nihantanu/) ## 2. What will be the output of the following code? @@ -82,7 +82,7 @@ console.log(k); // output 1function ``` ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ## 3. What is the drawback of creating true private in JavaScript? > One of the drawback of creating a true private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. @@ -118,7 +118,7 @@ Here each instance variable `emp1`, `emp2`, `emp3` has own copy of increaseSalar So as recommendation don't go for a private method unless it's necessary. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ## 4.What is “closure” in javascript? Provide an example? > A closure is a function defined inside another function (called parent function) and has access to the variable which is declared and defined in parent function scope. @@ -164,7 +164,7 @@ globalVar = abc ``` ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ## 5. Write a mul function which will properly when invoked as below syntax. @@ -265,7 +265,7 @@ while(arrayList.length) { Above implementation can also empty the array. But not recommended to use often. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ### 7. How to check if an object is an array or not? > The best way to find whether an object is instance of a particular class or not using `toString` method from `Object.prototype` @@ -329,7 +329,7 @@ Array.isArray(arrayList); `Array.isArray` is supported by Chrome 5, Firefox 4.0, IE 9, Opera 10.5 and Safari 5 ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 8. What will be the output of the following code? @@ -345,7 +345,7 @@ console.log(output); > Above code will output `0` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **local variable**. `delete` operator doesn't affect local variable. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 9. What will be the output of the following code? @@ -362,7 +362,7 @@ console.log(output); > Above code will output `1` as output. `delete` operator is used to delete property from object. Here `x` is not an object it's **global variable** of type `number`. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 10. What will be the output of the following code? @@ -379,7 +379,7 @@ console.log(output); > Above code will output `undefined` as output. `delete` operator is used to delete a property from an object. Here `x` is an object which has foo as a property and from self-invoking function we are deleting foo property of object `x` and after deletion we are trying to reference deleted property `foo` which result `undefined`. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 11. What will be the output of the following code? @@ -397,7 +397,7 @@ console.log(emp1.company); `emp1` object doesn't have **company** as its own property. you can test it `console.log(emp1.hasOwnProperty('company')); //output : false` However, we can delete company property directly from `Employee` object using `delete Employee.company` or we can also delete from `emp1` object using `__proto__` property `delete emp1.__proto__.company`. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 12. What is `undefined x 1` in JavaScript @@ -411,7 +411,7 @@ when you run above code and do `console.log(trees);` in chrome developer console **Note:** Please remember you need not check for uninitialized index of array in `trees[3] === 'undefined × 1'` it will give an error, Because `'undefined × 1'` this is just way of displaying uninitialized index of array in chrome. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 13. What will be the output of the following code? @@ -426,7 +426,7 @@ console.log(trees.length); So when delete operator removes an array element that deleted element is not longer present in array. In place of value at deleted index `undefined x 1` in **chrome** and `undefined` is placed at the index. If you do `console.log(trees)` output `["xyz", "xxxx", "test", undefined × 1, "apple"]` in Chrome and in Firefox `["xyz", "xxxx", "test", undefined, "apple"]`. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 14. What will be the output of the following code? @@ -446,7 +446,7 @@ console.log(bar + false); - String + String -> Concatenation ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 15. What will be the output of the following code? @@ -458,7 +458,7 @@ console.log(y); > Above code will output `undefined` as output. According to `associativity` rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is `undefined` and assigned to `z` and then `y` would be assigned the value of z and then `z` would be assign value `1`. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 16. What will be the output of the following code? @@ -499,7 +499,7 @@ var foo = function bar() { ``` ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 17. What is the difference between declaring a function in below format? @@ -788,7 +788,7 @@ Unlike function calls and method calls, a constructor call `new Employee('John D The primary role of the constructor function is to initialize the object. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ## Question 23 @@ -837,7 +837,7 @@ In Javascript function defined inside has access to outer function variable and - Function can be returned from function ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ## Question 25 @@ -892,7 +892,7 @@ methodObject.display(); Here methodObject is an object and display is a method which is associated with methodObject. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ## Question 26 @@ -928,7 +928,7 @@ function testCallBack(callback) { testCallBack(display); // Here display function is being passed as callback ``` ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ## Question 27 ### Describe Singleton Pattern In JavaScript? @@ -1033,7 +1033,7 @@ console.log(MyNamespace.Singleton.getInstance().publicMethod()); The singleton implemented above is easy to understand. The singleton class maintains a static reference to the lone singleton instance and return that reference from the static getInstance() method. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ## Question 28 @@ -3344,7 +3344,7 @@ Answer: 1) 720 ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ## This Book will be completed by Aug 1 2017 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](http://goo.gl/forms/QSpxVtvsNb). @@ -3355,7 +3355,7 @@ I'm always welcome to feedback on how the book can be improved, and more questio ####Note: All contributor to this book will be added as contributor in Book Last page by default, So if you have contributed and don't wanted to be included then please write an email to me at nihantanu@gmail.com ##For any other query: -[Schedule 15 min discussion with me for free @nishantk](http://www.canumeet.com/nishantk/javascript-interview-query-discussion) +[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ##License From f1110f4579cd26435f9a12dfe67a22da6f8b10d4 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Wed, 2 Aug 2017 09:25:30 +0530 Subject: [PATCH 039/141] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ac5ab66..d3f625b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![](coverPage.png) -## This Book will be completed by Aug 1 2017 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](http://goo.gl/forms/QSpxVtvsNb). +## This Book will be completed by Sept 1 2017 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](http://goo.gl/forms/QSpxVtvsNb). [![Join the chat at https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question](https://badges.gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question.svg)](https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) @@ -3346,7 +3346,7 @@ Answer: 1) 720 ## Have doubt in this question ?? [Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) -## This Book will be completed by Aug 1 2017 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](http://goo.gl/forms/QSpxVtvsNb). +## This Book will be completed by Sep 1 2017 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](http://goo.gl/forms/QSpxVtvsNb). ##Contributing From be66923551c7294c74031923856f7d31ccc6d51f Mon Sep 17 00:00:00 2001 From: ashishyadav311 Date: Sat, 28 Oct 2017 01:02:40 +0530 Subject: [PATCH 040/141] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d3f625b..25f1c98 100644 --- a/README.md +++ b/README.md @@ -1676,7 +1676,7 @@ There are some best way we can achieve this ```javascript function appLog() { - var args = Array.prototype.slice.call(argument); + var args = Array.prototype.slice.call(arguments); args.unshift('your app name'); console.log.apply(console, args); } From 0260e4fe292351dbb1a8d414f4bc6acd941958fa Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Mon, 30 Oct 2017 20:24:53 +0530 Subject: [PATCH 041/141] Update README.md --- README.md | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/README.md b/README.md index d3f625b..0226074 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,6 @@ What this means it that the project is free to read and use, but the license doe Copyright Nishant Kumar, 2017. ## Have question for me ? -[Ask me @nishant kumar](https://www.codementor.io/nihantanu/) # 123-JavaScript-Interview-Question ## 1. Difference between `undefined` and `not defined` in JavaScript @@ -47,7 +46,6 @@ console.log(y); // Output: ReferenceError: y is not defined [http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration](http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration) ## Have doubt in this question ?? -[Schedule time to discuss with me @nishantk](https://www.codementor.io/nihantanu/) ## 2. What will be the output of the following code? @@ -82,7 +80,6 @@ console.log(k); // output 1function ``` ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ## 3. What is the drawback of creating true private in JavaScript? > One of the drawback of creating a true private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. @@ -118,7 +115,6 @@ Here each instance variable `emp1`, `emp2`, `emp3` has own copy of increaseSalar So as recommendation don't go for a private method unless it's necessary. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ## 4.What is “closure” in javascript? Provide an example? > A closure is a function defined inside another function (called parent function) and has access to the variable which is declared and defined in parent function scope. @@ -164,7 +160,6 @@ globalVar = abc ``` ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ## 5. Write a mul function which will properly when invoked as below syntax. @@ -265,7 +260,6 @@ while(arrayList.length) { Above implementation can also empty the array. But not recommended to use often. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) ### 7. How to check if an object is an array or not? > The best way to find whether an object is instance of a particular class or not using `toString` method from `Object.prototype` @@ -329,7 +323,6 @@ Array.isArray(arrayList); `Array.isArray` is supported by Chrome 5, Firefox 4.0, IE 9, Opera 10.5 and Safari 5 ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 8. What will be the output of the following code? @@ -345,7 +338,6 @@ console.log(output); > Above code will output `0` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **local variable**. `delete` operator doesn't affect local variable. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 9. What will be the output of the following code? @@ -362,7 +354,6 @@ console.log(output); > Above code will output `1` as output. `delete` operator is used to delete property from object. Here `x` is not an object it's **global variable** of type `number`. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 10. What will be the output of the following code? @@ -379,7 +370,6 @@ console.log(output); > Above code will output `undefined` as output. `delete` operator is used to delete a property from an object. Here `x` is an object which has foo as a property and from self-invoking function we are deleting foo property of object `x` and after deletion we are trying to reference deleted property `foo` which result `undefined`. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 11. What will be the output of the following code? @@ -397,7 +387,6 @@ console.log(emp1.company); `emp1` object doesn't have **company** as its own property. you can test it `console.log(emp1.hasOwnProperty('company')); //output : false` However, we can delete company property directly from `Employee` object using `delete Employee.company` or we can also delete from `emp1` object using `__proto__` property `delete emp1.__proto__.company`. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 12. What is `undefined x 1` in JavaScript @@ -411,7 +400,6 @@ when you run above code and do `console.log(trees);` in chrome developer console **Note:** Please remember you need not check for uninitialized index of array in `trees[3] === 'undefined × 1'` it will give an error, Because `'undefined × 1'` this is just way of displaying uninitialized index of array in chrome. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 13. What will be the output of the following code? @@ -426,7 +414,6 @@ console.log(trees.length); So when delete operator removes an array element that deleted element is not longer present in array. In place of value at deleted index `undefined x 1` in **chrome** and `undefined` is placed at the index. If you do `console.log(trees)` output `["xyz", "xxxx", "test", undefined × 1, "apple"]` in Chrome and in Firefox `["xyz", "xxxx", "test", undefined, "apple"]`. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 14. What will be the output of the following code? @@ -446,7 +433,6 @@ console.log(bar + false); - String + String -> Concatenation ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 15. What will be the output of the following code? @@ -458,7 +444,6 @@ console.log(y); > Above code will output `undefined` as output. According to `associativity` rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is `undefined` and assigned to `z` and then `y` would be assigned the value of z and then `z` would be assign value `1`. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) #### 16. What will be the output of the following code? From baa7f54cbadbb70dcddebbcdb46a1da3e3b2eefd Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Mon, 30 Oct 2017 20:26:02 +0530 Subject: [PATCH 042/141] Update README.md --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 0226074..4595f8a 100644 --- a/README.md +++ b/README.md @@ -484,7 +484,7 @@ var foo = function bar() { ``` ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) + #### 17. What is the difference between declaring a function in below format? @@ -773,7 +773,7 @@ Unlike function calls and method calls, a constructor call `new Employee('John D The primary role of the constructor function is to initialize the object. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) + ## Question 23 @@ -822,7 +822,7 @@ In Javascript function defined inside has access to outer function variable and - Function can be returned from function ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) + ## Question 25 @@ -877,7 +877,7 @@ methodObject.display(); Here methodObject is an object and display is a method which is associated with methodObject. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) + ## Question 26 @@ -913,7 +913,7 @@ function testCallBack(callback) { testCallBack(display); // Here display function is being passed as callback ``` ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) + ## Question 27 ### Describe Singleton Pattern In JavaScript? @@ -1018,7 +1018,7 @@ console.log(MyNamespace.Singleton.getInstance().publicMethod()); The singleton implemented above is easy to understand. The singleton class maintains a static reference to the lone singleton instance and return that reference from the static getInstance() method. ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) + ## Question 28 @@ -3329,7 +3329,7 @@ Answer: 1) 720 ## Have doubt in this question ?? -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) + ## This Book will be completed by Sep 1 2017 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](http://goo.gl/forms/QSpxVtvsNb). @@ -3340,7 +3340,7 @@ I'm always welcome to feedback on how the book can be improved, and more questio ####Note: All contributor to this book will be added as contributor in Book Last page by default, So if you have contributed and don't wanted to be included then please write an email to me at nihantanu@gmail.com ##For any other query: -[Schedule 15 min discussion with me for free @nishantk](https://www.codementor.io/nihantanu/) + ##License From ace0c49fbc3f4a26070625d0f0257466741a4327 Mon Sep 17 00:00:00 2001 From: Omar El Gabry Date: Sun, 19 Nov 2017 16:44:06 +0530 Subject: [PATCH 043/141] Update Length of counterArray It outputs 3 since you added `counterArray["C"] = 1;` --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4595f8a..14e37c7 100644 --- a/README.md +++ b/README.md @@ -684,7 +684,7 @@ counterArray["C"] = 1; `Object` has `keys` method which can we used to calculate the length of object. ```javascript -Object.keys(counterArray).length; // Output 2 +Object.keys(counterArray).length; // Output 3 ``` We can also calculate length of object by iterating through the object and by doing a count of own property of object. From c0d00b7e26efe8ae081b22a2371c6b988e0d7024 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Mon, 4 Dec 2017 20:36:55 +0530 Subject: [PATCH 044/141] Deleted Nishant Resume --- Nishant_resume.js | 175 ---------------------------------------------- 1 file changed, 175 deletions(-) delete mode 100644 Nishant_resume.js diff --git a/Nishant_resume.js b/Nishant_resume.js deleted file mode 100644 index fdabaa4..0000000 --- a/Nishant_resume.js +++ /dev/null @@ -1,175 +0,0 @@ -/** - * The Curriculum vitae of Nishant Kumar - * - * Hi there, I am Nishant. I am Software Architect @GetMyParking, - * Mozila Tech Contributor, Teacher at CodeInstitute (Dublin), CodeMentor Front-end Expert, - * JavaScript Interview Question Author from India. - * - * I love to pair program and ship quality code that's solidly tested. - * Skills that I'm proficient in and continue to learn with: Object Oriented JavaScript, - * JavaScript Design Pattern, MVC, Client Side Performance Optimization, Node.js, Angular.js, - * Backbone.js, Vue.js, HTML5 and Tools: Git jasmine Test Framework, Grunt, webpack, bower, yoman. - * - * Domain: Cloud Computing, Distributed Systems, Big Data, SOA, Data mining, Hadoop, NoSQL and Graph Database. - * - */ - -(function() { - 'use strict'; - - /* - About Me - */ - const me = { - name: 'Nishant Kumar', - job: 'Software Architect', - organization: 'GetMyParking', - status: 'Not availble for hire', - location: 'Noida, India', - experience: '5+ years', - skills: { - 'scripting-language' :['JavaScript','ECMAScript 6'] - 'frameworks': ['angular.js','React','Vue','Vuex','backbone.js','IONIC','sails.js'], - 'library' : ['jQuery'] - 'tools': ['Webpack','Gulp', 'Grunt', 'bower','yoman','Git'], - 'testing': ['Jasmine', 'Protractor'], - 'backend': ['Node.js', 'Express.js','Python'], - 'dataBase': ['mongoDb', 'MYSQL'], - 'uncategorized' : ['C','C#','HTML','CSS', 'HTML5','JSON'] - }, - work_experience:[{ - 'company' : 'GetMyParking', - 'position': 'Software Architect', - 'duration': 'Jan 2017 - April 2017', - 'location': 'New Delhi', - 'job_type': 'Contract', - 'responsibility': { - "1": 'Responsible for designing and implementing development infrastructure', - "2": 'Manage risk identification and risk mitigation strategies associated with the architecture', - "3": 'Plan for new technology insertion', - "4": 'Make sure the right modeling is being done, to know that qualities like performance are going to be met', - "5": 'Commitment to following dev "best practices", with code-reviews, unit tests, etc.', - "6": 'Migrating monolithic base code to microservice based architecture to support million transaction per day', - "7": 'Creating and ensuring best practices properly followed for Node JS, and React JS based app.' - },{ - 'company' : 'Engineering Lead', - 'position' : 'BigParser.com', - 'duration' : 'Aug 2014 - Dec 2016', - 'location' : 'Pilani, New Delhi', - 'job_type': 'Contract, Hourly,Remotely', - 'responsibility': { - "1": 'Understanding Product Feature and Functionality Requirements of the Platform', - "2": 'Working with the Design and Architecture teams on design and framework issues.', - "3": 'Working interactions on all platforms including mobile devices', - "4": 'Developing client side MVC frameworks and Creating UI Libraries and using Angular/React JS', - "5": 'Optimize Performance through improved design', - "6": 'Working with the Back End teams on Server side integration of the Platform.', - "7": 'Providing Level 2 and Level 3, support of the UI and Partner Products in Testing, Stage and Client facing Production Environments.', - "8": 'Vertical Specific Customization of Cloud Platform including interfaces to Gmail, Dropbox, Box.Net' - },{ - 'company' : 'Sr. Software Engineering', - 'position' : 'Mindfire Solutions', - 'duration' : 'June 2011 - July 2014', - 'location' : 'Bhubaneswar, New Delhi', - 'job_type': 'Full Time', - 'responsibility': { - "1": 'Analyzed the business requirement with the project manager for different clients', - "2": 'Developed the Technical and functional specifications.', - "3": 'Developed the web based solutions and windows based solutions for various clients.', - "4": 'Perform monthly performance review of the application ', - "5": 'Developed a custom GUI for the ease of users', - "6": 'Developed discussion forum for internal use of knowledge flow within the organization.', - "7": 'Providing Level 2 and Level 3, support of the UI and Partner Products in Testing, Stage and Client facing Production Environments.', - "8": 'Trained the intern coming from various collages' - } - }], - 'notes': 'For project details & more work exp details please refer my linkedIn profile.' - }; - - /* - Contact Details - */ - const me_contact = { - 'email' : 'nihantanu@gmail.com', - 'skypeId' : 'mfsi_nishantk', - 'linkedIn' :'http://in.linkedin.com/in/nishantkumar1' - 'gitHub' : 'github.com/nishant8BITS' - 'stackOverFlow' : 'http://stackoverflow.com/users/430803/nishant' - 'codementor': 'codementor.io/nihantanu' - } - - /* - Education - */ - const education = { - 'post-Graduate': { - 'college': 'Birla Institute of Technology and Science, Pilani', - 'Major' : 'Software System', - 'Year' :'2014-2016', - 'type': 'Regular, Pilani Campus' - }, - 'graduation' : { - 'college': 'ICFAI University, Dehradun', - 'Major' : 'Computer Science & Engineering', - 'Year' :'2007-2011', - 'type': 'Regular' - } - }, - - /** - * Nice things people have said about me. - */ - - /** - * Nishant is a very smart and thoughtful person as an engineer. He truly cares - * about helping others and values the learning experience for young software - * engineers. He is very patient - a key trait as an engineer. Nishant will help - * guide you through problems and help you understand software engineering - * concepts. Hands down I would hire Nishant to be on a team that will not only - * help a business but help other engineers grow as well. - * -Gary Tsai, Software Engineer - */ - - /** - * Nishant is a quick learner and he has very deep understanding on UI stack. He - * also is a good mentor and help other to understand the technology stack. One - * good thing I observed while working with him is he always focus on insist on - * highest standard in his code/solution as well as idea. Keep it up. - * -Apurv Gupta (WDE II at Amazon) - */ - - /** - * Nishant is one of the best person I'm working with. Along with his strong - * technical understanding of how things work, he also keeps on motivating to team - * and helps them to participate effectively & maintaining their productivity to - * better work towards achieving a goal. He always prefers to have full stack - * knowledge of the product & leads a team with great enthusiasm. He can deliver - * end to end any product he is working on. - * -Yash Shah (SRE at Linkedin) - */ - - /** - * I have been working with Nishant since last one year on a cloud-based product, - * He is one of the vibrant contributor in the team and always been dedicated to - * his work. He has very good level of knowledge when it comes to overall front-end - * architecture solutions and specifically on frameworks like backbone & angular. - * -Mohiuddin Parekh ( Founder & CEO at Decojent) - */ - - /** - * I first met Nishant 3 months ago when I told him I was looking for help with - * AngularJS and asked him to mentor me. One of the first things I noticed was that - * he had a great learning attitude, because he told me that he was looking forward - * to learning from me, something I wasn’t expecting from a mentor! He is fun, - * sweet, generous and has a great sense of humor. We have quickly become friends - * and I think we have spent more time hanging out on Telegram (instant messaging) - * and Skype than we have coding. I had never written my own AngularJS directive - * before so I asked him if he could write one for me for an autocomplete feature. - * I was impressed with his work and because of it I was then able to write my own - * directives. We have spent a lot of time chatting and I think there is so much - * more he can do that I have not yet seen. I can see he also has a passion for - * startups. - * -Jenny Swift (Software Engineer) - */ - -})(); From 5488c36db880fccb5243e2bd448ab512ff7707b2 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Mon, 4 Dec 2017 20:38:44 +0530 Subject: [PATCH 045/141] Added Iurii in copyright info --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4595f8a..43c5cbb 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ This book is released under a Creative Commons Attribution-Noncommercial- No Der What this means it that the project is free to read and use, but the license does not permit commercial use of the material (i.e you can freely print out the questions for your own use, but you can't sell it). I'm trying to best to publish all of my books in a free + purchased (if you would like to support these projects) form so I would greatly appreciate it if you would respect these terms. -Copyright Nishant Kumar, 2017. +Copyright Iurii Katkov and Nishant Kumar, 2017. ## Have question for me ? @@ -3349,4 +3349,4 @@ This book is released under a Creative Commons Attribution-Noncommercial- No Der What this means it that the project is free to read and use, but the license does not permit commercial use of the material (i.e you can freely print out the questions for your own use, but you can't sell it). I'm trying to best to publish all of my books in a free + purchased (if you would like to support these projects) form so I would greatly appreciate it if you would respect these terms. -Copyright Nishant Kumar, 2016. +Copyright Iurii Katkov and Nishant Kumar, 2017. From 411bfd1e86f1f57d08cd90d931a8c7721e2ce999 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Mon, 4 Dec 2017 20:41:07 +0530 Subject: [PATCH 046/141] Removed Form --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 43c5cbb..520e425 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![](coverPage.png) -## This Book will be completed by Sept 1 2017 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](http://goo.gl/forms/QSpxVtvsNb). + [![Join the chat at https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question](https://badges.gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question.svg)](https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) @@ -3331,8 +3331,6 @@ Answer: 1) 720 ## Have doubt in this question ?? -## This Book will be completed by Sep 1 2017 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](http://goo.gl/forms/QSpxVtvsNb). - ##Contributing I'm always welcome to feedback on how the book can be improved, and more questions can be added. If you think you have some question then please add that and open a pull request. From f62b6a2cf439af6b2754f656b0bec009ed5b4714 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Thu, 7 Dec 2017 10:04:39 +0100 Subject: [PATCH 047/141] Update README.md Message about the new contributor and flashcards.js --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 520e425..788c503 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ ![](coverPage.png) - +##Great news! +Even though the book is yet to be published, you can get something physical with carefully chosen interview questions. (https://flashcardsjs.com?utm_media=github)[Flashcards.js] is a deck of learning cards that will help you to ace you job interview. Yuri Katkov will work on enriching the book with the qustions from his flashcards collection and to create an unbeatable guide to pass any interview. [![Join the chat at https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question](https://badges.gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question.svg)](https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) From abcba65300d59902b2d1660ebfe4868fcdda7145 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Thu, 7 Dec 2017 10:08:19 +0100 Subject: [PATCH 048/141] Update README.md Typo in markup --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 788c503..979eda2 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ ![](coverPage.png) ##Great news! -Even though the book is yet to be published, you can get something physical with carefully chosen interview questions. (https://flashcardsjs.com?utm_media=github)[Flashcards.js] is a deck of learning cards that will help you to ace you job interview. Yuri Katkov will work on enriching the book with the qustions from his flashcards collection and to create an unbeatable guide to pass any interview. + +Even though the book is yet to be published, you can get something physical with carefully chosen interview questions. [Flashcards.js](https://flashcardsjs.com?utm_media=github) is a deck of learning cards that will help you to ace you job interview. Yuri Katkov will work on enriching the book with the qustions from his flashcards collection and to create an unbeatable guide to pass any interview. [![Join the chat at https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question](https://badges.gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question.svg)](https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) From d72f87c478f3cc88544d919dc448b1ebad7a11fb Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Thu, 7 Dec 2017 10:10:06 +0100 Subject: [PATCH 049/141] Update README.md Fixed link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 979eda2..86e2ea4 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ##Great news! -Even though the book is yet to be published, you can get something physical with carefully chosen interview questions. [Flashcards.js](https://flashcardsjs.com?utm_media=github) is a deck of learning cards that will help you to ace you job interview. Yuri Katkov will work on enriching the book with the qustions from his flashcards collection and to create an unbeatable guide to pass any interview. +Even though the book is yet to be published, you can get something physical with carefully chosen interview questions. [Flashcards.js](https://flashcardsjs.com) is a deck of learning cards that will help you to ace you job interview. Yuri Katkov will work on enriching the book with the qustions from his flashcards collection and to create an unbeatable guide to pass any interview. [![Join the chat at https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question](https://badges.gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question.svg)](https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) From 533e2f13f294deabb44469a1c55d4b81c5e22100 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Thu, 7 Dec 2017 10:11:37 +0100 Subject: [PATCH 050/141] Update README.md Http instead of https --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 86e2ea4..41b588c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ##Great news! -Even though the book is yet to be published, you can get something physical with carefully chosen interview questions. [Flashcards.js](https://flashcardsjs.com) is a deck of learning cards that will help you to ace you job interview. Yuri Katkov will work on enriching the book with the qustions from his flashcards collection and to create an unbeatable guide to pass any interview. +Even though the book is yet to be published, you can get something physical with carefully chosen interview questions. [Flashcards.js](http://flashcardsjs.com) is a deck of learning cards that will help you to ace you job interview. Yuri Katkov will work on enriching the book with the qustions from his flashcards collection and to create an unbeatable guide to pass any interview. [![Join the chat at https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question](https://badges.gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question.svg)](https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) From 1363f0b2793a98ac48232d25eceb56c6c57227d8 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 10 Dec 2017 14:36:26 +0100 Subject: [PATCH 051/141] Update README.md trying to fix the markup --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5f29fe0..53f476b 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,11 @@ ![](coverPage.png) -##Great news! +#Great news! Even though the book is yet to be published, you can get something physical with carefully chosen interview questions. [Flashcards.js](http://flashcardsjs.com) is a deck of learning cards that will help you to ace you job interview. Yuri Katkov will work on enriching the book with the qustions from his flashcards collection and to create an unbeatable guide to pass any interview. -[![Join the chat at https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question](https://badges.gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question.svg)](https://gitter.im/nishant8BITS/123-Essential-JavaScript-Interview-Question?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -##License +#License This book is released under a Creative Commons Attribution-Noncommercial- No Derivative Works 3.0 United States License. @@ -14,7 +13,6 @@ What this means it that the project is free to read and use, but the license doe Copyright Iurii Katkov and Nishant Kumar, 2017. -## Have question for me ? # 123-JavaScript-Interview-Question ## 1. Difference between `undefined` and `not defined` in JavaScript From 6fc553f069fe1a52719c5d3cc1cf7f2cd9378056 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 10 Dec 2017 15:06:44 +0100 Subject: [PATCH 052/141] Update README.md fixing markdown errors --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 53f476b..4437889 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,13 @@ ![](coverPage.png) -#Great news! +# 123-JavaScript-Interview-Question + +##Great news! Even though the book is yet to be published, you can get something physical with carefully chosen interview questions. [Flashcards.js](http://flashcardsjs.com) is a deck of learning cards that will help you to ace you job interview. Yuri Katkov will work on enriching the book with the qustions from his flashcards collection and to create an unbeatable guide to pass any interview. -#License +##License This book is released under a Creative Commons Attribution-Noncommercial- No Derivative Works 3.0 United States License. @@ -14,7 +16,6 @@ What this means it that the project is free to read and use, but the license doe Copyright Iurii Katkov and Nishant Kumar, 2017. -# 123-JavaScript-Interview-Question ## 1. Difference between `undefined` and `not defined` in JavaScript > In JavaScript if you try to use a variable that doesn't exist and has not been declared, then JavaScript will throw an error `var name is not defined` and the script will stop execute thereafter. But If you use `typeof undeclared_variable` then it will return `undefined`. From c2a7163d29722d3533fe89e856fc87977d181f9e Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 10 Dec 2017 15:07:27 +0100 Subject: [PATCH 053/141] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4437889..105d757 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,12 @@ # 123-JavaScript-Interview-Question -##Great news! +## Great news! Even though the book is yet to be published, you can get something physical with carefully chosen interview questions. [Flashcards.js](http://flashcardsjs.com) is a deck of learning cards that will help you to ace you job interview. Yuri Katkov will work on enriching the book with the qustions from his flashcards collection and to create an unbeatable guide to pass any interview. -##License +## License This book is released under a Creative Commons Attribution-Noncommercial- No Derivative Works 3.0 United States License. From dac0ffc97457d701774e27de6c04361de20701e5 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 10 Dec 2017 20:52:59 +0100 Subject: [PATCH 054/141] Update README.md --- README.md | 48 +++++++++++++----------------------------------- 1 file changed, 13 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 105d757..f986eac 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,10 @@ ![](coverPage.png) -# 123-JavaScript-Interview-Question +# 123-JavaScript-Interview-Questions ## Great news! -Even though the book is yet to be published, you can get something physical with carefully chosen interview questions. [Flashcards.js](http://flashcardsjs.com) is a deck of learning cards that will help you to ace you job interview. Yuri Katkov will work on enriching the book with the qustions from his flashcards collection and to create an unbeatable guide to pass any interview. - - -## License - -This book is released under a Creative Commons Attribution-Noncommercial- No Derivative Works 3.0 United States License. - -What this means it that the project is free to read and use, but the license does not permit commercial use of the material (i.e you can freely print out the questions for your own use, but you can't sell it). I'm trying to best to publish all of my books in a free + purchased (if you would like to support these projects) form so I would greatly appreciate it if you would respect these terms. - -Copyright Iurii Katkov and Nishant Kumar, 2017. - +Yuri Katkov from [Flashcards.js](http://flashcardsjs.com) became a co-author and the rights holder of the book. He will improve the questions and add some more from his collections of flashcards and will make sure to produce an unbeatable guide for frontend inteviews. ## 1. Difference between `undefined` and `not defined` in JavaScript > In JavaScript if you try to use a variable that doesn't exist and has not been declared, then JavaScript will throw an error `var name is not defined` and the script will stop execute thereafter. But If you use `typeof undeclared_variable` then it will return `undefined`. @@ -46,7 +36,6 @@ console.log(y); // Output: ReferenceError: y is not defined ### Ref Link: [http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration](http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration) -## Have doubt in this question ?? ## 2. What will be the output of the following code? @@ -80,7 +69,6 @@ if (1) { console.log(k); // output 1function ``` -## Have doubt in this question ?? ## 3. What is the drawback of creating true private in JavaScript? > One of the drawback of creating a true private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. @@ -115,8 +103,6 @@ Here each instance variable `emp1`, `emp2`, `emp3` has own copy of increaseSalar So as recommendation don't go for a private method unless it's necessary. -## Have doubt in this question ?? - ## 4.What is “closure” in javascript? Provide an example? > A closure is a function defined inside another function (called parent function) and has access to the variable which is declared and defined in parent function scope. @@ -160,8 +146,6 @@ innerFuncVar = y globalVar = abc ``` -## Have doubt in this question ?? - ## 5. Write a mul function which will properly when invoked as below syntax. ```javascript @@ -260,7 +244,6 @@ while(arrayList.length) { Above implementation can also empty the array. But not recommended to use often. -## Have doubt in this question ?? ### 7. How to check if an object is an array or not? > The best way to find whether an object is instance of a particular class or not using `toString` method from `Object.prototype` @@ -323,7 +306,6 @@ Array.isArray(arrayList); `Array.isArray` is supported by Chrome 5, Firefox 4.0, IE 9, Opera 10.5 and Safari 5 -## Have doubt in this question ?? #### 8. What will be the output of the following code? @@ -338,7 +320,6 @@ console.log(output); > Above code will output `0` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **local variable**. `delete` operator doesn't affect local variable. -## Have doubt in this question ?? #### 9. What will be the output of the following code? @@ -354,7 +335,6 @@ console.log(output); > Above code will output `1` as output. `delete` operator is used to delete property from object. Here `x` is not an object it's **global variable** of type `number`. -## Have doubt in this question ?? #### 10. What will be the output of the following code? @@ -370,7 +350,6 @@ console.log(output); > Above code will output `undefined` as output. `delete` operator is used to delete a property from an object. Here `x` is an object which has foo as a property and from self-invoking function we are deleting foo property of object `x` and after deletion we are trying to reference deleted property `foo` which result `undefined`. -## Have doubt in this question ?? #### 11. What will be the output of the following code? @@ -387,7 +366,6 @@ console.log(emp1.company); `emp1` object doesn't have **company** as its own property. you can test it `console.log(emp1.hasOwnProperty('company')); //output : false` However, we can delete company property directly from `Employee` object using `delete Employee.company` or we can also delete from `emp1` object using `__proto__` property `delete emp1.__proto__.company`. -## Have doubt in this question ?? #### 12. What is `undefined x 1` in JavaScript @@ -400,7 +378,7 @@ when you run above code and do `console.log(trees);` in chrome developer console **Note:** Please remember you need not check for uninitialized index of array in `trees[3] === 'undefined × 1'` it will give an error, Because `'undefined × 1'` this is just way of displaying uninitialized index of array in chrome. -## Have doubt in this question ?? + #### 13. What will be the output of the following code? @@ -414,7 +392,7 @@ console.log(trees.length); So when delete operator removes an array element that deleted element is not longer present in array. In place of value at deleted index `undefined x 1` in **chrome** and `undefined` is placed at the index. If you do `console.log(trees)` output `["xyz", "xxxx", "test", undefined × 1, "apple"]` in Chrome and in Firefox `["xyz", "xxxx", "test", undefined, "apple"]`. -## Have doubt in this question ?? + #### 14. What will be the output of the following code? @@ -433,7 +411,7 @@ console.log(bar + false); - String + Boolean -> Concatenation - String + String -> Concatenation -## Have doubt in this question ?? + #### 15. What will be the output of the following code? @@ -444,7 +422,7 @@ console.log(y); > Above code will output `undefined` as output. According to `associativity` rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is `undefined` and assigned to `z` and then `y` would be assigned the value of z and then `z` would be assign value `1`. -## Have doubt in this question ?? + #### 16. What will be the output of the following code? @@ -484,7 +462,7 @@ var foo = function bar() { // bar is undefined here ``` -## Have doubt in this question ?? + @@ -773,7 +751,7 @@ Unlike function calls and method calls, a constructor call `new Employee('John D The primary role of the constructor function is to initialize the object. -## Have doubt in this question ?? + @@ -822,7 +800,7 @@ In Javascript function defined inside has access to outer function variable and - Function can be pass as a parameter to another function - Function can be returned from function -## Have doubt in this question ?? + @@ -877,7 +855,7 @@ methodObject.display(); Here methodObject is an object and display is a method which is associated with methodObject. -## Have doubt in this question ?? + @@ -913,7 +891,7 @@ function testCallBack(callback) { } testCallBack(display); // Here display function is being passed as callback ``` -## Have doubt in this question ?? + ## Question 27 @@ -1018,7 +996,7 @@ console.log(MyNamespace.Singleton.getInstance().publicMethod()); The singleton implemented above is easy to understand. The singleton class maintains a static reference to the lone singleton instance and return that reference from the static getInstance() method. -## Have doubt in this question ?? + @@ -3329,7 +3307,7 @@ Answer: 1) 720 -## Have doubt in this question ?? + ##Contributing From 1ab8a654f5233f7ad7c192564fa72de0b657525c Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 10 Dec 2017 21:13:33 +0100 Subject: [PATCH 055/141] Update README.md formatting --- README.md | 261 +++++++++++++++++++++++------------------------------- 1 file changed, 113 insertions(+), 148 deletions(-) diff --git a/README.md b/README.md index f986eac..6f279f0 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Yuri Katkov from [Flashcards.js](http://flashcardsjs.com) became a co-author and the rights holder of the book. He will improve the questions and add some more from his collections of flashcards and will make sure to produce an unbeatable guide for frontend inteviews. -## 1. Difference between `undefined` and `not defined` in JavaScript +## Question 1. Difference between `undefined` and `not defined` in JavaScript > In JavaScript if you try to use a variable that doesn't exist and has not been declared, then JavaScript will throw an error `var name is not defined` and the script will stop execute thereafter. But If you use `typeof undeclared_variable` then it will return `undefined`. Before starting further discussion let's understand the difference between declaration and definition. @@ -37,7 +37,7 @@ console.log(y); // Output: ReferenceError: y is not defined [http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration](http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration) -## 2. What will be the output of the following code? +## Question 2. What will be the output of the following code? ```javascript var y = 1; @@ -70,7 +70,7 @@ console.log(k); // output 1function ``` -## 3. What is the drawback of creating true private in JavaScript? +## Question 3. What is the drawback of creating true private in JavaScript? > One of the drawback of creating a true private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. ```javascript @@ -103,7 +103,7 @@ Here each instance variable `emp1`, `emp2`, `emp3` has own copy of increaseSalar So as recommendation don't go for a private method unless it's necessary. -## 4.What is “closure” in javascript? Provide an example? +## Question 4. What is “closure” in javascript? Provide an example? > A closure is a function defined inside another function (called parent function) and has access to the variable which is declared and defined in parent function scope. The closure has access to variable in three scopes: @@ -146,7 +146,7 @@ innerFuncVar = y globalVar = abc ``` -## 5. Write a mul function which will properly when invoked as below syntax. +## Question 5. Write a mul function which will properly when invoked as below syntax. ```javascript console.log(mul(2)(3)(4)); // output : 24 @@ -174,7 +174,7 @@ In Javascript function defined inside has access to outer function variable and - Function can be pass as a parameter to another function - Function can be returned from function -### 6. How to empty an array in JavaScript? +## Question 6. How to empty an array in JavaScript? For instance: ```javascript @@ -245,7 +245,7 @@ while(arrayList.length) { Above implementation can also empty the array. But not recommended to use often. -### 7. How to check if an object is an array or not? +## Question 7. How to check if an object is an array or not? > The best way to find whether an object is instance of a particular class or not using `toString` method from `Object.prototype` ```javascript @@ -307,7 +307,7 @@ Array.isArray(arrayList); `Array.isArray` is supported by Chrome 5, Firefox 4.0, IE 9, Opera 10.5 and Safari 5 -#### 8. What will be the output of the following code? +## Question 8. What will be the output of the following code? ```javascript var output = (function(x) { @@ -321,7 +321,7 @@ console.log(output); > Above code will output `0` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **local variable**. `delete` operator doesn't affect local variable. -#### 9. What will be the output of the following code? +## Question 9. What will be the output of the following code? ```javascript var x = 1; @@ -336,7 +336,7 @@ console.log(output); > Above code will output `1` as output. `delete` operator is used to delete property from object. Here `x` is not an object it's **global variable** of type `number`. -#### 10. What will be the output of the following code? +## Question 10. What will be the output of the following code? ```javascript var x = { foo : 1}; @@ -351,7 +351,7 @@ console.log(output); > Above code will output `undefined` as output. `delete` operator is used to delete a property from an object. Here `x` is an object which has foo as a property and from self-invoking function we are deleting foo property of object `x` and after deletion we are trying to reference deleted property `foo` which result `undefined`. -#### 11. What will be the output of the following code? +## Question 11. What will be the output of the following code? ```javascript var Employee = { @@ -367,7 +367,7 @@ console.log(emp1.company); `emp1` object doesn't have **company** as its own property. you can test it `console.log(emp1.hasOwnProperty('company')); //output : false` However, we can delete company property directly from `Employee` object using `delete Employee.company` or we can also delete from `emp1` object using `__proto__` property `delete emp1.__proto__.company`. -#### 12. What is `undefined x 1` in JavaScript +## Question 12. What is `undefined x 1` in JavaScript ```javascript var trees = ["redwood", "bay", "cedar", "oak", "maple"]; @@ -380,7 +380,7 @@ when you run above code and do `console.log(trees);` in chrome developer console -#### 13. What will be the output of the following code? +## Question 13. What will be the output of the following code? ```javascript var trees = ["xyz", "xxxx", "test", "ryan", "apple"]; @@ -394,7 +394,7 @@ So when delete operator removes an array element that deleted element is not lon -#### 14. What will be the output of the following code? +## Question 14. What will be the output of the following code? ```javascript var bar = true; @@ -412,8 +412,7 @@ console.log(bar + false); - String + String -> Concatenation - -#### 15. What will be the output of the following code? +## Question 15. What will be the output of the following code? ```javascript var z = 1, y = z = typeof y; @@ -424,7 +423,7 @@ console.log(y); -#### 16. What will be the output of the following code? +## Question 16. What will be the output of the following code? ```javascript // NFE (Named Function Expression @@ -466,7 +465,7 @@ var foo = function bar() { -#### 17. What is the difference between declaring a function in below format? +## Question 17. What is the difference between declaring a function in below format? ```javascript var foo = function() { @@ -534,7 +533,7 @@ if(testCondition) {// If testCondition is true then ``` -#### 18. what is function hoisting in JavaScript? +## Question 18. what is function hoisting in JavaScript? **Function Expression** ```javascript @@ -570,7 +569,7 @@ foo = function foo() { foo(); // Now foo is defined here ``` -#### 19. What will be the output of the following code? +## Question 19. What will be the output of the following code? ```javascript var salary = "1000$"; @@ -599,7 +598,7 @@ var salary = "1000$"; })(); ``` -#### 20. What is the `instanceof` operator in JavaScript? what would be the output of the following code? +## Question 20. What is the `instanceof` operator in JavaScript? what would be the output of the following code? ```javascript function foo() { @@ -647,7 +646,7 @@ So the `new foo() instanceof foo` return `false`; Ref Link: [http://stackoverflow.com/questions/2449254/what-is-the-instanceof-operator-in-javascript](http://stackoverflow.com/questions/2449254/what-is-the-instanceof-operator-in-javascript) -#### 21. If we have JavaScript associative array as below code: +## Question 21. If we have JavaScript associative array as below code: ```javascript var counterArray = { @@ -696,8 +695,7 @@ console.log(Object.length(counterArray)); **Bonus**: We can also use `Underscore` (recommended, as it's lightweight) to calculate object length. -## Question 22 -### Difference between `Function`, `Method` and `Constructor` calls in JavaScript. +## Question 22. Difference between `Function`, `Method` and `Constructor` calls in JavaScript. If your are familiar with Object-oriented programming, More likely familiar to thinking of functions, methods, and class constructors as three separate things. But In JavaScript, these are just three different usage patterns of one single construct. functions : The simplest usages of function call: @@ -752,11 +750,7 @@ Unlike function calls and method calls, a constructor call `new Employee('John D The primary role of the constructor function is to initialize the object. - - - -## Question 23 -### What would be the output of the following code? +## Question 23. What would be the output of the following code? ```javascript function User(name) { @@ -771,8 +765,7 @@ The output of above code would be `USA`. Here `new User("xyz")` creates a brand Let say `new User("xyz")` crated a object called `foo` and returned now `foo["location"]` would be assigned value as `USA` and `person` is referencing to `foo["location"]`. -## Question 24 -### Write a mul function which will output when invoked as below syntax. +## Question 24. Write a mul function which will output when invoked as below syntax. ```javascript console.log(mul(2)(3)(4)); // output : 24 @@ -804,8 +797,7 @@ In Javascript function defined inside has access to outer function variable and -## Question 25 -### What is the difference between a method and a function in javascript? +## Question 25. What is the difference between a method and a function in javascript? A function is a piece of code that is called by name and function itself not associated with any object and not defined inside any object. It can be passed data to operate on (i.e. parameter) and can optionally return data (the return value). ```javascript @@ -859,8 +851,7 @@ Here methodObject is an object and display is a method which is associated with -## Question 26 -### What is JavaScript Self-Invoking anonymous function or Self-Executing anonymous function. +## Question 26. What is JavaScript Self-Invoking anonymous function or Self-Executing anonymous function. A `self-invoking` anonymous function also called `self-executing anonymous function` runs immediately or automatically when we define it and self-invoking anonymous function doesn't have any name at all. Self-Invoking anonymous function syntax: ```javascript @@ -894,8 +885,7 @@ testCallBack(display); // Here display function is being passed as callback -## Question 27 -### Describe Singleton Pattern In JavaScript? +## Question 27. Describe Singleton Pattern In JavaScript? The singleton pattern is the most commonly used design pattern and one that you will probably is more than any others. It provides a great way to wrap the code into a logical unit that can be accessed through a single variable. The Singleton design pattern is used when only one instance of an object is needed throughout the lifetime of an application. In JavaScript, there is a different way to achieve singleton object than any other object oriented supported language (Java, C++). In JavaScript Singleton pattern have many uses, they can be used for NameSpacing, which reduce the number of global variables in your page (prevent from polluting global space), organizing the code in a consistent manner, which increase the readability and maintainability of your pages. There are two important points in the traditional definition of Singleton pattern: @@ -1000,8 +990,7 @@ The singleton implemented above is easy to understand. The singleton class maint -## Question 28 -##### What are the way by which we can create object in JavaScript ? +## Question 28. What are the way by which we can create object in JavaScript ? **Method 1:** `Function Based` @@ -1064,8 +1053,7 @@ employee.getName = function(){ ``` **Note:** As a best practices object literal way is used to create object over this method. -## Question 29 -##### Write a function called deepClone which takes an object and creates a object copy of it. +## Question 29. Write a function called deepClone which takes an object and creates a object copy of it. ``` javascript var newObject = deepClone(obj); @@ -1103,8 +1091,7 @@ var personalDetail = { ``` So when we do deep clone then we should copy every property (including the nested object). -## Question 30 -##### Best way to detect `undefined` object property in JavaScript. +## Question 30. Best way to detect `undefined` object property in JavaScript. > Suppose we have given an object `person` @@ -1132,8 +1119,7 @@ if(typeof person.salary === 'undefined'){ console.log("salary is undefined here because we haven't declared"); } ``` -## Question 31 -##### Write a function called `Clone` which takes an object and creates a object copy of it but not copy deep property of object. +## Question 31. Write a function called `Clone` which takes an object and creates a object copy of it but not copy deep property of object. ```javascript var objectLit = {foo : 'Bar'}; @@ -1153,8 +1139,7 @@ function Clone(object){ } ``` -## Question 32 -##### Best way to detect `undefined` object property in JavaScript. +## Question 32. Best way to detect `undefined` object property in JavaScript. > Suppose we have given an object `person` @@ -1182,8 +1167,7 @@ if(typeof person.salary === 'undefined'){ console.log("salary is undefined here because we haven't declared"); } ``` -## Question 33 -##### How to check whether a key exist in a JavaScript object or not. +## Question 33. How to check whether a key exist in a JavaScript object or not. >Let say we have `person` object with property **name** and **age** @@ -1220,8 +1204,7 @@ console.log(person.hasOwnProperty('name')); // print true console.log(person.hasOwnProperty('salary')); // print false ``` -## Question 34 -##### Best way to detect `undefined` object property in JavaScript. +## Question 34. Best way to detect `undefined` object property in JavaScript. > Suppose we have given an object `person` @@ -1249,8 +1232,7 @@ if(typeof person.salary === 'undefined'){ console.log("salary is undefined here because we haven't declared"); } ``` -## Question 35 -##### How to check whether a key exist in a JavaScript object or not. +## Question 35. How to check whether a key exist in a JavaScript object or not. >Let say we have `person` object with property **name** and **age** @@ -1287,8 +1269,7 @@ console.log(person.hasOwnProperty('name')); // print true console.log(person.hasOwnProperty('salary')); // print false ``` -## Question 36 -##### What is best way to detect an arrays object on JavaScript ? +## Question 36. What is best way to detect an arrays object on JavaScript ? >We always encounter in such situation where we need to know whether value is type of array or not. @@ -1355,8 +1336,7 @@ function(value){ } ``` -## Question 37 -##### Best way to detect reference values of any type in JavaScript ? +## Question 37. Best way to detect reference values of any type in JavaScript ? > In Javascript Object are called as reference type, Any value other then primitive is definitely a reference type. There are several built-in reference type such as **Object**, **Array**, **Function**, **Date**, **null** and **Error**. @@ -1398,8 +1378,7 @@ console.log(emp1 instanceof Employee); // true console.log(emp1 instanceof Object); // true ``` -## Question 38 -##### Describe Object-Based inheritance in JavaScript. +## Question 38. Describe Object-Based inheritance in JavaScript. > Object-based inheritance also called prototypal inheritance in which we one object inherit from another object without invoking a constructor function. @@ -1450,8 +1429,7 @@ In above example, emp1 is created with it's own value for name, so calling **dis >Object created in this manner give you full control over newly created object. You are free to add, remove any properties and method you want. -## Question 39 -##### Describe Type-Based inheritance in JavaScript. +## Question 39. Describe Type-Based inheritance in JavaScript. >Type-based inheritance works with constructor function instead of object, It means we need to call constructor function of the object from which you want to inherit. @@ -1512,8 +1490,7 @@ console.log(name in obj); // true ``` Type-based inheritance is best used with developer defined constructor function rather than natively in JavaScript. In addition to this also allows flexibility in how we create similar type of object. -## Question 40 -##### How we can prevent modification of object in JavaScript ?. +## Question 40. How we can prevent modification of object in JavaScript ?. > ECMAScript 5 introduce several methods to prevent modification of object which lock down object to ensure that no one, accidentally or otherwise, change functionality of Object. @@ -1623,8 +1600,7 @@ delete employee.name; // fails silently unless it's in strict mode ``` -## Question 44 -##### Write a log function which will add prefix `(your message)` to every message you log using console.log ? +## Question 44. Write a log function which will add prefix `(your message)` to every message you log using console.log ? > For example, If you log `console.log("Some message")` then output should be **(your message) Some message** Logging error message or some informative message is always required when you dealing with client side JavaScript using console.log method. Some time you want to add some prefix to identify message generated log from your application hence you would like to prefix your app name in every console.log. @@ -1649,8 +1625,7 @@ console.log(appLog("Some error message")); //output of above console: 'your app name Some error message' ``` -## Question 45 -##### Write a function which will test string as a literal and as an object ? +## Question 45 . Write a function which will test string as a literal and as an object ? For example: We can create string using string literal and using String constructor function. @@ -1672,8 +1647,7 @@ For example: We can create string using string literal and using String construc console.log(isString(ltrlStr)); // true console.log(isString(objStr)); // true ``` -## Question 46 -##### What is typical use case for anonymous function in JavaScript ? +## Question 46 . What is typical use case for anonymous function in JavaScript ? > Anonymous functions basically used in following scenario. @@ -1736,8 +1710,7 @@ If your answer is yes then go and create named function rather anonymous functio 1. It can reduce a bit of code, particularly in recursive function and in callback function. 2. Avoid needless global namespace pollutions. -## Question 47 -##### How to set a default parameter value ? +## Question 47 . How to set a default parameter value ? > If you are coming from python/c# you might be using default value for function parameter incase value(formal parameter) has not been passed. For Instance : @@ -1796,8 +1769,7 @@ sentEmail({ }, 'Yahoo Mail'); ``` -## Question 48 -##### Write code for merge two JavaScript Object dynamically. +## Question 48. Write code for merge two JavaScript Object dynamically. > Let say you have two object ```javascript @@ -1846,8 +1818,7 @@ function merge(toObj, fromObj) { } } ``` -## Question 49 -##### What is non-enumerable property in JavaScript and how can create ? +## Question 49. What is non-enumerable property in JavaScript and how can create ? >Object can have properties that don't show up when you iterate through object using for...in loop or using Object.keys() to get an array of property names. This properties is know as non-enumerable properties. @@ -1894,8 +1865,7 @@ Changing non-enumerable property value will return error in `strict mode`. In no **Object.defineProperty()** is also let you create read-only properties as we saw above, we are not able to modify phoneNo value of a person object. -## Question 50 -##### What is Function binding ? +## Question 50. What is Function binding ? > Function binding falls in advance JavaScript category and this is very popular technique to use in conjunction with event handler and callback function to preserve code execution context while passing function as a parameter. @@ -1936,11 +1906,11 @@ btn.addEventListener('click', clickHandler.handleClick.bind(clickHandler)); `bind` method is available to all the function similar to call and apply method which take argument value of `this`. -#Objective Question +# Coding Questions ## Hoisting -###1. console.log(employeeId); +### 1. console.log(employeeId); 1. Some Value 2. Undefined @@ -1949,7 +1919,7 @@ btn.addEventListener('click', clickHandler.handleClick.bind(clickHandler)); Answer: 4) ReferenceError: employeeId is not defined -###2. What would be the output of following code? +### 2. What would be the output of following code? ```javascript console.log(employeeId); @@ -1963,7 +1933,7 @@ var employeeId = '19000'; Answer: 2) undefined -###3. What would be the output of following code? +### 3. What would be the output of following code? ```javascript var employeeId = '1234abe'; @@ -1980,7 +1950,7 @@ var employeeId = '1234abe'; Answer: 2) undefined -###4. What would be the output of following code? +### 4. What would be the output of following code? ```javascript var employeeId = '1234abe'; @@ -2000,7 +1970,7 @@ var employeeId = '1234abe'; Answer: 2) undefined -###5. What would be the output of following code? +### 5. What would be the output of following code? ```javascript (function() { @@ -2018,7 +1988,7 @@ Answer: 2) undefined Answer: 1) undefined -###6. What would be the output of following code? +### 6. What would be the output of following code? ```javascript var employeeId = 'abc123'; @@ -2037,7 +2007,7 @@ console.log(employeeId); Answer: 2) '123bcd' -###7. What would be the output of following code? +### 7. What would be the output of following code? ```javascript var employeeId = 'abc123'; @@ -2059,7 +2029,7 @@ console.log(employeeId); Answer: 3) 'abc123' -###8. What would be the output of following code? +### 8. What would be the output of following code? ```javascript var employeeId = 'abc123'; @@ -2082,7 +2052,7 @@ foo(); Answer: 2) 'function' -###9. What would be the output of following code? +### 9. What would be the output of following code? ```javascript function foo() { @@ -2104,7 +2074,7 @@ foo(); Answer: 1) undefined -###10. What would be the output of following code? +### 10. What would be the output of following code? ```javascript (function foo() { @@ -2130,7 +2100,7 @@ Answer: 3) function function ## Object -###1. What would be the output of following code ? +### 1. What would be the output of following code ? ```javascript (function() { @@ -2157,7 +2127,7 @@ Answer: 3) function function Answer: 3) ["name", "salary", "country", "phoneNo"] -###2. What would be the output of following code ? +### 2. What would be the output of following code ? ```javascript (function() { @@ -2184,7 +2154,7 @@ Answer: 3) ["name", "salary", "country", "phoneNo"] Answer: 4) ["name", "salary", "country"] -###3. What would be the output of following code ? +### 3. What would be the output of following code ? ```javascript (function() { @@ -2207,7 +2177,7 @@ Answer: 4) ["name", "salary", "country"] Answer: 2) false false -###4. What would be the output of following code ? +### 4. What would be the output of following code ? ```javascript (function() { @@ -2224,7 +2194,7 @@ Answer: 2) false false Answer: 2) false false -###5. What would be the output of following code ? +### 5. What would be the output of following code ? ```javascript (function() { @@ -2245,7 +2215,7 @@ Answer: 2) false false Answer: 2) false false -###6. What would be the output of following code ? +### 6. What would be the output of following code ? ```javascript (function() { @@ -2264,7 +2234,7 @@ Answer: 2) false false Answer: 2) false false -###7. What would be the output of following code ? +### 7. What would be the output of following code ? ```javascript (function() { @@ -2283,7 +2253,7 @@ Answer: 2) false false Answer: 4) true true -###8. What would be the output of following code ? +### 8. What would be the output of following code ? ```javascript (function() { @@ -2304,7 +2274,7 @@ Answer: 4) true true Answer: 3) true true true true -###9. What would be the output of following code ? +### 9. What would be the output of following code ? ```javascript (function() { @@ -2324,7 +2294,7 @@ Answer: 3) true true true true Answer: 2) bar bar -###10. What would be the output of following code ? +### 10. What would be the output of following code ? ```javascript (function() { @@ -2346,7 +2316,7 @@ Answer: 2) bar bar Answer: 3) foo foo -###11. What would be the output of following code ? +### 11. What would be the output of following code ? ```javascript (function() { @@ -2370,7 +2340,7 @@ Answer: 2) undefined undefined ## Array -###1. What would be the output of following code? +### 1. What would be the output of following code? ```javascript (function() { @@ -2387,7 +2357,7 @@ Answer: 2) undefined undefined Answer: 3) ["100"] 1 -###2. What would be the output of following code? +### 2. What would be the output of following code? ```javascript (function() { @@ -2408,7 +2378,7 @@ Answer: 3) ["100"] 1 Answer: 1) [] [] [Array[5]] 1 -###3. What would be the output of following code? +### 3. What would be the output of following code? ```javascript (function () { @@ -2426,7 +2396,7 @@ Answer: 1) [] [] [Array[5]] 1 Answer: 1) 11 -###4. What would be the output of following code? +### 4. What would be the output of following code? ```javascript (function(){ @@ -2444,7 +2414,7 @@ Answer: 1) 11 Answer: 3) 6 -###5. What would be the output of following code? +### 5. What would be the output of following code? ```javascript (function(){ @@ -2462,7 +2432,7 @@ Answer: 3) 6 Answer: 1) [ 'dog', 'rat', 'goat', 'cow', 'horse', 'cat' ] -###6. What would be the output of following code? +### 6. What would be the output of following code? ```javascript (function(){ @@ -2481,7 +2451,7 @@ Answer: 1) [ 'dog', 'rat', 'goat', 'cow', 'horse', 'cat' ] Answer: 1) 1 -1 -1 4 -###7. What would be the output of following code? +### 7. What would be the output of following code? ```javascript (function(){ @@ -2499,7 +2469,7 @@ Answer: 1) 1 -1 -1 4 Answer: 2) 1 6 -1 -###8. What would be the output of following code? +### 8. What would be the output of following code? ```javascript (function(){ @@ -2524,7 +2494,7 @@ Answer: 2) 1 6 -1 Answer: 3) [ 2, 4, 8, 12, 16 ] true -###9. What would be the output of following code? +### 9. What would be the output of following code? ```javascript (function(){ @@ -2563,7 +2533,7 @@ Answer: 1) [ 2, '12', true ] [ 2, '12', true ] [ 2, '12', true ] -###10. What would be the output of following code? +### 10. What would be the output of following code? ```javascript (function(){ @@ -2603,7 +2573,7 @@ Answer: 1) [ 'bar', 'john', 'ritz' ] [] [ 'foo', 'bar', 'john', 'ritz' ] -###11. What would be the output of following code? +### 11. What would be the output of following code? ```javascript (function(){ @@ -2621,7 +2591,7 @@ Answer: 1) [ 'bar', 'john', 'ritz' ] Answer: 1. [ 'bar', 'john' ] [] [ 'foo' ] -###12. What would be the output of following code? +### 12. What would be the output of following code? ```javascript (function(){ @@ -2640,7 +2610,7 @@ Answer: 3. [ 15, 16, 2, 23, 42, 8 ] ## Function: -###1. What would be the output of following code ? +### 1. What would be the output of following code ? ```javascript function funcA(){ @@ -2665,7 +2635,7 @@ console.log(funcA()); Answer: 1) -###2. What would be the output of following code ? +### 2. What would be the output of following code ? ```javascript var obj = { @@ -2685,7 +2655,7 @@ console.log(obj.innerMessage); Answer: 4) undefined true -###3. What would the output of following code ? +### 3. What would the output of following code ? ```javascript var obj = { @@ -2705,7 +2675,7 @@ console.log(obj.innerMessage()); Answer: 1) Hello -###4. What would the output of following code ? +### 4. What would the output of following code ? ```javascript var obj = { @@ -2726,7 +2696,7 @@ console.log(obj.innerMessage()); Answer: 3) undefined -###5. What would the output of following code ? +### 5. What would the output of following code ? ```javascript var obj = { @@ -2748,7 +2718,7 @@ console.log(obj.innerMessage()); Answer: 2) 'Hello' -###6. What would the output of following code ? +### 6. What would the output of following code ? ```javascript function myFunc(){ @@ -2766,7 +2736,7 @@ console.log(myFunc()); Answer: 3) undefined -###7. What would the output of following code ? +### 7. What would the output of following code ? ```javascript function myFunc(){ @@ -2784,7 +2754,7 @@ console.log(myFunc()); Answer: 2) 'Hi John' -###8. What would the output of following code ? +### 8. What would the output of following code ? ```javascript function myFunc() { @@ -2801,7 +2771,7 @@ console.log(myFunc()); Answer: 2) 'Hi John' -###9. What would the output of following code ? +### 9. What would the output of following code ? ```javascript function myFunc(param1,param2) { @@ -2819,7 +2789,7 @@ console.log(myFunc("a","b","c","d")); Answer: a) 2 2 2 -###10. What would the output of following code ? +### 10. What would the output of following code ? ```javascript function myFunc() { @@ -2839,7 +2809,7 @@ Answer: 2) 0 2 4 ## Object Oriented -###1. What would the output of following code ? +### 1. What would the output of following code ? ```javascript function Person(name, age){ @@ -2869,7 +2839,7 @@ Answer: 1) John Person ## Scopes -###1. What would the output of following code ? +### 1. What would the output of following code ? ```javascript function passWordMngr() { @@ -2892,7 +2862,7 @@ console.log(userInfo.userName); Answer: 3) 12345678 undefined -###2. What would the output of following code ? +### 2. What would the output of following code ? ```javascript var employeeId = 'aq123'; @@ -2909,7 +2879,7 @@ console.log(Employee.employeeId); Answer: 4) undefined -###3. What would the output of following code ? +### 3. What would the output of following code ? ```javascript var employeeId = 'aq123'; @@ -2931,7 +2901,7 @@ console.log(new Employee().employeeId); Answer: 2) bq1uy 1BJKSJ bq1uy -###4. What would the output of following code ? +### 4. What would the output of following code ? ```javascript var employeeId = 'aq123'; @@ -2954,7 +2924,7 @@ Answer: 1) foo123 aq123 ## Call, Apply, Bind -###1. What would the output of following code ? +### 1. What would the output of following code ? ```javascript (function() { @@ -2973,7 +2943,7 @@ Answer: 1) foo123 aq123 Answer: 4) [ 'W', 'o', 'r', 'l', 'd' ] -###2. What would the output of following code ? +### 2. What would the output of following code ? ```javascript (function() { @@ -3004,7 +2974,7 @@ Answer: 4) [ 'W', 'o', 'r', 'l', 'd' ] Answer: 1) Total amount left in account: 5600 Total amount left in account: 5300 -###3. What would the output of following code ? +### 3. What would the output of following code ? ```javascript (function() { @@ -3036,7 +3006,7 @@ Answer: 1) Total amount left in account: 5600 Total amount left in account: 5300 Answer: 1) 5600 5300 5100 -###4. What would the output of following code ? +### 4. What would the output of following code ? ```javascript (function() { @@ -3068,7 +3038,7 @@ Answer: 1) 5600 5300 5100 Answer: 2) 3600 3300 3100 -###5. What would the output of following code ? +### 5. What would the output of following code ? ```javascript (function greetNewCustomer() { @@ -3085,7 +3055,7 @@ Answer: 2) 3600 3300 3100 Answer: 1) Hello John -###6. What would the output of following code ? +### 6. What would the output of following code ? ```javascript (function greetNewCustomer() { @@ -3104,7 +3074,7 @@ Answer: 1) Hello John ## Callback Function -###1. What would the output of following code ? +### 1. What would the output of following code ? ```javascript function getDataFromServer(apiUrl){ @@ -3129,7 +3099,7 @@ getDataFromServer('www.google.com').then(function(name){ Answer: 1) John -###2. What would the output of following code ? +### 2. What would the output of following code ? ```javascript (function(){ @@ -3177,7 +3147,7 @@ Answer: 1) [ 2, 8, 15, 16, 23, 42 ] ## Return Statement -###1. What would the output of following code ? +### 1. What would the output of following code ? ```javascript (function(){ @@ -3199,7 +3169,7 @@ Answer: 1) [ 2, 8, 15, 16, 23, 42 ] Answer: 4) Uncaught TypeError: Cannot read property 'fullName' of undefined -###2. What would the output of following code ? +### 2. What would the output of following code ? ```javascript function getNumber(){ @@ -3217,7 +3187,7 @@ console.log(numb); Answer: 1) 5 -###3. What would the output of following code ? +### 3. What would the output of following code ? ```javascript function getNumber(){ @@ -3235,7 +3205,7 @@ console.log(numb); Answer: 2) undefined -###4**. What would the output of following code ? +### 4**. What would the output of following code ? ```javascript function mul(x){ @@ -3257,7 +3227,7 @@ console.log(mul(2)(3)[1](4)); Answer: 1) 6, 10 -###5**. What would the output of following code ? +### 5**. What would the output of following code ? ```javascript function mul(x) { @@ -3281,7 +3251,7 @@ console.log(mul(2)(3).sum(4)); Answer: 1) 6, 10 -###6. What would the output of following code ? +### 6. What would the output of following code ? ```javascript function mul(x) { @@ -3310,17 +3280,12 @@ Answer: 1) 720 -##Contributing - -I'm always welcome to feedback on how the book can be improved, and more questions can be added. If you think you have some question then please add that and open a pull request. - -####Note: All contributor to this book will be added as contributor in Book Last page by default, So if you have contributed and don't wanted to be included then please write an email to me at nihantanu@gmail.com - -##For any other query: +## Contributing +We always appreciate your feedback on how the book can be improved, and more questions can be added. If you think you have some question then please add that and open a pull request. -##License +## License This book is released under a Creative Commons Attribution-Noncommercial- No Derivative Works 3.0 United States License. From 9942571a35797e7c975cabae5f70e320ea3c548e Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Thu, 28 Dec 2017 01:15:06 +0100 Subject: [PATCH 056/141] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 6f279f0..6e80e5f 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,9 @@ # 123-JavaScript-Interview-Questions +This Book will be completed by June 2018 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](https://goo.gl/forms/c8ubV1tWBBdz6fJP2). + + ## Great news! Yuri Katkov from [Flashcards.js](http://flashcardsjs.com) became a co-author and the rights holder of the book. He will improve the questions and add some more from his collections of flashcards and will make sure to produce an unbeatable guide for frontend inteviews. From 9ea8fbe5c7293fefca33e38d0f25db800c9ebe1c Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 30 Dec 2017 15:33:26 +0100 Subject: [PATCH 057/141] Update README.md replaced duplicated questions with a stub --- README.md | 96 ++----------------------------------------------------- 1 file changed, 3 insertions(+), 93 deletions(-) diff --git a/README.md b/README.md index 6e80e5f..034efdf 100644 --- a/README.md +++ b/README.md @@ -768,35 +768,7 @@ The output of above code would be `USA`. Here `new User("xyz")` creates a brand Let say `new User("xyz")` crated a object called `foo` and returned now `foo["location"]` would be assigned value as `USA` and `person` is referencing to `foo["location"]`. -## Question 24. Write a mul function which will output when invoked as below syntax. - -```javascript -console.log(mul(2)(3)(4)); // output : 24 -console.log(mul(4)(3)(4)); // output : 48 -``` - -Below is code followed by an explanation how it works: - -```javascript -function mul (x) { - return function (y) { // anonymous function - return function (z) { // anonymous function - return x * y * z; - }; - }; -} -``` - -Here `mul` function accept the first argument and return anonymous function which take the second parameter and return anonymous function which take the third parameter and return multiplication of arguments which is being passed in successive. - -In Javascript function defined inside has access to outer function variable and function is a first class object so it can be returned by a function as well and passed as the argument in another function. -- A function is an instance of the Object type -- A function can have properties and has a link back to its constructor method -- Function can be stored as variable -- Function can be pass as a parameter to another function -- Function can be returned from function - - +## Question 24. Suggest your question! @@ -1207,70 +1179,8 @@ console.log(person.hasOwnProperty('name')); // print true console.log(person.hasOwnProperty('salary')); // print false ``` -## Question 34. Best way to detect `undefined` object property in JavaScript. - -> Suppose we have given an object `person` - -```javascript -var person = { - name: 'Nishant', - age : 24 -} -``` -here `person` object has `name` and `age` property. Now we are trying to access **salary** property which we haven't declared on person object so while accessing it will return undefined. So how we will ensure whether property is undefined or not before performing some operation over it. - -**Explanation:** - -We can use `typeof` operator to check undefined - -```javascript -if(typeof someProperty === 'undefined'){ - console.log('something is undefined here'); -} -``` -Now we are trying to access salary property of person object. - -```javascript -if(typeof person.salary === 'undefined'){ - console.log("salary is undefined here because we haven't declared"); -} -``` -## Question 35. How to check whether a key exist in a JavaScript object or not. - ->Let say we have `person` object with property **name** and **age** - -```javascript -var person = { - name: 'Nishant', - age: 24 -} -``` -Now we want to check whether `name` property exist in `person` object or not ? - -In JavaScript object can have own property, in above example name and age is own property of person object. Object also have some of inherited property of base object like toString is inherited property of person object. - -So how we will check whether property is own property or inherited property. - -Method 1: We can use `in` operator on objet to check own property or inherited property. - -```javascript -console.log('name' in person); // checking own property print true -console.log('salary' in person); // checking undefined property print false -``` -`in` operator also look into inherited property if it doesn't find property defined as own property. For instance If I check existence of toString property as we know that we haven't declared this property on person object so `in` operator look into there base property. - -Here - -```javascript -console.log('toString' in person); // Will print true -``` -If we want to test property of object instance not inherited properties then we will use `hasOwnProperty` method of object instance. - -```javascript -console.log(person.hasOwnProperty('toString')); // print false -console.log(person.hasOwnProperty('name')); // print true -console.log(person.hasOwnProperty('salary')); // print false -``` +## Question 34. Suggest your question! +## Question 35. Suggest your question! ## Question 36. What is best way to detect an arrays object on JavaScript ? From 95ec9847b3840a54a8dcb7e1dba1a991123473e5 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 30 Dec 2017 15:36:30 +0100 Subject: [PATCH 058/141] Update README.md #13 fixed typo --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 034efdf..238004a 100644 --- a/README.md +++ b/README.md @@ -1320,8 +1320,8 @@ emp1.displayName = function() { console.log('xyz-Anonymous'); }; -employee.displayName();// "xyz-Anonymous" -emp1.displayName(); // "Nishant" +employee.displayName(); //Nishant +emp1.displayName();//xyz-Anonymous ``` In addition to this **Object.create()** method also allows to specify a second argument which is an object containing additional properties and methods to add to the new object. From 721e62d7739cf05c04699c53275690bb8db70f32 Mon Sep 17 00:00:00 2001 From: Volodymyr Date: Sun, 22 Apr 2018 18:59:04 +0300 Subject: [PATCH 059/141] Fixed 15 question Based on the associativity property of operator `,`, the code going to be executed from left to right. `z` will equal to `undefined` after code execution. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fa9f5ad..e24c939 100644 --- a/README.md +++ b/README.md @@ -422,7 +422,7 @@ var z = 1, y = z = typeof y; console.log(y); ``` -> Above code will output `undefined` as output. According to `associativity` rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is `undefined` and assigned to `z` and then `y` would be assigned the value of z and then `z` would be assign value `1`. +> Above code will output `undefined` as output. According to `associativity` rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is `undefined` and assigned to `z` and then `y` would be assigned the value of z. From a9ce6744634a981bd2e157660320725050374673 Mon Sep 17 00:00:00 2001 From: Mark Kuba Date: Wed, 16 May 2018 09:58:48 -0700 Subject: [PATCH 060/141] Remove Question #32 (duplicate of #30) --- README.md | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/README.md b/README.md index fa9f5ad..335edca 100644 --- a/README.md +++ b/README.md @@ -1114,34 +1114,9 @@ function Clone(object){ } ``` -## Question 32. Best way to detect `undefined` object property in JavaScript. +## Question 32. Suggest your question! -> Suppose we have given an object `person` - -```javascript -var person = { - name: 'Nishant', - age : 24 -} -``` -here `person` object has `name` and `age` property. Now we are trying to access **salary** property which we haven't declared on person object so while accessing it will return undefined. So how we will ensure whether property is undefined or not before performing some operation over it. - -**Explanation:** - -We can use `typeof` operator to check undefined -```javascript -if(typeof someProperty === 'undefined'){ - console.log('something is undefined here'); -} -``` -Now we are trying to access salary property of person object. - -```javascript -if(typeof person.salary === 'undefined'){ - console.log("salary is undefined here because we haven't declared"); -} -``` ## Question 33. How to check whether a key exist in a JavaScript object or not. >Let say we have `person` object with property **name** and **age** From 56edd8e7d0991302eb3225851f719015b67a5eed Mon Sep 17 00:00:00 2001 From: Mark Kuba Date: Wed, 30 May 2018 10:01:05 -0700 Subject: [PATCH 061/141] FIX: removed duplicate question Call, Apply, Bind question #6 identical to question #5 --- README.md | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/README.md b/README.md index bf7d9c5..af8eb31 100644 --- a/README.md +++ b/README.md @@ -2943,22 +2943,7 @@ Answer: 2) 3600 3300 3100 Answer: 1) Hello John -### 6. What would the output of following code ? - -```javascript -(function greetNewCustomer() { - console.log('Hello ' + this.name); -}.bind({ - name: 'John' -})()); -``` - -1. Hello John -2. Reference Error -3. Window -4. undefined - -Answer: 1) Hello John +### 6. Suggest your question! ## Callback Function From d3fee43fa6b3c9c28e0a18ff5bb91ae85f420810 Mon Sep 17 00:00:00 2001 From: mdsaleemj Date: Wed, 6 Jun 2018 15:21:27 +0530 Subject: [PATCH 062/141] changing the logic of Object.length method allowing to take parameter which the input object whose size/length to be found --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index af8eb31..d8d6577 100644 --- a/README.md +++ b/README.md @@ -684,11 +684,11 @@ function getSize(object) { > We can also add `length` method directly on `Object` see below code. ```javascript -Object.length = function() { +Object.size = function(obj) { var count = 0; - for(key in object) { + for(key in obj) { // hasOwnProperty method check own property of object - if(object.hasOwnProperty(key)) count++; + if(obj.hasOwnProperty(key)) count++; } return count; } From ebb1197c1c03852c8a3a576f7352f32a142510f4 Mon Sep 17 00:00:00 2001 From: Artem Date: Wed, 13 Jun 2018 00:51:46 +0300 Subject: [PATCH 063/141] Question 15 fix Since typeof operator returns string representation of its operand, its worth noticing, that eventual value would be "undefined", not undefiend --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index af8eb31..11e50ec 100644 --- a/README.md +++ b/README.md @@ -422,7 +422,7 @@ var z = 1, y = z = typeof y; console.log(y); ``` -> Above code will output `undefined` as output. According to `associativity` rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is `undefined` and assigned to `z` and then `y` would be assigned the value of z. +> Above code will output string `"undefined"` as output. According to `associativity` rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is string `"undefined"` and assigned to `z` and then `y` would be assigned the value of z. From bcefd0d97c953c11ea18d7f828bb092bbec5de83 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Wed, 13 Jun 2018 10:03:05 +0200 Subject: [PATCH 064/141] Update README.md fix from @melvinwallerjr --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 11e50ec..5ea4018 100644 --- a/README.md +++ b/README.md @@ -1683,9 +1683,7 @@ name , age , addressLine1 , addressLine2 , city */ **Method 1: Using ES6, Object assign method** ```javascript -function merge(toObj,fromObj){ - return Object.assign(person,location); -} +const merge = (toObj, fromObj) => Object.assign(toObj, fromObj); ``` **Method 2: Without using in-built function** From a9bbe8035c188132b9f10cb49d0622c8015b25fe Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Thu, 14 Jun 2018 19:02:23 +0200 Subject: [PATCH 065/141] Update README.md typo fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5ea4018..10f6a8f 100644 --- a/README.md +++ b/README.md @@ -861,7 +861,7 @@ testCallBack(display); // Here display function is being passed as callback ## Question 27. Describe Singleton Pattern In JavaScript? -The singleton pattern is the most commonly used design pattern and one that you will probably is more than any others. It provides a great way to wrap the code into a logical unit that can be accessed through a single variable. The Singleton design pattern is used when only one instance of an object is needed throughout the lifetime of an application. +The singleton pattern is the most commonly used JavaScript design pattern and one that you will probably be aware of more than any others. It provides a great way to wrap the code into a logical unit that can be accessed through a single variable. The Singleton design pattern is used when only one instance of an object is needed throughout the lifetime of an application. In JavaScript, there is a different way to achieve singleton object than any other object oriented supported language (Java, C++). In JavaScript Singleton pattern have many uses, they can be used for NameSpacing, which reduce the number of global variables in your page (prevent from polluting global space), organizing the code in a consistent manner, which increase the readability and maintainability of your pages. There are two important points in the traditional definition of Singleton pattern: - There should be only one instance allowed for a class and From cc3637dc0caad772a3a677bc800d2ca6d575bb23 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Thu, 14 Jun 2018 19:18:00 +0200 Subject: [PATCH 066/141] Update README.md typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f4501e7..fd48314 100644 --- a/README.md +++ b/README.md @@ -1288,7 +1288,7 @@ console.log(emp1.displayName()); // output "Nishant" Above example create a new object `emp1` that inherits from `employee`. Here the inheritance occur as emp1's prototype is set to employee. After this emp1 is able to access the same properties and method on employee until new properties or method with the same name are defined. -**For Instance:** Defining displayName() method on emp1 automatically override the employee displayName. +**For Instance:** Defining `displayName()` method on `emp1` will not automatically override the employee `displayName`. ```javascript emp1.displayName = function() { From e3b7873bf38098df4e807e2fe60952ecb8557480 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Fri, 22 Jun 2018 11:25:59 +0200 Subject: [PATCH 067/141] Q48 location -> address Thanks to @persevereC who proposed this changin in issue #40 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fd48314..462ae0e 100644 --- a/README.md +++ b/README.md @@ -1666,7 +1666,7 @@ var person = { age : 24 } -var location = { +var address = { addressLine1 : 'Some Location x', addressLine2 : 'Some Location y', city : 'NewYork' @@ -1675,7 +1675,7 @@ var location = { Write merge function which will take two object and add all the own property of second object into first object. ```javascript -merge(person , location); +merge(person , address); /* Now person should have 5 properties name , age , addressLine1 , addressLine2 , city */ From 796d1c6d44d16c44baf5bcccb24238f31f01f14c Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Fri, 22 Jun 2018 23:01:13 +0200 Subject: [PATCH 068/141] Q3 fix thanks to @chief10 in #28 --- README.md | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 462ae0e..74edea7 100644 --- a/README.md +++ b/README.md @@ -73,36 +73,35 @@ console.log(k); // output 1function ``` -## Question 3. What is the drawback of creating true private in JavaScript? -> One of the drawback of creating a true private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. +## Question 3. What is the drawback of having private methods in JavaScript object? +> One of the drawback of creating a private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. ```javascript var Employee = function (name, company, salary) { - this.name = name || ""; //Public attribute default value is null - this.company = company || ""; //Public attribute default value is null - this.salary = salary || 5000; //Public attribute default value is null + this.name = name || ""; + this.company = company || ""; + this.salary = salary || 5000; // Private method var increaseSalary = function () { this.salary = this.salary + 1000; }; - // Public method - this.dispalyIncreasedSalary = function() { - increaseSalary(); - console.log(this.salary); - }; }; -// Create Employee class object +// adding the method to Employee's prototype +Employee.prototype.displayIncreasedSalary = function() { + increaseSalary(); + console.log(this.salary); +}; + +// Creating three Employee objects var emp1 = new Employee("John","Pluto",3000); -// Create Employee class object var emp2 = new Employee("Merry","Pluto",2000); -// Create Employee class object var emp3 = new Employee("Ren","Pluto",2500); ``` -Here each instance variable `emp1`, `emp2`, `emp3` has own copy of increaseSalary private method. +Here each instance variable `emp1`, `emp2`, `emp3` has own copy of increaseSalary private method. However the `displayIncreasedSalary` will only be added once to an object `Employee.prototype`. So as recommendation don't go for a private method unless it's necessary. From a4a95c48616fb6a647c0174753ce4bfaabf7582d Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 23 Jun 2018 00:46:10 +0200 Subject: [PATCH 069/141] Q15 explanation made clearer thanks to @fengshuo in #29 --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 74edea7..00bf9ba 100644 --- a/README.md +++ b/README.md @@ -421,9 +421,15 @@ var z = 1, y = z = typeof y; console.log(y); ``` -> Above code will output string `"undefined"` as output. According to `associativity` rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is string `"undefined"` and assigned to `z` and then `y` would be assigned the value of z. - +> Above code will output string `"undefined"` as output. According to `associativity` rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is string `"undefined"` and assigned to `z` and then `y` would be assigned the value of z. The overall sequence will look like that: +```javascript +var z; +z = 1; +var y; +z = typeof y; +y = z; +``` ## Question 16. What will be the output of the following code? From ee7b83d6d12c7236367fa30568df80a78729e121 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 23 Jun 2018 01:08:01 +0200 Subject: [PATCH 070/141] Q23 is improved thanks to @viktmv in #23 --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 00bf9ba..7085691 100644 --- a/README.md +++ b/README.md @@ -771,8 +771,23 @@ console.log(person); The output of above code would be `USA`. Here `new User("xyz")` creates a brand new object and created property `location` on that and `USA` has been assigned to object property location and that has been referenced by the person. -Let say `new User("xyz")` crated a object called `foo` and returned now `foo["location"]` would be assigned value as `USA` and `person` is referencing to `foo["location"]`. +Let say `new User("xyz")` created a object called `foo`. The value `"USA"` will be assigned to `foo["location"]`, but according to [ECMAScript Specification](http://www.ecma-international.org/ecma-262/6.0/#sec-assignment-operators-runtime-semantics-evaluation) , pt 12.14.4 the assignment will itself return the rightmost value: in our case it's `"USA"`. + Then it will be assigned to person. + + To better understand what's going on here, try to execute this code in console, line by line: + ```javascript +function User(name) { + this.name = name || "JsGeeks"; +} +var person; +var foo = User("xyz"); +foo["location"] = "USA"; +// the console will show you that the result of this is "USA" + +``` + + ## Question 24. Suggest your question! From a31239f2e3799385a9e471e75c5eb3202c0ba2a0 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 23 Jun 2018 15:29:09 +0200 Subject: [PATCH 071/141] Q32 new question about promises --- README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7085691..b3cbddb 100644 --- a/README.md +++ b/README.md @@ -1134,7 +1134,19 @@ function Clone(object){ } ``` -## Question 32. Suggest your question! +## Question 32. Suggest your question! What are promises and how they are useful? + +We use promises for handling asynchronous interactions in a sequential manner. The promise represents the future value. It has an internal state (`pending`, `fulfilled` and `rejected`) and works like a state machine. + +A promise object has `then` method, where you can specify what to do when the promise is fulfilled or rejected. + +You can chain `then()` blocks, thus avoiding the callback hell. You can handle errors in the `catch()` block. After a promise is set to fulfilled or rejected state, it becomes immutable. + +Also mention that you know about more sophisticated concepts: + - `async/await` which makes the code appear even more linear + - RxJS observables can be viewed as the recyclable promises + +Be sure that you can implement the promise, read [one of the articles on a topic](https://opensourceconnections.com/blog/2014/02/16/a-simple-promise-implementation-in-about-20-lines-of-javascript/), and learn the source code of the [simplest promise implementation](https://gist.github.com/softwaredoug/9044640). ## Question 33. How to check whether a key exist in a JavaScript object or not. From b9f2b3f864c8ca7d291833cf2df1372fd2a8fa52 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 23 Jun 2018 15:31:55 +0200 Subject: [PATCH 072/141] Q32 addition --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b3cbddb..f425e31 100644 --- a/README.md +++ b/README.md @@ -1136,7 +1136,7 @@ function Clone(object){ ## Question 32. Suggest your question! What are promises and how they are useful? -We use promises for handling asynchronous interactions in a sequential manner. The promise represents the future value. It has an internal state (`pending`, `fulfilled` and `rejected`) and works like a state machine. +We use promises for handling asynchronous interactions in a sequential manner. They are especially useful when we need to do an async operation and THEN do another async operation based on the results of the first one. For example, if you want to request the list of all flights and then for each flight you want to request some details about it. The promise represents the future value. It has an internal state (`pending`, `fulfilled` and `rejected`) and works like a state machine. A promise object has `then` method, where you can specify what to do when the promise is fulfilled or rejected. From a7350a1aa44dd08fb63cfaa403a632fe7abf6956 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 23 Jun 2018 15:38:10 +0200 Subject: [PATCH 073/141] Q38 markup --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f425e31..fb48b92 100644 --- a/README.md +++ b/README.md @@ -1318,7 +1318,7 @@ var emp1 = Object.create(employee); console.log(emp1.displayName()); // output "Nishant" ``` -Above example create a new object `emp1` that inherits from `employee`. Here the inheritance occur as emp1's prototype is set to employee. After this emp1 is able to access the same properties and method on employee until new properties or method with the same name are defined. +Above example create a new object `emp1` that inherits from `employee`. Here the inheritance occur as `emp1`'s prototype is set to `employee`. After this emp1 is able to access the same properties and method on employee until new properties or method with the same name are defined. **For Instance:** Defining `displayName()` method on `emp1` will not automatically override the employee `displayName`. @@ -1331,7 +1331,7 @@ employee.displayName(); //Nishant emp1.displayName();//xyz-Anonymous ``` -In addition to this **Object.create()** method also allows to specify a second argument which is an object containing additional properties and methods to add to the new object. +In addition to this **`Object.create(`)** method also allows to specify a second argument which is an object containing additional properties and methods to add to the new object. **For Example** @@ -1345,7 +1345,7 @@ var emp1 = Object.create(employee, { emp1.displayName(); // "John" employee.displayName(); // "Nishant" ``` -In above example, emp1 is created with it's own value for name, so calling **displayName()** method display `"John"` instead of `"Nishant"`. +In above example, `emp1` is created with it's own value for name, so calling **displayName()** method display `"John"` instead of `"Nishant"`. >Object created in this manner give you full control over newly created object. You are free to add, remove any properties and method you want. From b81851d7ca5073c75409f6db6bfe1b576cc367b9 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 23 Jun 2018 15:48:27 +0200 Subject: [PATCH 074/141] Q2 fixed thanks to @stevemao in #5 --- README.md | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index fb48b92..18d462c 100644 --- a/README.md +++ b/README.md @@ -50,28 +50,17 @@ if (function f() {}) { console.log(y); ``` -> Above code would give output `1undefined`. If condition statement evaluate using `eval` so `eval(function f() {})` which return `function f() {}` which is true so inside if statement code execute. `typeof f` return undefined because if statement code execute at run time, so statement inside `if` condition evaluated at run time. - +> Above code would give output `1undefined`. inside `if` statement we have `function f(){}`. Here's it's a function expression, not function statement, which is why f is not a variable. +> As a reminder, function expression is something like this: ```javascript -var k = 1; -if (1) { - eval(function foo() {}); - k += typeof foo; -} -console.log(k); +var myFunc1 = new function() {} +var myFunc2 = new function whatever() {} // whatever is not a variable here ``` - -Above code will also output `1undefined`. - +> A function statement is something like this: ```javascript -var k = 1; -if (1) { - function foo() {}; - k += typeof foo; -} -console.log(k); // output 1function +function myFunc3() {} ``` - +You can read about [function expressions](https://developer.mozilla.org/en-US/docs/web/JavaScript/Reference/Operators/function) and [function statements](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function) on MDN. ## Question 3. What is the drawback of having private methods in JavaScript object? > One of the drawback of creating a private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. From 3665176abdbdcd985faf3cb2152c638ed5d65ded Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 23 Jun 2018 17:24:54 +0200 Subject: [PATCH 075/141] couln't finishi it by June... :( --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 18d462c..f195e92 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # 123-JavaScript-Interview-Questions -This Book will be completed by June 2018 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](https://goo.gl/forms/c8ubV1tWBBdz6fJP2). +This Book will be completed by September 2018 and available to buy. If you want me to sent early copy of this book then please add your name and email address in google form here [Google Form](https://goo.gl/forms/c8ubV1tWBBdz6fJP2). ## Great news! From 2fbb4e8efd2ab3d4b2ebf3615201cbe9b27a4341 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 23 Jun 2018 17:26:36 +0200 Subject: [PATCH 076/141] promises question fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f195e92..87e6a50 100644 --- a/README.md +++ b/README.md @@ -1123,7 +1123,7 @@ function Clone(object){ } ``` -## Question 32. Suggest your question! What are promises and how they are useful? +## Question 32. What are promises and how they are useful? We use promises for handling asynchronous interactions in a sequential manner. They are especially useful when we need to do an async operation and THEN do another async operation based on the results of the first one. For example, if you want to request the list of all flights and then for each flight you want to request some details about it. The promise represents the future value. It has an internal state (`pending`, `fulfilled` and `rejected`) and works like a state machine. From 7ab444906fbece7ffa81b0d2ee44e19b562b78fe Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 23 Jun 2018 17:29:46 +0200 Subject: [PATCH 077/141] question 24 added --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 87e6a50..723f16f 100644 --- a/README.md +++ b/README.md @@ -777,9 +777,13 @@ foo["location"] = "USA"; ``` -## Question 24. Suggest your question! +## Question 24. What are Service Workers and when can you use them? +It’s a technology that allows your web application to use cached resources first, and provide default experience offline, before getting more data from the network later. This principle is commonly known as Offline First. +Service Workers actively use promises. A Service Worker has to be installed,activated and then it can react on fetch, push and sync events. + +As of 2017, Service Workers are not supported in IE and Safari. ## Question 25. What is the difference between a method and a function in javascript? A function is a piece of code that is called by name and function itself not associated with any object and not defined inside any object. It can be passed data to operate on (i.e. parameter) and can optionally return data (the return value). From 1d282e080be3ae326a28987ef381fbbc26e3e8e3 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 23 Jun 2018 17:36:13 +0200 Subject: [PATCH 078/141] question 34 added --- README.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 723f16f..443e3be 100644 --- a/README.md +++ b/README.md @@ -1179,7 +1179,25 @@ console.log(person.hasOwnProperty('name')); // print true console.log(person.hasOwnProperty('salary')); // print false ``` -## Question 34. Suggest your question! +## Question 34. What is NaN, why do we need it, and when can it break the page? +`NaN` stands for “not a number.” and it can break your table of numbers when it has an arithmetic operation that is not allowed. Here are some examples of how you can get `NaN`: + +```javascript +Math.sqrt(-5); +Math.log(-1); +parseFloat("foo"); /* this is common: you get JSON from the server, convert some strings from JSON to a number and end up with NaN in your UI. */ +``` + +`NaN` is not equal to any number, it’s not less or more than any number, also it's not equal to itself: + +```javascript +NaN !== NaN +NaN < 2 // false +NaN > 2 // false +NaN === 2 // false +``` + +To check if the current value of the variable is NaN, you have to use the `isNaN` function. ## Question 35. Suggest your question! ## Question 36. What is best way to detect an arrays object on JavaScript ? From ff3e09c750c54c2031125e6611816a156234d294 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 24 Jun 2018 00:50:14 +0200 Subject: [PATCH 079/141] question 35 added --- README.md | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 443e3be..e8f70c1 100644 --- a/README.md +++ b/README.md @@ -1197,8 +1197,34 @@ NaN > 2 // false NaN === 2 // false ``` -To check if the current value of the variable is NaN, you have to use the `isNaN` function. -## Question 35. Suggest your question! +To check if the current value of the variable is NaN, you have to use the `isNaN` function. This is why we can often see NaN in the webpages: it requires special check which a lot of developers forget to do. + +## Question 35. Fix the bug using ES5 only + +```javascript +var arr = [10, 32, 65, 2]; +for (var i = 0; i < arr.length; i++) { + setTimeout(function() { + console.log('The index of this number is: ' + i); + }, 3000); +} +``` +For ES6, you can just replace `var i` with `let i`. + +For ES5, you need to create a function scope like here: + +```javascript +var arr = [10, 32, 65, 2]; +for (var i = 0; i < arr.length; i++) { + setTimeout(function(j) { + return function () { + console.log('The index of this number is: ' + j) + }; + }(i), 3000); +} +``` + + ## Question 36. What is best way to detect an arrays object on JavaScript ? From 9192b88b0cc24f0af6f2e8df5d7115fecae05276 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 24 Jun 2018 01:03:44 +0200 Subject: [PATCH 080/141] Q1-Q15 typos and grammar fix --- README.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index e8f70c1..1e2f442 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Yuri Katkov from [Flashcards.js](http://flashcardsjs.com) became a co-author and Before starting further discussion let's understand the difference between declaration and definition. -`var x` is a declaration because you are not defining what value it holds yet, but you are declaring its existence and the need of memory allocation. +`var x` is a declaration because you are not defining what value it holds yet, but you are declaring its existence and the need for memory allocation. ```javascript var x; // declaring x @@ -62,7 +62,7 @@ function myFunc3() {} ``` You can read about [function expressions](https://developer.mozilla.org/en-US/docs/web/JavaScript/Reference/Operators/function) and [function statements](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function) on MDN. -## Question 3. What is the drawback of having private methods in JavaScript object? +## Question 3. What is the drawback of having private methods in a JavaScript object? > One of the drawback of creating a private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. ```javascript @@ -97,10 +97,10 @@ So as recommendation don't go for a private method unless it's necessary. ## Question 4. What is “closure” in javascript? Provide an example? > A closure is a function defined inside another function (called parent function) and has access to the variable which is declared and defined in parent function scope. -The closure has access to variable in three scopes: +The closure has access to the variable in three scopes: - Variable declared in his own scope - Variable declared in parent function scope -- Variable declared in global namespace +- Variable declared in the global namespace ```javascript var globalVar = "abc"; @@ -125,7 +125,7 @@ var globalVar = "abc"; })(7); // Pass 7 as parameter ``` -`innerFunction` is closure which is defined inside `outerFunction` and has access to all variable which is declared and defined in outerFunction scope. In addition to this function defined inside function as closure has access to variable which is declared in `global namespace`. +`innerFunction` is closure which is defined inside `outerFunction` and has access to all variable which is declared and defined in outerFunction scope. In addition to this function defined inside the function as closure has access to the variable which is declared in `global namespace`. Output of above code would be: @@ -156,14 +156,14 @@ function mul (x) { } ``` -Here `mul` function accept the first argument and return anonymous function which take the second parameter and return anonymous function which take the third parameter and return multiplication of arguments which is being passed in successive +Here the `mul` function accepts the first argument and returns the anonymous function which takes the second parameter and returns the anonymous function which takes the third parameter and returns the multiplication of arguments which is being passed in successive -In Javascript function defined inside has access to outer function variable and function is the first class object so it can be returned by function as well and passed as argument in another function. +In Javascript function defined inside has access to outer function variable and function is the first class object so it can be returned by the function as well and passed as an argument in another function. - A function is an instance of the Object type - A function can have properties and has a link back to its constructor method -- Function can be stored as variable -- Function can be pass as a parameter to another function -- Function can be returned from function +- A function can be stored as variable +- A function can be pass as a parameter to another function +- A function can be returned from another function ## Question 6. How to empty an array in JavaScript? For instance: @@ -199,7 +199,7 @@ console.log(anotherArrayList); // Output ['a', 'b', 'c', 'd', 'e', 'f'] arrayList.length = 0; ``` -Above code will clear the existing array by setting its length to 0. This way of empty the array also update all the reference variable which pointing to the original array. This way of empty the array is useful when you want to update all the another reference variable which pointing to `arrayList`. +Above code will clear the existing array by setting its length to 0. This way of emptying an array will also update all the reference variables that point to the original array. For Instance: @@ -255,7 +255,7 @@ function greet(param) { } ``` -However, in above implementation it might not necessary to check type for array, we can check for single value string and put array logic code in else block, let see below code for the same. +However, in above implementation it might not necessary to check the type of the array, we can check for single value string and put array logic code in else block, let see below code for the same. ```javascript function greet(param) { @@ -269,7 +269,7 @@ However, in above implementation it might not necessary to check type for array, Now it's fine we can go with above two implementations, but when we have a situation like a parameter can be `single value`, `array`, and `object` type then we will be in trouble. -Coming back to checking type of object, As we mentioned that we can use `Object.prototype.toString` +Coming back to checking the type of an object, As we mentioned that we can use `Object.prototype.toString` ```javascript if(Object.prototype.toString.call(arrayList) === '[object Array]') { @@ -324,7 +324,7 @@ var output = (function() { console.log(output); ``` -> Above code will output `1` as output. `delete` operator is used to delete property from object. Here `x` is not an object it's **global variable** of type `number`. +> Above code will output `1` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **global variable** of type `number`. ## Question 10. What will be the output of the following code? @@ -339,7 +339,7 @@ var output = (function() { console.log(output); ``` -> Above code will output `undefined` as output. `delete` operator is used to delete a property from an object. Here `x` is an object which has foo as a property and from self-invoking function we are deleting foo property of object `x` and after deletion we are trying to reference deleted property `foo` which result `undefined`. +> Above code will output `undefined` as output. `delete` operator is used to delete a property from an object. Here `x` is an object which has foo as a property and from a self-invoking function, we are deleting the `foo` property of object `x` and after deletion, we are trying to reference deleted property `foo` which result `undefined`. ## Question 11. What will be the output of the following code? @@ -367,7 +367,7 @@ delete trees[3]; when you run above code and do `console.log(trees);` in chrome developer console then you will get `["redwood", "bay", "cedar", undefined × 1, "maple"]` and when you run above code in Firefox browser console then you will get `["redwood", "bay", "cedar", undefined, "maple"]` so from these it's cleared that chrome has its own way of displaying uninitialized index in array. But when you check `trees[3] === undefined` in both of the browser you will get similar output as `true`. -**Note:** Please remember you need not check for uninitialized index of array in `trees[3] === 'undefined × 1'` it will give an error, Because `'undefined × 1'` this is just way of displaying uninitialized index of array in chrome. +**Note:** Please remember that you need not check for the uninitialized index of the array in `trees[3] === 'undefined × 1'` it will give an error because `'undefined × 1'` this is just way of displaying an uninitialized index of an array in chrome. @@ -379,7 +379,7 @@ delete trees[3]; console.log(trees.length); ``` -> Above code will output `5` as output. When we used `delete` operator for deleting an array element then, the array length is not affected from this. This holds even if you deleted all the element of array using `delete` operator. +> Above code will output `5` as output. When we used `delete` operator for deleting an array element then, the array length is not affected by this. This holds even if you deleted all elements of an array using `delete` operator. So when delete operator removes an array element that deleted element is not longer present in array. In place of value at deleted index `undefined x 1` in **chrome** and `undefined` is placed at the index. If you do `console.log(trees)` output `["xyz", "xxxx", "test", undefined × 1, "apple"]` in Chrome and in Firefox `["xyz", "xxxx", "test", undefined, "apple"]`. From 0e4ab312cd7ec3cb9dd84e4fd9f459f9c88a879e Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 24 Jun 2018 01:05:55 +0200 Subject: [PATCH 081/141] q17 grammar --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e2f442..c213107 100644 --- a/README.md +++ b/README.md @@ -462,7 +462,7 @@ var foo = function bar() { -## Question 17. What is the difference between declaring a function in below format? +## Question 17. What is the difference between declaring a function in the formats listed below? ```javascript var foo = function() { From 614f0786de8ec8a554391997b9b4b2e1f5c6b6d3 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 24 Jun 2018 01:08:52 +0200 Subject: [PATCH 082/141] grammar --- README.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index c213107..224f9ee 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ if (function f() {}) { console.log(y); ``` -> Above code would give output `1undefined`. inside `if` statement we have `function f(){}`. Here's it's a function expression, not function statement, which is why f is not a variable. +> The code above would give output `1undefined`. inside `if` statement we have `function f(){}`. Here's it's a function expression, not function statement, which is why f is not a variable. > As a reminder, function expression is something like this: ```javascript var myFunc1 = new function() {} @@ -182,7 +182,7 @@ How can we empty above array? arrayList = []; ``` -Above code will set the variable `arrayList` to a new empty array. This is recommended if you don't have **references to the original array** `arrayList` anywhere else because It will actually create a new empty array. You should be careful with this way of empty the array, because if you have referenced this array from another variable, then the original reference array will remain unchanged, Only use this way if you have only referenced the array by its original variable `arrayList`. +The code above will set the variable `arrayList` to a new empty array. This is recommended if you don't have **references to the original array** `arrayList` anywhere else because It will actually create a new empty array. You should be careful with this way of empty the array, because if you have referenced this array from another variable, then the original reference array will remain unchanged, Only use this way if you have only referenced the array by its original variable `arrayList`. For Instance: @@ -199,7 +199,7 @@ console.log(anotherArrayList); // Output ['a', 'b', 'c', 'd', 'e', 'f'] arrayList.length = 0; ``` -Above code will clear the existing array by setting its length to 0. This way of emptying an array will also update all the reference variables that point to the original array. +The code above will clear the existing array by setting its length to 0. This way of emptying an array will also update all the reference variables that point to the original array. For Instance: @@ -309,7 +309,7 @@ var output = (function(x) { console.log(output); ``` -> Above code will output `0` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **local variable**. `delete` operator doesn't affect local variable. +> The code above will output `0` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **local variable**. `delete` operator doesn't affect local variable. ## Question 9. What will be the output of the following code? @@ -324,7 +324,7 @@ var output = (function() { console.log(output); ``` -> Above code will output `1` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **global variable** of type `number`. +> The code above will output `1` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **global variable** of type `number`. ## Question 10. What will be the output of the following code? @@ -339,7 +339,7 @@ var output = (function() { console.log(output); ``` -> Above code will output `undefined` as output. `delete` operator is used to delete a property from an object. Here `x` is an object which has foo as a property and from a self-invoking function, we are deleting the `foo` property of object `x` and after deletion, we are trying to reference deleted property `foo` which result `undefined`. +> The code above will output `undefined` as output. `delete` operator is used to delete a property from an object. Here `x` is an object which has foo as a property and from a self-invoking function, we are deleting the `foo` property of object `x` and after deletion, we are trying to reference deleted property `foo` which result `undefined`. ## Question 11. What will be the output of the following code? @@ -353,7 +353,7 @@ delete emp1.company console.log(emp1.company); ``` -> Above code will output `xyz` as output. Here `emp1` object got company as **prototype** property. delete operator doesn't delete prototype property. +> The code above will output `xyz` as output. Here `emp1` object got company as **prototype** property. delete operator doesn't delete prototype property. `emp1` object doesn't have **company** as its own property. you can test it `console.log(emp1.hasOwnProperty('company')); //output : false` However, we can delete company property directly from `Employee` object using `delete Employee.company` or we can also delete from `emp1` object using `__proto__` property `delete emp1.__proto__.company`. @@ -379,7 +379,7 @@ delete trees[3]; console.log(trees.length); ``` -> Above code will output `5` as output. When we used `delete` operator for deleting an array element then, the array length is not affected by this. This holds even if you deleted all elements of an array using `delete` operator. +> The code above will output `5` as output. When we used `delete` operator for deleting an array element then, the array length is not affected by this. This holds even if you deleted all elements of an array using `delete` operator. So when delete operator removes an array element that deleted element is not longer present in array. In place of value at deleted index `undefined x 1` in **chrome** and `undefined` is placed at the index. If you do `console.log(trees)` output `["xyz", "xxxx", "test", undefined × 1, "apple"]` in Chrome and in Firefox `["xyz", "xxxx", "test", undefined, "apple"]`. @@ -395,7 +395,7 @@ console.log(bar + true); console.log(bar + false); ``` -> Above code will output `1, "truexyz", 2, 1` as output. General guideline for addition of operator: +> The code above will output `1, "truexyz", 2, 1` as output. General guideline for addition of operator: - Number + Number -> Addition - Boolean + Number -> Addition - Number + String -> Concatenation @@ -410,7 +410,7 @@ var z = 1, y = z = typeof y; console.log(y); ``` -> Above code will output string `"undefined"` as output. According to `associativity` rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is string `"undefined"` and assigned to `z` and then `y` would be assigned the value of z. The overall sequence will look like that: +> The code above will output string `"undefined"` as output. According to `associativity` rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is string `"undefined"` and assigned to `z` and then `y` would be assigned the value of z. The overall sequence will look like that: ```javascript var z; @@ -428,7 +428,7 @@ var foo = function bar() { return 12; }; typeof bar(); ``` -> Above code will output `Reference Error` as output. For making above code work you can re-write above code as follow: +> The code above will output `Reference Error` as output. For making above code work you can re-write above code as follow: **Sample 1** @@ -548,7 +548,7 @@ var foo = function foo() { }; ``` -Above code behind the scene look something like below code: +The code above behind the scene look something like below code: ```javascript var foo = undefined; @@ -580,7 +580,7 @@ var salary = "1000$"; })(); ``` -> Above code will output: `undefined, 5000$`. JavaScript has hoisting concept where newbie gets tricked. In above code, you might be expecting `salary` to retain it values from outer scope until the point that `salary` was re-declared in the inner scope. But due to `hoisting` salary value was `undefined` instead. To understand it better have a look of the following code, here `salary` variable is hoisted and declared at the top in function scope and while doing console.log it's result `undefined` and after that it's been redeclared and assigned `5000$`. +> The code above will output: `undefined, 5000$`. JavaScript has hoisting concept where newbie gets tricked. In above code, you might be expecting `salary` to retain it values from outer scope until the point that `salary` was re-declared in the inner scope. But due to `hoisting` salary value was `undefined` instead. To understand it better have a look of the following code, here `salary` variable is hoisted and declared at the top in function scope and while doing console.log it's result `undefined` and after that it's been redeclared and assigned `5000$`. ```javascript var salary = "1000$"; From 57face1b4bc1582d2fc97b150ad91dbac30f69d4 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 24 Jun 2018 01:18:19 +0200 Subject: [PATCH 083/141] Q25 addition --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 224f9ee..ff6ea8f 100644 --- a/README.md +++ b/README.md @@ -786,6 +786,7 @@ Service Workers actively use promises. A Service Worker has to be installed,acti As of 2017, Service Workers are not supported in IE and Safari. ## Question 25. What is the difference between a method and a function in javascript? + A function is a piece of code that is called by name and function itself not associated with any object and not defined inside any object. It can be passed data to operate on (i.e. parameter) and can optionally return data (the return value). ```javascript @@ -816,7 +817,7 @@ A function can be self-invoking anonymous function or named self-invoking functi In a case of named self-invoking anonymous function or anonymous self-invoking function, there is no need of call function explicitly. -A method is a piece of code that is called by name and that is associated with the object. In most respects it is identical to function call except for some key difference: +A method is a piece of code that is called by name and that is associated with the object. Methods are funtions. In most respects it is identical to function call except for some key difference: - It is implicitly passed for the object for which it was called. - It is able to operate on data that is contained within the class (remembering that an object is an instance of a class- the class is the definition, the object is an instance of that) - Method call is always associated with object From f856666bd9afb09baf4ee6ac9e8d110808fdd4bf Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 24 Jun 2018 01:26:54 +0200 Subject: [PATCH 084/141] q1-7 formatting and grammar --- README.md | 58 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index ff6ea8f..3654ddd 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,11 @@ This Book will be completed by September 2018 and available to buy. If you want Yuri Katkov from [Flashcards.js](http://flashcardsjs.com) became a co-author and the rights holder of the book. He will improve the questions and add some more from his collections of flashcards and will make sure to produce an unbeatable guide for frontend inteviews. -## Question 1. Difference between `undefined` and `not defined` in JavaScript -> In JavaScript if you try to use a variable that doesn't exist and has not been declared, then JavaScript will throw an error `var name is not defined` and the script will stop execute thereafter. But If you use `typeof undeclared_variable` then it will return `undefined`. +## Question 1. What's the difference between `undefined` and `not defined` in JavaScript + +### Answer + +In JavaScript if you try to use a variable that doesn't exist and has not been declared, then JavaScript will throw an error `var name is not defined` and the script will stop execute thereafter. But If you use `typeof undeclared_variable` then it will return `undefined`. Before starting further discussion let's understand the difference between declaration and definition. @@ -23,14 +26,14 @@ console.log(x); //output: undefined `var x = 1` is both declaration and definition (also we can say we are doing initialisation), Here declaration and assignment of value happen inline for variable x, In JavaScript every variable declaration and function declaration brings to the top of its current scope in which it's declared then assignment happen in order this term is called `hoisting`. -> A variable that is declared but not define and when we try to access it, It will result `undefined`. +A variable can be declared but not defined. When we try to access it, It will result `undefined`. ```javascript var x; // Declaration if(typeof x === 'undefined') // Will return true ``` -> A variable that neither declared nor defined when we try to reference such variable then It result `not defined`. +A variable can be neither declared nor defined. When we try to reference such variable then the result will be `not defined`. ```javascript console.log(y); // Output: ReferenceError: y is not defined @@ -49,21 +52,27 @@ if (function f() {}) { } console.log(y); ``` +### Answer -> The code above would give output `1undefined`. inside `if` statement we have `function f(){}`. Here's it's a function expression, not function statement, which is why f is not a variable. -> As a reminder, function expression is something like this: +The code above would give the output `1undefined`. inside `if` statement we have `function f(){}`. Here's it's a function expression, not function statement, which is why f is not a variable. + +As a reminder, function expression is something like this: ```javascript var myFunc1 = new function() {} var myFunc2 = new function whatever() {} // whatever is not a variable here ``` -> A function statement is something like this: + +A function statement is something like this: ```javascript function myFunc3() {} ``` You can read about [function expressions](https://developer.mozilla.org/en-US/docs/web/JavaScript/Reference/Operators/function) and [function statements](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function) on MDN. ## Question 3. What is the drawback of having private methods in a JavaScript object? -> One of the drawback of creating a private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. + +### Answer + +One of the drawback of creating a private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. ```javascript var Employee = function (name, company, salary) { @@ -94,8 +103,11 @@ Here each instance variable `emp1`, `emp2`, `emp3` has own copy of increaseSalar So as recommendation don't go for a private method unless it's necessary. -## Question 4. What is “closure” in javascript? Provide an example? -> A closure is a function defined inside another function (called parent function) and has access to the variable which is declared and defined in parent function scope. +## Question 4. What is “closure” in javascript? Can you provide an example? + +### Answer + +A closure is a function defined inside another function (called parent function) and has access to the variable which is declared and defined in parent function scope. The closure has access to the variable in three scopes: - Variable declared in his own scope @@ -143,8 +155,9 @@ globalVar = abc console.log(mul(2)(3)(4)); // output : 24 console.log(mul(4)(3)(4)); // output : 48 ``` +### Answer -> Below is code followed by an explanation how it works: +Below is the code followed by the explanation of how it works: ```javascript function mul (x) { @@ -172,11 +185,13 @@ For instance: var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; ``` -How can we empty above array? +How can we empty the array above? -> There are a couple of ways by which we can empty an array, So let's discuss all the possible way by which we can empty an array. +### Answer -### Method 1 +There are a couple of ways by which we can empty an array, So let's discuss all the possible way by which we can empty an array. + +#### Method 1 ```javascript arrayList = []; @@ -193,7 +208,7 @@ arrayList = []; // Empty the array console.log(anotherArrayList); // Output ['a', 'b', 'c', 'd', 'e', 'f'] ``` -### Method 2 +#### Method 2 ```javascript arrayList.length = 0; @@ -210,7 +225,7 @@ arrayList.length = 0; // Empty the array by setting length to 0 console.log(anotherArrayList); // Output [] ``` -### Method 3 +#### Method 3 ```javascript arrayList.splice(0, arrayList.length); @@ -225,7 +240,7 @@ arrayList.splice(0, arrayList.length); // Empty the array by setting length to 0 console.log(anotherArrayList); // Output [] ``` -### Method 4 +#### Method 4 ```javascript while(arrayList.length) { @@ -237,7 +252,10 @@ Above implementation can also empty the array. But not recommended to use often. ## Question 7. How to check if an object is an array or not? -> The best way to find whether an object is instance of a particular class or not using `toString` method from `Object.prototype` + +### Answer + +The best way to find whether an object is instance of a particular class or not using `toString` method from `Object.prototype` ```javascript var arrayList = [1 , 2, 3]; @@ -458,10 +476,6 @@ var foo = function bar() { // bar is undefined here ``` - - - - ## Question 17. What is the difference between declaring a function in the formats listed below? ```javascript From c9c0e81f3fcac54ab8b81c4289c344f2d8bff867 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 24 Jun 2018 01:39:23 +0200 Subject: [PATCH 085/141] q7 grammar --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3654ddd..5178c6e 100644 --- a/README.md +++ b/README.md @@ -261,7 +261,7 @@ The best way to find whether an object is instance of a particular class or not var arrayList = [1 , 2, 3]; ``` -One of the best use cases of type checking of an object is when we do method overloading in JavaScript. For understanding this let say we have a method called `greet` which take one single string and also a list of string, so making our `greet` method workable in both situation we need to know what kind of parameter is being passed, is it single value or list of value? +One of the best use cases of type checking of an object is when we do method overloading in JavaScript. To understand this, let's say we have a method called `greet` which can take a single string and also a list of strings. To make our `greet` method workable in both situation we need to know what kind of parameter is being passed: is it single value or list of values? ```javascript function greet(param) { @@ -273,7 +273,7 @@ function greet(param) { } ``` -However, in above implementation it might not necessary to check the type of the array, we can check for single value string and put array logic code in else block, let see below code for the same. +However, in the above implementation it might not necessary to check the type of the array, we can check for single value string and put array logic code in else block, let see below code for the same. ```javascript function greet(param) { @@ -285,7 +285,7 @@ However, in above implementation it might not necessary to check the type of the } ``` -Now it's fine we can go with above two implementations, but when we have a situation like a parameter can be `single value`, `array`, and `object` type then we will be in trouble. +Now it's fine we can go with the previous two implementations, but when we have a situation like a parameter can be `single value`, `array`, and `object` type then we will be in trouble. Coming back to checking the type of an object, As we mentioned that we can use `Object.prototype.toString` From 037a0eb85eb7453e849355df02650ed148cb61d2 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 24 Jun 2018 13:06:49 +0200 Subject: [PATCH 086/141] q7-q14 grammar --- README.md | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 5178c6e..881c7ff 100644 --- a/README.md +++ b/README.md @@ -326,8 +326,9 @@ var output = (function(x) { console.log(output); ``` +### Answer -> The code above will output `0` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **local variable**. `delete` operator doesn't affect local variable. +The code above will output `0` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **local variable**. `delete` operator doesn't affect local variables. ## Question 9. What will be the output of the following code? @@ -341,8 +342,9 @@ var output = (function() { console.log(output); ``` +### Answer -> The code above will output `1` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **global variable** of type `number`. +The code above will output `1` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **global variable** of type `number`. ## Question 10. What will be the output of the following code? @@ -356,8 +358,9 @@ var output = (function() { console.log(output); ``` +### Answer -> The code above will output `undefined` as output. `delete` operator is used to delete a property from an object. Here `x` is an object which has foo as a property and from a self-invoking function, we are deleting the `foo` property of object `x` and after deletion, we are trying to reference deleted property `foo` which result `undefined`. +The code above will output `undefined` as output. `delete` operator is used to delete a property from an object. Here `x` is an object which has foo as a property and from a self-invoking function, we are deleting the `foo` property of object `x` and after deletion, we are trying to reference deleted property `foo` which result `undefined`. ## Question 11. What will be the output of the following code? @@ -371,7 +374,8 @@ delete emp1.company console.log(emp1.company); ``` -> The code above will output `xyz` as output. Here `emp1` object got company as **prototype** property. delete operator doesn't delete prototype property. +### Answer +The code above will output `xyz` as output. Here `emp1` object got company as **prototype** property. delete operator doesn't delete prototype property. `emp1` object doesn't have **company** as its own property. you can test it `console.log(emp1.hasOwnProperty('company')); //output : false` However, we can delete company property directly from `Employee` object using `delete Employee.company` or we can also delete from `emp1` object using `__proto__` property `delete emp1.__proto__.company`. @@ -383,7 +387,12 @@ var trees = ["redwood", "bay", "cedar", "oak", "maple"]; delete trees[3]; ``` -when you run above code and do `console.log(trees);` in chrome developer console then you will get `["redwood", "bay", "cedar", undefined × 1, "maple"]` and when you run above code in Firefox browser console then you will get `["redwood", "bay", "cedar", undefined, "maple"]` so from these it's cleared that chrome has its own way of displaying uninitialized index in array. But when you check `trees[3] === undefined` in both of the browser you will get similar output as `true`. +### Answer + - When you run the code above and do `console.log(trees);` in chrome developer console then you will get `["redwood", "bay", "cedar", undefined × 1, "maple"]`. + - In the recent versions of Chrome you will see the word `empty` of `undefined x 1`. + - When you run the same code in Firefox browser console then you will get `["redwood", "bay", "cedar", undefined, "maple"]` + +Clearly we can see that Chrome has its own way of displaying uninitialized index in arrays. However when you check `trees[3] === undefined` in any browser you will get similar output as `true`. **Note:** Please remember that you need not check for the uninitialized index of the array in `trees[3] === 'undefined × 1'` it will give an error because `'undefined × 1'` this is just way of displaying an uninitialized index of an array in chrome. @@ -396,10 +405,10 @@ var trees = ["xyz", "xxxx", "test", "ryan", "apple"]; delete trees[3]; console.log(trees.length); ``` +### Answer +The code above will output `5` as output. When we used `delete` operator for deleting an array element then, the array length is not affected by this. This holds even if you deleted all elements of an array using `delete` operator. -> The code above will output `5` as output. When we used `delete` operator for deleting an array element then, the array length is not affected by this. This holds even if you deleted all elements of an array using `delete` operator. - -So when delete operator removes an array element that deleted element is not longer present in array. In place of value at deleted index `undefined x 1` in **chrome** and `undefined` is placed at the index. If you do `console.log(trees)` output `["xyz", "xxxx", "test", undefined × 1, "apple"]` in Chrome and in Firefox `["xyz", "xxxx", "test", undefined, "apple"]`. +So when delete operator removes an array element that deleted element is no longer present in the array. In place of value at deleted index `undefined x 1` in **chrome** and `undefined` is placed at the index. If you do `console.log(trees)` output `["xyz", "xxxx", "test", undefined × 1, "apple"]` in Chrome and in Firefox `["xyz", "xxxx", "test", undefined, "apple"]`. @@ -412,8 +421,9 @@ console.log(bar + "xyz"); console.log(bar + true); console.log(bar + false); ``` +### Answer -> The code above will output `1, "truexyz", 2, 1` as output. General guideline for addition of operator: +The code above will output `1, "truexyz", 2, 1` as output. Here's a general guideline for the plus operator: - Number + Number -> Addition - Boolean + Number -> Addition - Number + String -> Concatenation @@ -427,8 +437,9 @@ console.log(bar + false); var z = 1, y = z = typeof y; console.log(y); ``` +### Answer -> The code above will output string `"undefined"` as output. According to `associativity` rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is string `"undefined"` and assigned to `z` and then `y` would be assigned the value of z. The overall sequence will look like that: +The code above will output string `"undefined"` as output. According to associativity rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is string `"undefined"` and assigned to `z` and then `y` would be assigned the value of z. The overall sequence will look like that: ```javascript var z; @@ -446,7 +457,9 @@ var foo = function bar() { return 12; }; typeof bar(); ``` -> The code above will output `Reference Error` as output. For making above code work you can re-write above code as follow: +### Answer + +The output will be `Reference Error`. To fix the bug we can try to rewrite the code a little bit: **Sample 1** @@ -489,6 +502,7 @@ function bar() { // Some code }; ``` +### Answer The main difference is function `foo` is defined at `run-time` whereas function `bar` is defined at parse time. For understanding It in better way let see below code : @@ -512,7 +526,7 @@ function bar() { ``` -The another advantage of first-one way of declaration that you can declare function based on certain condition for example: +Another advantage of first-one way of declaration that you can declare function based on certain condition for example: ```javascript ``` -Another advantage of first-one way of declaration that you can declare function based on certain condition for example: +Another advantage of declaring the function using function expressions is that you can declare function based on certain condition, for example: ```javascript ``` -But If you try to run similar code in the following format, it would give an error +But If you try to run similar code in the following format, it would result in an error ```javascript ``` -Another advantage of declaring the function using function expressions is that you can declare function based on certain condition, for example: - -```javascript - -``` - -But If you try to run similar code in the following format, it would result in an error - -```javascript - -``` - ## Question 18. what is function hoisting in JavaScript? **Function Expression** From 10afe78aefe9b11b9459ada083a4d2c2541d803a Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Tue, 14 Aug 2018 15:50:16 +0200 Subject: [PATCH 102/141] q2 replaced thanks to @fssq1993 and @yairEO --- README.md | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 456751b..b3739e4 100644 --- a/README.md +++ b/README.md @@ -43,30 +43,21 @@ console.log(y); // Output: ReferenceError: y is not defined [http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration](http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration) -## Question 2. What will be the output of the following code? +## Question 2. For which value of `x` the results of the following statements are not the same? + ```javascript -var y = 1; -if (function f() {}) { - y += typeof f; -} -console.log(y); +// if( x <= 100 ) {...} +if( !(x > 100) ) {...} ``` ### Answer -The code above would give the output `1undefined`. inside `if` statement we have `function f(){}`. Here's it's a function expression, not function statement, which is why f is not a variable. +`NaN <= 100` is `false` and `NaN > 100` is also `false`, so if the +value of `x` is `NaN`, the statements are not the same. -As a reminder, function expression is something like this: -```javascript -var myFunc1 = new function() {} -var myFunc2 = new function whatever() {} // whatever is not a variable here -``` +The same holds true for any value of x that being converted to Number, returns NaN, e.g.: `undefined`, `[1,2,5]`, `{a:22}` , etc. -A function statement is something like this: -```javascript -function myFunc3() {} -``` -You can read about [function expressions](https://developer.mozilla.org/en-US/docs/web/JavaScript/Reference/Operators/function) and [function statements](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function) on MDN. +This is why you need to pay attention when you deal with numeric variables. `NaN` can’t be equal, less than or more than any other numeric value, so the only reliable way to check if the value is `NaN`, is to use `isNaN()` function. ## Question 3. What is the drawback of having private methods in a JavaScript object? From 7fa59a4824bece9d26cb00ede848a0387ca3a7a0 Mon Sep 17 00:00:00 2001 From: AndroidFanatic Date: Mon, 20 Aug 2018 10:23:13 +0530 Subject: [PATCH 103/141] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b3739e4..a6e2385 100644 --- a/README.md +++ b/README.md @@ -130,7 +130,7 @@ innerFuncVar = y globalVar = abc ``` -## Question 5. Write a mul function which will properly when invoked as below syntax. +## Question 5. Write a mul function which will work properly when invoked with following syntax. ```javascript console.log(mul(2)(3)(4)); // output : 24 From e15b5d6306adbac9418896954a8a21953f4a0bb7 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 2 Sep 2018 00:29:38 +0300 Subject: [PATCH 104/141] grammar fix --- README.md | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index a6e2385..543cb42 100644 --- a/README.md +++ b/README.md @@ -2645,7 +2645,7 @@ console.log(obj.innerMessage); Answer: 4) undefined true -### 3. What would the output of following code ? +### 3. What would be the output of following code ? ```javascript var obj = { @@ -2665,7 +2665,7 @@ console.log(obj.innerMessage()); Answer: 1) Hello -### 4. What would the output of following code ? +### 4. What would be the output of following code ? ```javascript var obj = { @@ -2686,7 +2686,7 @@ console.log(obj.innerMessage()); Answer: 3) undefined -### 5. What would the output of following code ? +### 5. What would be the output of following code ? ```javascript var obj = { @@ -2708,7 +2708,7 @@ console.log(obj.innerMessage()); Answer: 2) 'Hello' -### 6. What would the output of following code ? +### 6. What would be the output of following code ? ```javascript function myFunc(){ @@ -2726,7 +2726,7 @@ console.log(myFunc()); Answer: 3) undefined -### 7. What would the output of following code ? +### 7. What would be the output of following code ? ```javascript function myFunc(){ @@ -2744,7 +2744,7 @@ console.log(myFunc()); Answer: 2) 'Hi John' -### 8. What would the output of following code ? +### 8. What would be the output of following code ? ```javascript function myFunc() { @@ -2761,7 +2761,7 @@ console.log(myFunc()); Answer: 2) 'Hi John' -### 9. What would the output of following code ? +### 9. What would be the output of following code ? ```javascript function myFunc(param1,param2) { @@ -2779,7 +2779,7 @@ console.log(myFunc("a","b","c","d")); Answer: a) 2 2 2 -### 10. What would the output of following code ? +### 10. What would be the output of following code ? ```javascript function myFunc() { @@ -2799,7 +2799,7 @@ Answer: 2) 0 2 4 ## Object Oriented -### 1. What would the output of following code ? +### 1. What would be the output of following code ? ```javascript function Person(name, age){ @@ -2829,7 +2829,7 @@ Answer: 1) John Person ## Scopes -### 1. What would the output of following code ? +### 1. What would be the output of following code ? ```javascript function passWordMngr() { @@ -2852,7 +2852,7 @@ console.log(userInfo.userName); Answer: 3) 12345678 undefined -### 2. What would the output of following code ? +### 2. What would be the output of following code ? ```javascript var employeeId = 'aq123'; @@ -2869,7 +2869,7 @@ console.log(Employee.employeeId); Answer: 4) undefined -### 3. What would the output of following code ? +### 3. What would be the output of following code ? ```javascript var employeeId = 'aq123'; @@ -2891,7 +2891,7 @@ console.log(new Employee().employeeId); Answer: 2) bq1uy 1BJKSJ bq1uy -### 4. What would the output of following code ? +### 4. What would be the output of following code ? ```javascript var employeeId = 'aq123'; @@ -2914,7 +2914,7 @@ Answer: 1) foo123 aq123 ## Call, Apply, Bind -### 1. What would the output of following code ? +### 1. What would be the output of following code ? ```javascript (function() { @@ -2933,7 +2933,7 @@ Answer: 1) foo123 aq123 Answer: 4) [ 'W', 'o', 'r', 'l', 'd' ] -### 2. What would the output of following code ? +### 2. What would be the output of following code ? ```javascript (function() { @@ -2964,7 +2964,7 @@ Answer: 4) [ 'W', 'o', 'r', 'l', 'd' ] Answer: 1) Total amount left in account: 5600 Total amount left in account: 5300 -### 3. What would the output of following code ? +### 3. What would be the output of following code ? ```javascript (function() { @@ -2996,7 +2996,7 @@ Answer: 1) Total amount left in account: 5600 Total amount left in account: 5300 Answer: 1) 5600 5300 5100 -### 4. What would the output of following code ? +### 4. What would be the output of following code ? ```javascript (function() { @@ -3028,7 +3028,7 @@ Answer: 1) 5600 5300 5100 Answer: 2) 3600 3300 3100 -### 5. What would the output of following code ? +### 5. What would be the output of following code ? ```javascript (function greetNewCustomer() { @@ -3049,7 +3049,7 @@ Answer: 1) Hello John ## Callback Function -### 1. What would the output of following code ? +### 1. What would be the output of following code ? ```javascript function getDataFromServer(apiUrl){ @@ -3074,7 +3074,7 @@ getDataFromServer('www.google.com').then(function(name){ Answer: 1) John -### 2. What would the output of following code ? +### 2. What would be the output of following code ? ```javascript (function(){ @@ -3122,7 +3122,7 @@ Answer: 1) [ 2, 8, 15, 16, 23, 42 ] ## Return Statement -### 1. What would the output of following code ? +### 1. What would be the output of following code ? ```javascript (function(){ @@ -3144,7 +3144,7 @@ Answer: 1) [ 2, 8, 15, 16, 23, 42 ] Answer: 4) Uncaught TypeError: Cannot read property 'fullName' of undefined -### 2. What would the output of following code ? +### 2. What would be the output of following code ? ```javascript function getNumber(){ @@ -3162,7 +3162,7 @@ console.log(numb); Answer: 1) 5 -### 3. What would the output of following code ? +### 3. What would be the output of following code ? ```javascript function getNumber(){ @@ -3180,7 +3180,7 @@ console.log(numb); Answer: 2) undefined -### 4**. What would the output of following code ? +### 4**. What would be the output of following code ? ```javascript function mul(x){ @@ -3202,7 +3202,7 @@ console.log(mul(2)(3)[1](4)); Answer: 1) 6, 10 -### 5**. What would the output of following code ? +### 5**. What would be the output of following code ? ```javascript function mul(x) { @@ -3226,7 +3226,7 @@ console.log(mul(2)(3).sum(4)); Answer: 1) 6, 10 -### 6. What would the output of following code ? +### 6. What would be the output of following code ? ```javascript function mul(x) { From be266526816ba6b4ccfee34668db4d75a3045ce8 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Tue, 25 Sep 2018 19:56:39 +0200 Subject: [PATCH 105/141] added more questions --- README.md | 202 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 161 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 543cb42..5dd7f75 100644 --- a/README.md +++ b/README.md @@ -489,22 +489,18 @@ The main difference is function `foo` is defined at `run-time` and is called fun ```javascript // Run-Time function declaration - ``` ```javascript // Parse-Time function declaration - ``` ## Question 18. what is function hoisting in JavaScript? @@ -1177,7 +1173,7 @@ Be sure that you can implement the promise, read [one of the articles on a topic ## Question 33. How to check whether a key exist in a JavaScript object or not. ->Let say we have `person` object with property **name** and **age** +Let say we have `person` object with property **name** and **age** ```javascript var person = { @@ -1263,7 +1259,7 @@ for (var i = 0; i < arr.length; i++) { ## Question 36. What is best way to detect an arrays object on JavaScript ? ->We always encounter in such situation where we need to know whether value is type of array or not. +We always encounter in such situation where we need to know whether value is type of array or not. For Instance : Below code perform some operation based value type @@ -1279,9 +1275,21 @@ function(value){ Let's discuss some way to detect an array in JavaScript. -**Method 1 :** +**Method 1:** -Duck typing test for array type detection +Juriy Zaytsev (Also known as kangax) proposed an elegant solution to this. + +```javascript + function isArray(value){ + return Object.prototype.toString.call(value) === '[object Array]'; + } +``` +This approach is most popular way to detecting a value of type array in JavaScript and recommended to use. This approach relies on the fact that, native toString() method on a given value produce a standard string in all browser. + + +**Method 2:** + +Duck typing test for array type detection ```javascript // Duck typing arrays @@ -1300,20 +1308,11 @@ As we can see above isArray method will return true if value object have `sort` ``` Now when you check `isArray(bar)` then it will return true because bar object has sort method, But the fact is bar is not an array. -So method 1 is not a best way to detect an array as you can see it's not handle the case when some object has sort method. +So this method is not a best way to detect an array as you can see it's not handle the case when some object has sort method. -**Method 2:** +**Method 3:** -Juriy Zaytsev (Also known as kangax) proposed an elegant solution to this. - -```javascript - function isArray(value){ - return Object.prototype.toString.call(value) === '[object Array]'; - } -``` -This approach is most popular way to detecting a value of type array in JavaScript and recommended to use. This approach relies on the fact that, native toString() method on a given value produce a standard string in all browser. - ->ECMAScript 5 has introduced **Array.isArray()** method to detect an array type value. The sole purpose of this method is accurately detecting whether a value is an array or not. +ECMAScript 5 has introduced **Array.isArray()** method to detect an array type value. The sole purpose of this method is accurately detecting whether a value is an array or not. In many JavaScript libraries you may see below code for detecting an value of type array. @@ -1330,7 +1329,7 @@ function(value){ ## Question 37. Best way to detect reference values of any type in JavaScript ? -> In Javascript Object are called as reference type, Any value other then primitive is definitely a reference type. There are several built-in reference type such as **Object**, **Array**, **Function**, **Date**, **null** and **Error**. + In Javascript Object are called as reference type, Any value other then primitive is definitely a reference type. There are several built-in reference type such as **Object**, **Array**, **Function**, **Date**, **null** and **Error**. Detecting object using `typeof` operator @@ -1372,7 +1371,7 @@ console.log(emp1 instanceof Object); // true ## Question 38. Describe Object-Based inheritance in JavaScript. -> Object-based inheritance also called prototypal inheritance in which we one object inherit from another object without invoking a constructor function. + Object-based inheritance also called prototypal inheritance in which we one object inherit from another object without invoking a constructor function. The ECMAScript 5 **Object.create()** method is the easiest way for one object to inherit from another. @@ -1419,11 +1418,11 @@ employee.displayName(); // "Nishant" ``` In above example, `emp1` is created with it's own value for name, so calling **displayName()** method display `"John"` instead of `"Nishant"`. ->Object created in this manner give you full control over newly created object. You are free to add, remove any properties and method you want. +Object created in this manner give you full control over newly created object. You are free to add, remove any properties and method you want. ## Question 39. Describe Type-Based inheritance in JavaScript. ->Type-based inheritance works with constructor function instead of object, It means we need to call constructor function of the object from which you want to inherit. +Type-based inheritance works with constructor function instead of object, It means we need to call constructor function of the object from which you want to inherit. Let say we have `Person` class which has name, age, salary properties and **incrementSalary()** method. @@ -1484,7 +1483,7 @@ Type-based inheritance is best used with developer defined constructor function ## Question 40. How we can prevent modification of object in JavaScript ?. -> ECMAScript 5 introduce several methods to prevent modification of object which lock down object to ensure that no one, accidentally or otherwise, change functionality of Object. + ECMAScript 5 introduce several methods to prevent modification of object which lock down object to ensure that no one, accidentally or otherwise, change functionality of Object. There are three levels of preventing modification: @@ -1510,7 +1509,7 @@ employee.age = 24; // fails silently unless it's inside the strict mode ``` **2: Seal :** ->It is same as prevent extension, in addition to this also prevent existing properties and methods from being deleted. +It is same as prevent extension, in addition to this also prevent existing properties and methods from being deleted. To seal an object, we use **Object.seal()** method. you can check whether an object is sealed or not using **Object.isSealed();** @@ -1535,7 +1534,7 @@ when an object is sealed, its existing properties and methods can't be removed. **3: Freeze :** ->Same as seal, In addition to this prevent existing properties methods from being modified (All properties and methods are read only). +Same as seal, In addition to this prevent existing properties methods from being modified (All properties and methods are read only). To freeze an object, use Object.freeze() method. We can also determine whether an object is frozen using Object.isFrozen(); @@ -1593,7 +1592,7 @@ delete employee.name; // fails silently unless it's in strict mode ## Question 44. Write a log function which will add prefix `(your message)` to every message you log using console.log ? -> For example, If you log `console.log("Some message")` then output should be **(your message) Some message** + For example, If you log `console.log("Some message")` then output should be **(your message) Some message** Logging error message or some informative message is always required when you dealing with client side JavaScript using console.log method. Some time you want to add some prefix to identify message generated log from your application hence you would like to prefix your app name in every console.log. @@ -1627,7 +1626,7 @@ For example: We can create string using string literal and using String construc // using String constructor function var objStr = new String("Hi I am string object"); ``` -> We can use typeof operator to test string literal and instanceof operator to test String object. + We can use typeof operator to test string literal and instanceof operator to test String object. ```javascript function isString(str) { @@ -1641,7 +1640,7 @@ For example: We can create string using string literal and using String construc ``` ## Question 46 . What is typical use case for anonymous function in JavaScript ? -> Anonymous functions basically used in following scenario. + Anonymous functions basically used in following scenario. 1. No name is needed if function is only used in one place, then there is no need to add a name to function. @@ -1691,9 +1690,9 @@ For example: We can create string using string literal and using String construc alert("Hi I am anonymous callback function"); }); ``` -The best way to take decision for using anonymous function is to asked. +The best way to make a decision for using anonymous function is to ask the following question: -> Will the function which I am going to define will use anywhere else. + Will the function which I am going to define, be used anywhere else? If your answer is yes then go and create named function rather anonymous function. @@ -1704,7 +1703,7 @@ If your answer is yes then go and create named function rather anonymous functio ## Question 47 . How to set a default parameter value ? -> If you are coming from python/c# you might be using default value for function parameter incase value(formal parameter) has not been passed. For Instance : + If you are coming from python/c# you might be using default value for function parameter incase value(formal parameter) has not been passed. For Instance : ```python // Define sentEmail function @@ -1762,7 +1761,7 @@ sentEmail({ ``` ## Question 48. Write code for merge two JavaScript Object dynamically. -> Let say you have two object +Let say you have two objects ```javascript var person = { @@ -1787,7 +1786,7 @@ name , age , addressLine1 , addressLine2 , city */ **Method 1: Using ES6, Object assign method** ```javascript -const merge = (toObj, fromObj) => Object.assign(toObj, fromObj); +const merge = (toObj, fromObj) = Object.assign(toObj, fromObj); ``` **Method 2: Without using in-built function** @@ -1810,7 +1809,7 @@ function merge(toObj, fromObj) { ``` ## Question 49. What is non-enumerable property in JavaScript and how can create ? ->Object can have properties that don't show up when you iterate through object using for...in loop or using Object.keys() to get an array of property names. This properties is know as non-enumerable properties. +Object can have properties that don't show up when you iterate through object using for...in loop or using Object.keys() to get an array of property names. This properties is know as non-enumerable properties. Let say we have following object @@ -1857,7 +1856,7 @@ Changing non-enumerable property value will return error in `strict mode`. In no ## Question 50. What is Function binding ? -> Function binding falls in advance JavaScript category and this is very popular technique to use in conjunction with event handler and callback function to preserve code execution context while passing function as a parameter. + Function binding falls in advance JavaScript category and this is very popular technique to use in conjunction with event handler and callback function to preserve code execution context while passing function as a parameter. Let's consider the following example: @@ -1898,6 +1897,126 @@ btn.addEventListener('click', clickHandler.handleClick.bind(clickHandler)); # Coding Questions +## Passing values by reference vs by value +For a JS developer, it's crucially important to understand which values are passed by reference, +and which ones are passed by value. Remember that objects, including arrays are passed by reference +while strings, booleans and numbers are passed by value. + +### 1. What would be the output of following code? + +```javascript +var strA = "hi there"; +var strB = strA; +strB="bye there!"; +console.log (strA) +``` + +The output will `'hi there'` because we're dealing with strings here. Strings are +passed by value, that is, copied. + +### 2. What would be the output of following code? +```javascript +var objA = {prop1: 42}; +var objB = objA; +objB.prop1 = 90; +console.log(objA) +``` +The output will `{prop1: 90}` because we're dealing with objects here. Objects are +passed by reference, that is, `objA` and `objB` point to the same object in memory. + +### 3. What would be the output of following code? + +```javascript +var objA = {prop1: 42}; +var objB = objA; +objB = {}; +console.log(objA) +``` + +The output will `{prop1: 42}`. + +When we assign `objA` to `objB`, the `objB` variable will point +to the same object as the `objB` variable. + +However, when we reassign `objB` to an empty object, we simply change where `objB` variable references to. +This doesn't affect where `objA` variable references to. + +### 4. What would be the output of following code? + +```javascript +var arrA = [0,1,2,3,4,5]; +var arrB = arrA; +arrB[0]=42; +console.log(arrA) +``` + +The output will be `[42,1,2,3,4,5]`. + +Arrays are object in JavaScript and they are passed and assigned by reference. This is why +both `arrA` and `arrB` point to the same array `[0,1,2,3,4,5]`. That's why changing the first +element of the `arrB` will also modify `arrA`: it's the same array in the memory. + +### 5. What would be the output of following code? +```javascript +var arrA = [0,1,2,3,4,5]; +var arrB = arrA.slice(); +arrB[0]=42; +console.log(arrA) +``` + +The output will be `[0,1,2,3,4,5]`. + +The `slice` function copies all the elements of the array returning the new array. That's why +`arrA` and `arrB` reference two completely different arrays. + +### 5. What would be the output of following code? + +```javascript +var arrA = [{prop1: "value of array A!!"}, {someProp: "also value of array A!"}, 3,4,5]; +var arrB = arrA; +arrB[0].prop1=42; +console.log(arrA); +``` +The output will be `[{prop1: 42}, {someProp: "also value of array A!"}, 3,4,5]`. + +Arrays are object in JS, so both varaibles arrA and arrB point to the same array. Changing +`arrB[0]` is the same as changing `arrA[0]` + + +### 6. What would be the output of following code? + +```javascript +var arrA = [{prop1: "value of array A!!"}, {someProp: "also value of array A!"}]; +var arrB = arrA.slice(); +arrB[0].prop1=42; +console.log(arrA); +``` + +The output will be `[{prop1: 42}, {someProp: "also value of array A!"}, 3,4,5]`. + +The `slice` function copies all the elements of the array returning the new array. However, +it doesn't do deep copying. Instead it does shallow copying. You can imagine slice implemented like this: + + ```javascript +function slice(arr) { + var result = []; + for (i = 0; i< arr.length; i++) { + result.push(arr[i]); + } + return result; +} +``` + +Look at the line with `result.push(arr[i])`. If `arr[i]` happens to be a number or string, +it will be passed by value, in other words, copied. If `arr[i]` is an object, it will be passed by reference. + +In case of our array `arr[0]` is an object `{prop1: "value of array A!!"}`. Only the reference +to this object will be copied. This effectively means that arrays arrA and arrB share first +two elements. + +This is why changing the property of `arrB[0]` in `arrB` will also change the `arrA[0]`. + + ## Hoisting ### 1. console.log(employeeId); @@ -2088,7 +2207,7 @@ Answer: 1) undefined Answer: 3) function function -## Object +## Objects ### 1. What would be the output of following code ? @@ -2328,7 +2447,7 @@ Answer: 3) foo foo Answer: 2) undefined undefined -## Array +## Arrays ### 1. What would be the output of following code? @@ -2598,7 +2717,7 @@ Answer: 1. [ 'bar', 'john' ] [] [ 'foo' ] Answer: 3. [ 15, 16, 2, 23, 42, 8 ] -## Function: +## Functions ### 1. What would be the output of following code ? @@ -3047,7 +3166,8 @@ Answer: 1) Hello John ### 6. Suggest your question! -## Callback Function + +## Callback Functions ### 1. What would be the output of following code ? From 6aeeb8c23dca9276702291c5ed1a351318369626 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Fri, 28 Sep 2018 14:28:58 +0200 Subject: [PATCH 106/141] style --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 5dd7f75..69837e3 100644 --- a/README.md +++ b/README.md @@ -180,7 +180,7 @@ arrayList = []; The code above will set the variable `arrayList` to a new empty array. This is recommended if you don't have **references to the original array** `arrayList` anywhere else because It will actually create a new empty array. You should be careful with this way of empty the array, because if you have referenced this array from another variable, then the original reference array will remain unchanged, Only use this way if you have only referenced the array by its original variable `arrayList`. -For Instance: +For instance: ```javascript var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; // Created array @@ -197,7 +197,7 @@ arrayList.length = 0; The code above will clear the existing array by setting its length to 0. This way of emptying an array will also update all the reference variables that point to the original array. -For Instance: +For instance: ```javascript var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; // Created array @@ -1257,11 +1257,11 @@ for (var i = 0; i < arr.length; i++) { -## Question 36. What is best way to detect an arrays object on JavaScript ? +## Question 36. How to check if the value of a variable in an array? We always encounter in such situation where we need to know whether value is type of array or not. -For Instance : Below code perform some operation based value type +For instance : the code below perform some operation based value type ```javascript function(value){ @@ -1314,7 +1314,7 @@ So this method is not a best way to detect an array as you can see it's not hand ECMAScript 5 has introduced **Array.isArray()** method to detect an array type value. The sole purpose of this method is accurately detecting whether a value is an array or not. -In many JavaScript libraries you may see below code for detecting an value of type array. +In many JavaScript libraries you may see the code below for detecting an value of type array. ```javascript function(value){ @@ -1375,7 +1375,7 @@ console.log(emp1 instanceof Object); // true The ECMAScript 5 **Object.create()** method is the easiest way for one object to inherit from another. -**For Instance:** +**For instance:** ```javascript var employee = { @@ -1391,7 +1391,7 @@ console.log(emp1.displayName()); // output "Nishant" Above example create a new object `emp1` that inherits from `employee`. Here the inheritance occur as `emp1`'s prototype is set to `employee`. After this emp1 is able to access the same properties and method on employee until new properties or method with the same name are defined. -**For Instance:** Defining `displayName()` method on `emp1` will not automatically override the employee `displayName`. +**For instance:** Defining `displayName()` method on `emp1` will not automatically override the employee `displayName`. ```javascript emp1.displayName = function() { @@ -1703,7 +1703,7 @@ If your answer is yes then go and create named function rather anonymous functio ## Question 47 . How to set a default parameter value ? - If you are coming from python/c# you might be using default value for function parameter incase value(formal parameter) has not been passed. For Instance : + If you are coming from python/c# you might be using default value for function parameter incase value(formal parameter) has not been passed. For instance : ```python // Define sentEmail function @@ -1716,7 +1716,7 @@ def sentEmail(configuration, provider = 'Gmail'): There are a lot of ways by which you can achieve this in pre ES2015. -Let's understand below code by which we achieved setting default parameter value. +Let's understand the code below by which we achieved setting default parameter value. **Method 1: Setting default parameter value** From 219bfb8afa488f05f44967158628a7fe5be1e200 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 29 Sep 2018 00:25:17 +0200 Subject: [PATCH 107/141] style --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 69837e3..7fe2b3c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ It's a book about frontend interview question. We hope that it will help all javascript developers to prepare for a technical job interview. -## If you want to buy a book in paper form +## Want to by a book in paper form? Want some badass flashcards? - This Book will be completed by September 2018 and then it will be available to buy. If you want me to sent an early copy of this book, please add your name and email address in google form here [Google Form](https://goo.gl/forms/c8ubV1tWBBdz6fJP2). - If you don't want to wait, you can buy [Yuri's JavaScript Flashcards](http://flashcardsjs.com), a set of frontend interview questions sorted by popularity among the interviewers printed on beautiful poker-size flashcards. From 02913369035844ecfd03bc8162715b6894b8df76 Mon Sep 17 00:00:00 2001 From: Islam Sayed Date: Sun, 30 Sep 2018 07:52:52 +0200 Subject: [PATCH 108/141] fix typo fix typo from by to buy in line 7 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7fe2b3c..8f0a937 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ It's a book about frontend interview question. We hope that it will help all javascript developers to prepare for a technical job interview. -## Want to by a book in paper form? Want some badass flashcards? +## Want to buy a book in paper form? Want some badass flashcards? - This Book will be completed by September 2018 and then it will be available to buy. If you want me to sent an early copy of this book, please add your name and email address in google form here [Google Form](https://goo.gl/forms/c8ubV1tWBBdz6fJP2). - If you don't want to wait, you can buy [Yuri's JavaScript Flashcards](http://flashcardsjs.com), a set of frontend interview questions sorted by popularity among the interviewers printed on beautiful poker-size flashcards. From 5a01d5649995064f0d7794ff6bd1d158dcda1ae9 Mon Sep 17 00:00:00 2001 From: Islam Sayed Date: Sun, 30 Sep 2018 08:22:39 +0200 Subject: [PATCH 109/141] add output for Boolean + Boolean Add missing output for the plus operator with all Boolean values which would be "Addition" --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 7fe2b3c..bae1921 100644 --- a/README.md +++ b/README.md @@ -407,10 +407,12 @@ console.log(bar + false); The code above will output `1, "truexyz", 2, 1` as output. Here's a general guideline for the plus operator: - Number + Number -> Addition - Boolean + Number -> Addition + - Boolean + Boolean -> Addition - Number + String -> Concatenation - String + Boolean -> Concatenation - String + String -> Concatenation + ## Question 15. What will be the output of the following code? From 5aaf80884a9bce5414c21d13a696513af8a060a2 Mon Sep 17 00:00:00 2001 From: Umesh Kumar Date: Mon, 1 Oct 2018 18:04:12 +0530 Subject: [PATCH 110/141] fix typo error --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4de35de..14d0190 100644 --- a/README.md +++ b/README.md @@ -837,7 +837,7 @@ obj1.myMethod(); // will print "Hi there" following with obj1. ## Question 26. What is IIFE (Immediately Invoked Function Expression) and how it can be useful? ### Answer #### Definition -IIFE a function that runs as soon as it's defined. Usually it's anonymous (doesn't have a function name), but it also can be named. Here's an exmaple of IIFE: +IIFE a function that runs as soon as it's defined. Usually it's anonymous (doesn't have a function name), but it also can be named. Here's an example of IIFE: ```javascript (function() { From 8efd04a2d5e0d4ee957bb00bc065f16c8d1d4f2f Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 6 Oct 2018 17:17:30 +0200 Subject: [PATCH 111/141] terminological changes --- README.md | 50 ++++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 14d0190..2587739 100644 --- a/README.md +++ b/README.md @@ -477,13 +477,13 @@ var foo = function bar() { ```javascript var foo = function() { // Some code -}; +} ``` ```javascript function bar () { // Some code -}; +} ``` ### Answer @@ -502,21 +502,23 @@ The main difference is function `foo` is defined at `run-time` and is called fun bar(); // Call bar function here, It will not give an Error function bar() { console.log("Hi I am inside Foo"); -}; +} ``` -## Question 18. what is function hoisting in JavaScript? -**Function Expression** +## Question 18. In which case the function definition is not hoisted in JavaScript? + + +### Answer + +Let's take the following **function expression** ```javascript var foo = function foo() { return 12; - }; + } ``` -### Answer - -In JavaScript `var`-declared variables and functions are `hoisted`. Let's take function `hoisting` first. Basically, the JavaScript interpreter looks ahead to find all the variable declaration and hoists them to the top of the function where it's declared. For Example: +In JavaScript `var`-declared variables and functions are `hoisted`. Let's take function `hoisting` first. Basically, the JavaScript interpreter looks ahead to find all the variable declaration and hoists them to the top of the function where it's declared. For example: ```javascript foo(); // Here foo is still undefined @@ -525,7 +527,7 @@ var foo = function foo() { }; ``` -The code above behind the scene look something like below code: +The code above behind the scene look something like this: ```javascript var foo = undefined; @@ -1371,11 +1373,9 @@ console.log(emp1 instanceof Employee); // true console.log(emp1 instanceof Object); // true ``` -## Question 38. Describe Object-Based inheritance in JavaScript. - - Object-based inheritance also called prototypal inheritance in which we one object inherit from another object without invoking a constructor function. +## Question 38. How does Object.create method works JavaScript? -The ECMAScript 5 **Object.create()** method is the easiest way for one object to inherit from another. +The ECMAScript 5 **Object.create()** method is the easiest way for one object to inherit from another, without invoking a constructor function. **For instance:** @@ -1391,7 +1391,7 @@ var emp1 = Object.create(employee); console.log(emp1.displayName()); // output "Nishant" ``` -Above example create a new object `emp1` that inherits from `employee`. Here the inheritance occur as `emp1`'s prototype is set to `employee`. After this emp1 is able to access the same properties and method on employee until new properties or method with the same name are defined. +In the example above, we create a new object `emp1` that inherits from `employee`. In other words `emp1`'s prototype is set to `employee`. After this emp1 is able to access the same properties and method on employee until new properties or method with the same name are defined. **For instance:** Defining `displayName()` method on `emp1` will not automatically override the employee `displayName`. @@ -1406,7 +1406,7 @@ emp1.displayName();//xyz-Anonymous In addition to this **`Object.create(`)** method also allows to specify a second argument which is an object containing additional properties and methods to add to the new object. -**For Example** +**For example** ```javascript var emp1 = Object.create(employee, { @@ -1418,13 +1418,11 @@ var emp1 = Object.create(employee, { emp1.displayName(); // "John" employee.displayName(); // "Nishant" ``` -In above example, `emp1` is created with it's own value for name, so calling **displayName()** method display `"John"` instead of `"Nishant"`. +In the example above, `emp1` is created with it's own value for name, so calling **displayName()** method will display `"John"` instead of `"Nishant"`. Object created in this manner give you full control over newly created object. You are free to add, remove any properties and method you want. -## Question 39. Describe Type-Based inheritance in JavaScript. - -Type-based inheritance works with constructor function instead of object, It means we need to call constructor function of the object from which you want to inherit. +## Question 39. How to use constructor functions for inheritance in JavaScript? Let say we have `Person` class which has name, age, salary properties and **incrementSalary()** method. @@ -1449,7 +1447,7 @@ function Employee(company){ //Prototypal Inheritance Employee.prototype = new Person("Nishant", 24,5000); ``` -In above example, **Employee** type inherits from **Person**, which is called super types. It does so by assigning a new instance of Person to Employee prototype. After that, every instance of Employee inherits it's properties and methods from Person. +In the example above, **Employee** type inherits from **Person**. It does so by assigning a new instance of `Person` to `Employee` prototype. After that, every instance of `Employee` inherits its properties and methods from `Person`. ```javascript //Prototypal Inheritance @@ -1493,7 +1491,7 @@ There are three levels of preventing modification: No new properties or methods can be added to the object, but one can change the existing properties and method. -For Example: +For example: ```javascript var employee = { @@ -1567,7 +1565,7 @@ Frozen objects are considered both non-extensible and sealed. If you are decided to prevent modification, sealed, freeze the object then use in strict mode so that you can catch the error. -For Example: +For example: ```javascript "use strict"; @@ -1791,7 +1789,7 @@ name , age , addressLine1 , addressLine2 , city */ const merge = (toObj, fromObj) = Object.assign(toObj, fromObj); ``` -**Method 2: Without using in-built function** +**Method 2: Without using built-in function** ```javascript function merge(toObj, fromObj) { @@ -1809,7 +1807,7 @@ function merge(toObj, fromObj) { } } ``` -## Question 49. What is non-enumerable property in JavaScript and how can create ? +## Question 49. What is non-enumerable property in JavaScript and how you can create one? Object can have properties that don't show up when you iterate through object using for...in loop or using Object.keys() to get an array of property names. This properties is know as non-enumerable properties. @@ -1843,7 +1841,7 @@ Object.defineProperty(person, 'phoneNo',{ Object.keys(person); // ['name', 'salary', 'country'] ``` -In above example `phoneNo` property didn't show up because we made it non-enumerable by setting **enumerable:false** +In the example above `phoneNo` property didn't show up because we made it non-enumerable by setting **enumerable:false** Now let's try to change value of `phoneNo` From aafa07a441f30ad72f249691a0741855253d5cbf Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sat, 6 Oct 2018 17:35:57 +0200 Subject: [PATCH 112/141] Question 3 clearer examples --- README.md | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 2587739..f4d2b03 100644 --- a/README.md +++ b/README.md @@ -59,11 +59,11 @@ The same holds true for any value of x that being converted to Number, returns N This is why you need to pay attention when you deal with numeric variables. `NaN` can’t be equal, less than or more than any other numeric value, so the only reliable way to check if the value is `NaN`, is to use `isNaN()` function. -## Question 3. What is the drawback of having private methods in a JavaScript object? +## Question 3. What is the drawback of declaring methods directly in JavaScript objects? ### Answer -One of the drawback of creating a private method in JavaScript is that they are very memory inefficient because a new copy of the method would be created for each instance. +One of the drawback of declaring methods directly in JavaScript objects is that they are very memory inefficient. When you do that, a new copy of the method is created for each instance of an object. Let's see it on example: ```javascript var Employee = function (name, company, salary) { @@ -71,18 +71,24 @@ var Employee = function (name, company, salary) { this.company = company || ""; this.salary = salary || 5000; - // We can create a private method like this - var increaseSalary = function () { - this.salary = this.salary + 1000; + // We can create a method like this: + this.formatSalary = function () { + return "$ " + this.salary; }; - }; -``` +// we can also create method in Employee's prototype: +Employee.prototype.formatSalary2 = function() { + return "$ " + this.salary; +} -Here each instance variable `emp1`, `emp2`, `emp3` has own copy of increaseSalary private method. However the `displayIncreasedSalary` will only be added once to an object `Employee.prototype`. +//creating objects +var emp1 = new Employee('Yuri Garagin', 'Company 1', 1000000); +var emp2 = new Employee('Dinesh Gupta', 'Company 2', 1039999); +var emp3 = new Employee('Erich Fromm', 'Company 3', 1299483); +``` -So as recommendation don't go for a private method unless it's necessary. +Here each instance variable `emp1`, `emp2`, `emp3` has own copy of `formatSalary` method. However the `formatSalary2` will only be added once to an object `Employee.prototype`. ## Question 4. What is “closure” in javascript? Can you provide an example? From d3ae6bddd2b2c8cb530c0174e59c6d89175138d6 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 11 Nov 2018 19:19:25 +0100 Subject: [PATCH 113/141] #46 fixed thanks to @nomean42 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f4d2b03..037cb10 100644 --- a/README.md +++ b/README.md @@ -2776,7 +2776,7 @@ Answer: 4) undefined true var obj = { message: "Hello", innerMessage: function() { - console.log(this.message); + return this.message; } }; From 3d27d2d6f099458dcbfefbb962c43c99552a20e3 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 11 Nov 2018 19:20:23 +0100 Subject: [PATCH 114/141] #63 fixed thanks to @nomean42 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 037cb10..fbfee0e 100644 --- a/README.md +++ b/README.md @@ -2487,7 +2487,7 @@ Answer: 3) ["100"] 1 ``` 1. [] [] [Array[5]] 1 -2. [] [undefined × 100] Array[5] 5 +2. [] [undefined × 100] Array[5] 1 3. [] [] ['1',2,'3',4,5.6] 5 4. [] [] [Array[5]] 5 From c1022254dbfac53514ad533a0c188fac572d6e15 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 11 Nov 2018 19:21:11 +0100 Subject: [PATCH 115/141] #61 fixed thanks to @nomean42 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fbfee0e..58d6be3 100644 --- a/README.md +++ b/README.md @@ -1792,7 +1792,7 @@ name , age , addressLine1 , addressLine2 , city */ **Method 1: Using ES6, Object assign method** ```javascript -const merge = (toObj, fromObj) = Object.assign(toObj, fromObj); +const merge = (toObj, fromObj) => Object.assign(toObj, fromObj); ``` **Method 2: Without using built-in function** From f0eedd61a53117cfddfdcb5cff02b1ae04a5ce3e Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 11 Nov 2018 19:24:41 +0100 Subject: [PATCH 116/141] #61 fixed thanks to @nomean42 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 58d6be3..cc71d94 100644 --- a/README.md +++ b/README.md @@ -1789,7 +1789,7 @@ merge(person , address); /* Now person should have 5 properties name , age , addressLine1 , addressLine2 , city */ ``` -**Method 1: Using ES6, Object assign method** +**Method 1: Using ES6, Object.assign method** ```javascript const merge = (toObj, fromObj) => Object.assign(toObj, fromObj); From cdb86b673e78b6dd065e4cc550ecb7b1ab872820 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 11 Nov 2018 19:27:31 +0100 Subject: [PATCH 117/141] #60 fixed thanks to @vibl --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cc71d94..a7c6b85 100644 --- a/README.md +++ b/README.md @@ -1618,7 +1618,7 @@ function appLog() { console.log.apply(console, args); } -console.log(appLog("Some error message")); +appLog("Some error message"); //output of above console: 'your app name Some error message' ``` From 561f8f17df47ff52116634a1510673e3286627e4 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Sun, 11 Nov 2018 19:29:38 +0100 Subject: [PATCH 118/141] #59 fixed thanks to @vibl --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a7c6b85..391a54b 100644 --- a/README.md +++ b/README.md @@ -1091,7 +1091,7 @@ Solution: function deepClone(object){ var newObject = {}; for(var key in object){ - if(typeof object[key] === 'object'){ + if(typeof object[key] === 'object' && object[key] !== null ){ newObject[key] = deepClone(object[key]); }else{ newObject[key] = object[key]; From 607d5620959720df7970c9d8db5b0bb6e48f9894 Mon Sep 17 00:00:00 2001 From: Orinami Olatunji Date: Sat, 24 Nov 2018 14:40:40 +0100 Subject: [PATCH 119/141] Update README.md Fixed what I think is a typo in line 16: 'will stop execute thereafter' to 'will stop executing thereafter' --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 391a54b..4d35cb3 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ It's a book about frontend interview question. We hope that it will help all jav ### Answer -In JavaScript if you try to use a variable that doesn't exist and has not been declared, then JavaScript will throw an error `var name is not defined` and the script will stop execute thereafter. But If you use `typeof undeclared_variable` then it will return `undefined`. +In JavaScript if you try to use a variable that doesn't exist and has not been declared, then JavaScript will throw an error `var name is not defined` and the script will stop executing thereafter. But If you use `typeof undeclared_variable` then it will return `undefined`. Before starting further discussion let's understand the difference between declaration and definition. From 18fb7ca907d483c41f94f171ca13f68eef601af8 Mon Sep 17 00:00:00 2001 From: LLeeL <47989994+LLeeL@users.noreply.github.com> Date: Wed, 20 Mar 2019 22:18:15 -0400 Subject: [PATCH 120/141] Change coding questions 6 missing 3,4,5 in array (otherwise will not match the output) add arrB[3] = 20; to show the difference between passed by value and passed by reference --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d35cb3..03ca4aa 100644 --- a/README.md +++ b/README.md @@ -1992,9 +1992,10 @@ Arrays are object in JS, so both varaibles arrA and arrB point to the same array ### 6. What would be the output of following code? ```javascript -var arrA = [{prop1: "value of array A!!"}, {someProp: "also value of array A!"}]; +var arrA = [{prop1: "value of array A!!"}, {someProp: "also value of array A!"},3,4,5]; var arrB = arrA.slice(); arrB[0].prop1=42; +arrB[3] = 20; console.log(arrA); ``` From b461d61f33c3f204e5a76d69689b7e1f4db7838d Mon Sep 17 00:00:00 2001 From: Anand Shenoy Date: Mon, 13 May 2019 21:30:54 -0700 Subject: [PATCH 121/141] Adding a Question between 17 and 18 --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 03ca4aa..8e7a9c1 100644 --- a/README.md +++ b/README.md @@ -478,7 +478,7 @@ var foo = function bar() { // bar is undefined here ``` -## Question 17. What is the difference between declaring a function in the formats listed below? +## Question 17a. What is the difference between declaring a function in the formats listed below? ```javascript var foo = function() { @@ -510,6 +510,21 @@ function bar() { console.log("Hi I am inside Foo"); } ``` +## Question 17b. What is the output of the following? + +```javascript +bar(); +(function abc(){console.log('something')})(); +function bar(){console.log('bar got called')}; +``` +### Answer + +The output will be : +``` +bar got called +something +``` +Since the function is called first and defined during parse time the JS engine will try to find any possible parse time definitions and start the execution loop which will mean function is called first even if the definition is post another function. ## Question 18. In which case the function definition is not hoisted in JavaScript? From c49bc46a18488957e0f63097769726f36d5d5fb4 Mon Sep 17 00:00:00 2001 From: Chris Diana Date: Sat, 1 Jun 2019 11:10:06 -0600 Subject: [PATCH 122/141] Function declaration typo and grammar fixes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 03ca4aa..48eb6b8 100644 --- a/README.md +++ b/README.md @@ -493,7 +493,7 @@ function bar () { ``` ### Answer -The main difference is function `foo` is defined at `run-time` and is called function expression, whereas function `bar` is defined at parse time and is called function statement. To understand in better, let's see below code : +The main difference is that function `foo` is defined at `run-time` and is called a function expression, whereas function `bar` is defined at `parse time` and is called a function statement. To understand it better, let's take a look at the code below : ```javascript // Run-Time function declaration From c04040bdc98c34245cfdec21c3a6bdde4e98d999 Mon Sep 17 00:00:00 2001 From: Yuri Katkov Date: Mon, 8 Jul 2019 17:01:48 +0300 Subject: [PATCH 123/141] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index edaa43b..f27ba64 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ It's a book about frontend interview question. We hope that it will help all jav ## Want to buy a book in paper form? Want some badass flashcards? - - This Book will be completed by September 2018 and then it will be available to buy. If you want me to sent an early copy of this book, please add your name and email address in google form here [Google Form](https://goo.gl/forms/c8ubV1tWBBdz6fJP2). + - This Book will be soon completed and then it will be available to buy in a paper form. If you want me to sent an early copy of this book, please add your name and email address in google form here [Google Form](https://goo.gl/forms/c8ubV1tWBBdz6fJP2). - If you don't want to wait, you can buy [Yuri's JavaScript Flashcards](http://flashcardsjs.com), a set of frontend interview questions sorted by popularity among the interviewers printed on beautiful poker-size flashcards. ## Question 1. What's the difference between `undefined` and `not defined` in JavaScript From f4dcf2921fccdd86bc4e20f25820f4f9031b14da Mon Sep 17 00:00:00 2001 From: Vova Date: Fri, 27 Sep 2019 21:50:44 +0300 Subject: [PATCH 124/141] resolve ganqqwerty/123-Essential-JavaScript-Interview-Questions#78 --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f27ba64..74ecb19 100644 --- a/README.md +++ b/README.md @@ -1864,16 +1864,15 @@ Object.keys(person); // ['name', 'salary', 'country'] ``` In the example above `phoneNo` property didn't show up because we made it non-enumerable by setting **enumerable:false** +**Bonus** + Now let's try to change value of `phoneNo` ```javascript person.phoneNo = '7777777777'; ``` -Changing non-enumerable property value will return error in `strict mode`. In non-strict mode it won't through any error but it won't change the value of phoneNo. - -**Bonus** -**Object.defineProperty()** is also let you create read-only properties as we saw above, we are not able to modify phoneNo value of a person object. +**Object.defineProperty()** also lets you create read-only properties as we saw above, we are not able to modify phoneNo value of a person object. This is because descriptor has **writable** property, which is `false` by default. Changing non-writable property value will return error in strict mode. In non-strict mode it won't through any error but it won't change the value of phoneNo. ## Question 50. What is Function binding ? From b7c226654c95d98054d2330e01b9c484ed467678 Mon Sep 17 00:00:00 2001 From: Pramod Mali Date: Tue, 5 Nov 2019 21:23:39 +0530 Subject: [PATCH 125/141] Added Interview Question --- README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/README.md b/README.md index 74ecb19..d0adc70 100644 --- a/README.md +++ b/README.md @@ -3391,7 +3391,32 @@ console.log(mul(2)(3)(4)(5)(6)); Answer: 1) 720 +### 6. What would be the output of following code ? + +```javascript +function getName1(){ + console.log(this.name); +} + +Object.prototype.getName2 = () =>{ + console.log(this.name) +} + +let personObj = { + name:"Tony", + print:getName1 +} + +personObj.print(); +personObj.getName2(); +``` + +1. undefined undefined +2. Tony undefined +3. undefined Tony +4. Tony Tony +Answer: 2) Tony undefined From 3c6405cc89d3a795ee7a9a6bb0ee08996862d9a2 Mon Sep 17 00:00:00 2001 From: Pramod Mali Date: Tue, 5 Nov 2019 23:15:29 +0530 Subject: [PATCH 126/141] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d0adc70..5737ad9 100644 --- a/README.md +++ b/README.md @@ -3391,7 +3391,7 @@ console.log(mul(2)(3)(4)(5)(6)); Answer: 1) 720 -### 6. What would be the output of following code ? +### 7. What would be the output of following code ? ```javascript function getName1(){ From 616695c43737d82e2767a8fd7d057deba5c9bc38 Mon Sep 17 00:00:00 2001 From: Tomer Ovadia Date: Tue, 12 Nov 2019 19:38:42 +0200 Subject: [PATCH 127/141] Update README.md --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 74ecb19..eeb3953 100644 --- a/README.md +++ b/README.md @@ -1352,6 +1352,18 @@ function(value){ } ``` +**Method 4:** + +You can query the constructor name: + +```javascript +function isArray(value) { + return value.constructor.name === "Array"; +} + +``` + + ## Question 37. Best way to detect reference values of any type in JavaScript ? In Javascript Object are called as reference type, Any value other then primitive is definitely a reference type. There are several built-in reference type such as **Object**, **Array**, **Function**, **Date**, **null** and **Error**. From 234c12998b88e831cf4711649d09f9d43e6b0911 Mon Sep 17 00:00:00 2001 From: Tomer Ovadia Date: Tue, 12 Nov 2019 19:45:04 +0200 Subject: [PATCH 128/141] Update README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index eeb3953..c638e88 100644 --- a/README.md +++ b/README.md @@ -1363,6 +1363,15 @@ function isArray(value) { ``` +**Method 5:** + +You check if a given value is an `instanceof Array`: + +```javascript +function isArray(value) { + return value instanceof Array; +} +``` ## Question 37. Best way to detect reference values of any type in JavaScript ? From a294916d3d74db80457150c9c65b7855131c521a Mon Sep 17 00:00:00 2001 From: Harman Kumar <50094184+harmansingha@users.noreply.github.com> Date: Sat, 30 Nov 2019 12:53:33 +0530 Subject: [PATCH 129/141] Added New Method for setting default value in ES6 --- README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/README.md b/README.md index c638e88..6124331 100644 --- a/README.md +++ b/README.md @@ -1802,6 +1802,27 @@ sentEmail({ }, 'Yahoo Mail'); ``` +**Method 3: Setting default parameter value in ES6** +```javascript +function sendEmail(configuration, provider = "Gmail") { + // Set default value if user has not passed value for provider + + // Value of provider can be accessed directly + console.log(`Provider: ${provider}`); +} + +// In this call we are not passing provider parameter value +sentEmail({ + from: 'xyz@gmail.com', + subject: 'Test Email' +}); +// Here we are passing Yahoo Mail as a provider value +sentEmail({ + from: 'xyz@gmail.com', + subject: 'Test Email' +}, 'Yahoo Mail'); +``` + ## Question 48. Write code for merge two JavaScript Object dynamically. Let say you have two objects From 3f0a94f412d962b149677a35bbd9f70df92734e4 Mon Sep 17 00:00:00 2001 From: Moshiur Rahman <15215020+moshiurse@users.noreply.github.com> Date: Sun, 1 Dec 2019 00:06:28 +0600 Subject: [PATCH 130/141] fix duplicate variable name --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c638e88..4c4b870 100644 --- a/README.md +++ b/README.md @@ -1046,8 +1046,8 @@ This method is useful if we want to create several similar objects. In the code // Creating multiple object which have similar property but diff value assigned to object property. var employee1 = new Employee('John', 'Moto', 24, '5000$'); - var employee1 = new Employee('Ryan', 'Jor', 26, '3000$'); - var employee1 = new Employee('Andre', 'Salt', 26, '4000$'); + var employee2 = new Employee('Ryan', 'Jor', 26, '3000$'); + var employee3 = new Employee('Andre', 'Salt', 26, '4000$'); ``` #### Method 2: Object Literal From c6439af1d361b2f896909dc883e8de254aca60e7 Mon Sep 17 00:00:00 2001 From: Pramod Mali Date: Tue, 3 Dec 2019 17:21:45 +0530 Subject: [PATCH 131/141] Added explaination to Question --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index 5737ad9..746f472 100644 --- a/README.md +++ b/README.md @@ -3418,7 +3418,26 @@ personObj.getName2(); Answer: 2) Tony undefined +Explaination: **getName1()** function works fine because it's being called from ***personObj***, so it has access to *this.name* property. But when while calling **getnName2** which is defined under *Object.prototype* doesn't have any proprty named *this.name*. There should be *name* property under prototype. Following is the code: +```javascript +function getName1(){ + console.log(this.name); +} + +Object.prototype.getName2 = () =>{ + console.log(Object.getPrototypeOf(this).name); +} + +let personObj = { + name:"Tony", + print:getName1 +} + +personObj.print(); +Object.prototype.name="Steve"; +personObj.getName2(); +``` ## Contributing From cb6acce9a22d7d2ff3417e07418c4a73e394ff0f Mon Sep 17 00:00:00 2001 From: Pramod Mali Date: Mon, 13 Jan 2020 23:01:16 +0530 Subject: [PATCH 132/141] Updating question 35 --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 746f472..bb1afb0 100644 --- a/README.md +++ b/README.md @@ -1280,7 +1280,16 @@ for (var i = 0; i < arr.length; i++) { } ``` +This can also achieve by forEach (allows you to keep that variable within the forEach’s scope) +```javascript +var arr = [10, 32, 65, 2]; +arr.forEach(function(i) { + setTimeout(function() { + console.log('The index of this number is: ' + i); + }, 3000); +}) +``` ## Question 36. How to check if the value of a variable in an array? From ff5be2a8fc4e76fc3204b0996403c6f34e2ba6d2 Mon Sep 17 00:00:00 2001 From: Rahul Kumar <37505384+rahuldbs@users.noreply.github.com> Date: Mon, 6 Apr 2020 21:54:11 +0530 Subject: [PATCH 133/141] corrected the foreach solution of question 35 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5e0d5f2..c222fdd 100644 --- a/README.md +++ b/README.md @@ -1284,7 +1284,7 @@ This can also achieve by forEach (allows you to keep that variable within the fo ```javascript var arr = [10, 32, 65, 2]; -arr.forEach(function(i) { +arr.forEach(function(ele, i) { setTimeout(function() { console.log('The index of this number is: ' + i); }, 3000); From fae6fabf9a32eb6bf0e656189dcef47e038f32d3 Mon Sep 17 00:00:00 2001 From: thinhnv Date: Sun, 9 Aug 2020 16:38:42 +0700 Subject: [PATCH 134/141] :art: [REFACTOR] - Add collapsed answers - fix the counting wrong 1 - Hide the answers in the collapsed section! Make people easy to practise the questions! 2 - Fix the counting wrong in question 40-44 ( missing 41 42 43 ) --- README.md | 634 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 524 insertions(+), 110 deletions(-) diff --git a/README.md b/README.md index c222fdd..5a4ba4d 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ It's a book about frontend interview question. We hope that it will help all jav ## Question 1. What's the difference between `undefined` and `not defined` in JavaScript -### Answer +
Answer In JavaScript if you try to use a variable that doesn't exist and has not been declared, then JavaScript will throw an error `var name is not defined` and the script will stop executing thereafter. But If you use `typeof undeclared_variable` then it will return `undefined`. @@ -42,6 +42,7 @@ console.log(y); // Output: ReferenceError: y is not defined ### Ref Link: [http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration](http://stackoverflow.com/questions/20822022/javascript-variable-definition-declaration) +
## Question 2. For which value of `x` the results of the following statements are not the same? @@ -50,7 +51,7 @@ console.log(y); // Output: ReferenceError: y is not defined // if( x <= 100 ) {...} if( !(x > 100) ) {...} ``` -### Answer +
Answer `NaN <= 100` is `false` and `NaN > 100` is also `false`, so if the value of `x` is `NaN`, the statements are not the same. @@ -59,9 +60,11 @@ The same holds true for any value of x that being converted to Number, returns N This is why you need to pay attention when you deal with numeric variables. `NaN` can’t be equal, less than or more than any other numeric value, so the only reliable way to check if the value is `NaN`, is to use `isNaN()` function. +
+ ## Question 3. What is the drawback of declaring methods directly in JavaScript objects? -### Answer +
Answer One of the drawback of declaring methods directly in JavaScript objects is that they are very memory inefficient. When you do that, a new copy of the method is created for each instance of an object. Let's see it on example: @@ -90,9 +93,11 @@ var emp3 = new Employee('Erich Fromm', 'Company 3', 1299483); Here each instance variable `emp1`, `emp2`, `emp3` has own copy of `formatSalary` method. However the `formatSalary2` will only be added once to an object `Employee.prototype`. +
+ ## Question 4. What is “closure” in javascript? Can you provide an example? -### Answer +
Answer A closure is a function defined inside another function (called parent function) and has access to the variable which is declared and defined in parent function scope. @@ -136,13 +141,15 @@ innerFuncVar = y globalVar = abc ``` +
+ ## Question 5. Write a mul function which will work properly when invoked with following syntax. ```javascript console.log(mul(2)(3)(4)); // output : 24 console.log(mul(4)(3)(4)); // output : 48 ``` -### Answer +
Answer Below is the code followed by the explanation of how it works: @@ -165,6 +172,8 @@ In Javascript function defined inside has access to outer function variable and - A function can be pass as a parameter to another function - A function can be returned from another function +
+ ## Question 6. How to empty an array in JavaScript? For instance: @@ -174,7 +183,7 @@ var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; How can we empty the array above? -### Answer +
Answer There are a couple of ways by which we can empty an array, So let's discuss all the possible way by which we can empty an array. @@ -238,9 +247,11 @@ while(arrayList.length) { Above implementation can also empty the array. But not recommended to use often. +
+ ## Question 7. How to check if an object is an array or not? -### Answer +
Answer The best way to find whether an object is instance of a particular class or not using `toString` method from `Object.prototype` @@ -303,6 +314,8 @@ Array.isArray(arrayList); `Array.isArray` is supported by Chrome 5, Firefox 4.0, IE 9, Opera 10.5 and Safari 5 +
+ ## Question 8. What will be the output of the following code? ```javascript @@ -313,11 +326,13 @@ var output = (function(x) { console.log(output); ``` -### Answer +
Answer The code above will output `0` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **local variable**. `delete` operator doesn't affect local variables. +
+ ## Question 9. What will be the output of the following code? ```javascript @@ -329,11 +344,13 @@ var output = (function() { console.log(output); ``` -### Answer +
Answer The code above will output `1` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **global variable** of type `number`. +
+ ## Question 10. What will be the output of the following code? ```javascript @@ -345,11 +362,13 @@ var output = (function() { console.log(output); ``` -### Answer +
Answer The code above will output `undefined` as output. `delete` operator is used to delete a property from an object. Here `x` is an object which has foo as a property and from a self-invoking function, we are deleting the `foo` property of object `x` and after deletion, we are trying to reference deleted property `foo` which result `undefined`. +
+ ## Question 11. What will be the output of the following code? ```javascript @@ -361,12 +380,14 @@ delete emp1.company console.log(emp1.company); ``` -### Answer +
Answer The code above will output `xyz` as output. Here `emp1` object got company as **prototype** property. delete operator doesn't delete prototype property. `emp1` object doesn't have **company** as its own property. you can test it `console.log(emp1.hasOwnProperty('company')); //output : false` However, we can delete company property directly from `Employee` object using `delete Employee.company` or we can also delete from `emp1` object using `__proto__` property `delete emp1.__proto__.company`. +
+ ## Question 12. What is `undefined x 1` in JavaScript ```javascript @@ -374,7 +395,7 @@ var trees = ["redwood", "bay", "cedar", "oak", "maple"]; delete trees[3]; ``` -### Answer +
Answer - When you run the code above and do `console.log(trees);` in chrome developer console then you will get `["redwood", "bay", "cedar", undefined × 1, "maple"]`. - In the recent versions of Chrome you will see the word `empty` of `undefined x 1`. - When you run the same code in Firefox browser console then you will get `["redwood", "bay", "cedar", undefined, "maple"]` @@ -385,6 +406,8 @@ Clearly we can see that Chrome has its own way of displaying uninitialized index +
+ ## Question 13. What will be the output of the following code? ```javascript @@ -392,13 +415,15 @@ var trees = ["xyz", "xxxx", "test", "ryan", "apple"]; delete trees[3]; console.log(trees.length); ``` -### Answer +
Answer The code above will output `5` as output. When we used `delete` operator for deleting an array element then, the array length is not affected by this. This holds even if you deleted all elements of an array using `delete` operator. So when delete operator removes an array element that deleted element is no longer present in the array. In place of value at deleted index `undefined x 1` in **chrome** and `undefined` is placed at the index. If you do `console.log(trees)` output `["xyz", "xxxx", "test", undefined × 1, "apple"]` in Chrome and in Firefox `["xyz", "xxxx", "test", undefined, "apple"]`. +
+ ## Question 14. What will be the output of the following code? ```javascript @@ -408,7 +433,7 @@ console.log(bar + "xyz"); console.log(bar + true); console.log(bar + false); ``` -### Answer +
Answer The code above will output `1, "truexyz", 2, 1` as output. Here's a general guideline for the plus operator: - Number + Number -> Addition @@ -420,13 +445,15 @@ The code above will output `1, "truexyz", 2, 1` as output. Here's a general guid +
+ ## Question 15. What will be the output of the following code? ```javascript var z = 1, y = z = typeof y; console.log(y); ``` -### Answer +
Answer The code above will print string `"undefined"` as output. According to associativity rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is `Right to Left` so first `typeof y` will evaluate first which is string `"undefined"` and assigned to `z` and then `y` would be assigned the value of z. The overall sequence will look like that: @@ -438,6 +465,8 @@ z = typeof y; y = z; ``` +
+ ## Question 16. What will be the output of the following code? ```javascript @@ -446,7 +475,7 @@ var foo = function bar() { return 12; }; typeof bar(); ``` -### Answer +
Answer The output will be `Reference Error`. To fix the bug we can try to rewrite the code a little bit: @@ -478,6 +507,8 @@ var foo = function bar() { // bar is undefined here ``` +
+ ## Question 17a. What is the difference between declaring a function in the formats listed below? ```javascript @@ -491,7 +522,7 @@ function bar () { // Some code } ``` -### Answer +
Answer The main difference is that function `foo` is defined at `run-time` and is called a function expression, whereas function `bar` is defined at `parse time` and is called a function statement. To understand it better, let's take a look at the code below : @@ -510,6 +541,8 @@ function bar() { console.log("Hi I am inside Foo"); } ``` +
+ ## Question 17b. What is the output of the following? ```javascript @@ -517,7 +550,7 @@ bar(); (function abc(){console.log('something')})(); function bar(){console.log('bar got called')}; ``` -### Answer +
Answer The output will be : ``` @@ -526,10 +559,11 @@ something ``` Since the function is called first and defined during parse time the JS engine will try to find any possible parse time definitions and start the execution loop which will mean function is called first even if the definition is post another function. -## Question 18. In which case the function definition is not hoisted in JavaScript? +
+## Question 18. In which case the function definition is not hoisted in JavaScript? -### Answer +
Answer Let's take the following **function expression** @@ -566,6 +600,8 @@ foo = function foo() { foo(); // Now foo is defined here ``` +
+ ## Question 19. What will be the output of the following code? ```javascript @@ -579,7 +615,7 @@ var salary = "1000$"; console.log("My New Salary " + salary); })(); ``` -### Answer +
Answer The code above will output: `undefined, 5000$` because of hoisting. In the code presented above, you might be expecting `salary` to retain it values from outer scope until the point that `salary` was re-declared in the inner scope. But due to `hoisting` salary value was `undefined` instead. To understand it better have a look of the following code, here `salary` variable is hoisted and declared at the top in function scope. When we print its value using `console.log` the result is `undefined`. Afterwards the variable is redeclared and the new value `"5000$"` is assigned to it. @@ -596,9 +632,11 @@ var salary = "1000$"; })(); ``` +
+ ## Question 20. What’s the difference between `typeof` and `instanceof`? -### Answer +
Answer `typeof` is an operator that returns a string with the type of whatever you pass. @@ -623,6 +661,8 @@ name instanceof String; // Output : true Ref Link: [http://stackoverflow.com/questions/2449254/what-is-the-instanceof-operator-in-javascript](http://stackoverflow.com/questions/2449254/what-is-the-instanceof-operator-in-javascript) +
+ ## Question 21. Calculate the length of the associative array ```javascript @@ -632,7 +672,7 @@ var counterArray = { }; counterArray["C"] = 1; ``` -### Answer +
Answer First of all, in case of JavaScript an associative array is the same as an object. Secondly, even though is no built-in function or property available to calculate the length/size an object, we can write such function ourselves. @@ -676,7 +716,12 @@ _.size({one: 1, two: 2, three: 3}); => 3 ``` +
+ ## Question 22. Difference between `Function`, `Method` and `Constructor` calls in JavaScript. + +
Answer + If your are familiar with Object-oriented programming, More likely familiar to thinking of functions, methods, and class constructors as three separate things. But In JavaScript, these are just three different usage patterns of one single construct. functions : The simplest usages of function call: @@ -731,6 +776,8 @@ Unlike function calls and method calls, a constructor call `new Employee('John D The primary role of the constructor function is to initialize the object. +
+ ## Question 23. What would be the output of the following code? ```javascript @@ -742,7 +789,7 @@ var person = new User("xyz")["location"] = "USA"; console.log(person); ``` -### Answer +
Answer The output of above code would be `"USA"`. Here `new User("xyz")` creates a brand new object and created property `location` on that and `USA` has been assigned to object property location and that has been referenced by the person. @@ -763,9 +810,11 @@ foo["location"] = "USA"; ``` +
+ ## Question 24. What are Service Workers and when can you use them? -### Answer +
Answer It’s a technology that allows your web application to use cached resources first, and provide default experience offline, before getting more data from the network later. This principle is commonly known as Offline First. @@ -773,7 +822,12 @@ Service Workers actively use promises. A Service Worker has to be installed,acti As of 2017, Service Workers are not supported in IE and Safari. +
+ ## Question 25. What is the difference between a method and a function in javascript? + +
Answer + In JS, that difference is quite subtle. A function is a piece of code that is called by name and function itself not associated with any object and not defined inside any object. It can be passed data to operate on (i.e. parameter) and can optionally return data (the return value). ```javascript @@ -857,8 +911,11 @@ obj1.myMethod(); // will print "Hi there" following with obj1. ``` +
+ ## Question 26. What is IIFE (Immediately Invoked Function Expression) and how it can be useful? -### Answer +
Answer + #### Definition IIFE a function that runs as soon as it's defined. Usually it's anonymous (doesn't have a function name), but it also can be named. Here's an example of IIFE: @@ -923,8 +980,10 @@ Variables and functions that you declare inside an IIFE are not visible to the o code, it helps to prevent polluting the global scope and provide the module interface to the outside. +
+ ## Question 27. Describe Singleton Pattern In JavaScript -### Answer +
Answer The singleton pattern is an often used JavaScript design pattern. It provides a way to wrap the code into a logical unit that can be accessed through a single variable. The Singleton design pattern is used when only one instance of an object is needed throughout the lifetime of an application. In JavaScript, Singleton pattern have many uses, they can be used for NameSpacing, which reduce the number of global variables in your page (prevent from polluting global space), organizing the code in a consistent manner, which increase the readability and maintainability of your pages. @@ -1027,9 +1086,11 @@ console.log(MyNamespace.Singleton.getInstance().publicMethod()); The singleton implemented above is easy to understand. The singleton class maintains a static reference to the lone singleton instance and return that reference from the static getInstance() method. +
+ ## Question 28. What are the ways of creating objects in JavaScript ? -### Answer +
Answer #### Method 1: Function based @@ -1095,12 +1156,14 @@ employee.getName = function(){ `Object.create(obj)` will create a new object and set the `obj` as its prototype. It’s a modern way to create objects that inherit properties from other objects. `Object.create` function doesn’t run the constructor. You can use `Object.create(null)` when you don’t want your object to inherit the properties of `Object`. +
+ ## Question 29. Write a function called deepClone which takes an object and creates a object copy of it. ``` javascript var newObject = deepClone(obj); ``` -Solution: +
Answer ```javascript function deepClone(object){ @@ -1133,8 +1196,12 @@ var personalDetail = { ``` So when we do deep clone then we should copy every property (including the nested object). +
+ ## Question 30. Best way to detect `undefined` object property in JavaScript. +
Answer + > Suppose we have given an object `person` ```javascript @@ -1161,6 +1228,8 @@ if(typeof person.salary === 'undefined'){ console.log("salary is undefined here because we haven't declared"); } ``` +
+ ## Question 31. Write a function called `Clone` which takes an object and creates a object copy of it but not copy deep property of object. ```javascript @@ -1169,7 +1238,7 @@ if(typeof person.salary === 'undefined'){ console.log(cloneObj === Clone(objectLit)); // this should return false console.log(cloneObj == Clone(objectLit)); // this should return true ``` -**solution:** +
Answer ```javascript function Clone(object){ @@ -1181,8 +1250,12 @@ function Clone(object){ } ``` +
+ ## Question 32. What are promises and how they are useful? +
Answer + We use promises for handling asynchronous interactions in a sequential manner. They are especially useful when we need to do an async operation and THEN do another async operation based on the results of the first one. For example, if you want to request the list of all flights and then for each flight you want to request some details about it. The promise represents the future value. It has an internal state (`pending`, `fulfilled` and `rejected`) and works like a state machine. A promise object has `then` method, where you can specify what to do when the promise is fulfilled or rejected. @@ -1196,8 +1269,12 @@ Also mention that you know about more sophisticated concepts: Be sure that you can implement the promise, read [one of the articles on a topic](https://opensourceconnections.com/blog/2014/02/16/a-simple-promise-implementation-in-about-20-lines-of-javascript/), and learn the source code of the [simplest promise implementation](https://gist.github.com/softwaredoug/9044640). +
+ ## Question 33. How to check whether a key exist in a JavaScript object or not. +
Answer + Let say we have `person` object with property **name** and **age** ```javascript @@ -1233,7 +1310,12 @@ console.log(person.hasOwnProperty('name')); // print true console.log(person.hasOwnProperty('salary')); // print false ``` +
+ ## Question 34. What is NaN, why do we need it, and when can it break the page? + +
Answer + `NaN` stands for “not a number.” and it can break your table of numbers when it has an arithmetic operation that is not allowed. Here are some examples of how you can get `NaN`: ```javascript @@ -1255,6 +1337,8 @@ To check if the current value of the variable is NaN, you have to use the `isNaN Further reading: [great blogpost on ariya.io](https://ariya.io/2014/05/the-curious-case-of-javascript-nan) +
+ ## Question 35. Fix the bug using ES5 only ```javascript @@ -1265,6 +1349,8 @@ for (var i = 0; i < arr.length; i++) { }, 3000); } ``` +
Answer + For ES6, you can just replace `var i` with `let i`. For ES5, you need to create a function scope like here: @@ -1291,8 +1377,12 @@ arr.forEach(function(ele, i) { }) ``` +
+ ## Question 36. How to check if the value of a variable in an array? +
Answer + We always encounter in such situation where we need to know whether value is type of array or not. For instance : the code below perform some operation based value type @@ -1382,8 +1472,12 @@ function isArray(value) { } ``` +
+ ## Question 37. Best way to detect reference values of any type in JavaScript ? +
Answer + In Javascript Object are called as reference type, Any value other then primitive is definitely a reference type. There are several built-in reference type such as **Object**, **Array**, **Function**, **Date**, **null** and **Error**. Detecting object using `typeof` operator @@ -1424,8 +1518,12 @@ console.log(emp1 instanceof Employee); // true console.log(emp1 instanceof Object); // true ``` +
+ ## Question 38. How does Object.create method works JavaScript? +
Answer + The ECMAScript 5 **Object.create()** method is the easiest way for one object to inherit from another, without invoking a constructor function. **For instance:** @@ -1473,8 +1571,12 @@ In the example above, `emp1` is created with it's own value for name, so calling Object created in this manner give you full control over newly created object. You are free to add, remove any properties and method you want. +
+ ## Question 39. How to use constructor functions for inheritance in JavaScript? +
Answer + Let say we have `Person` class which has name, age, salary properties and **incrementSalary()** method. ```javascript @@ -1532,8 +1634,12 @@ console.log(name in obj); // true ``` Type-based inheritance is best used with developer defined constructor function rather than natively in JavaScript. In addition to this also allows flexibility in how we create similar type of object. +
+ ## Question 40. How we can prevent modification of object in JavaScript ?. +
Answer + ECMAScript 5 introduce several methods to prevent modification of object which lock down object to ensure that no one, accidentally or otherwise, change functionality of Object. There are three levels of preventing modification: @@ -1642,9 +1748,13 @@ delete employee.name; // fails silently unless it's in strict mode ``` -## Question 44. Write a log function which will add prefix `(your message)` to every message you log using console.log ? +
+ +## Question 41. Write a log function which will add prefix `(your message)` to every message you log using console.log ? For example, If you log `console.log("Some message")` then output should be **(your message) Some message** +
Answer + Logging error message or some informative message is always required when you dealing with client side JavaScript using console.log method. Some time you want to add some prefix to identify message generated log from your application hence you would like to prefix your app name in every console.log. A general way to do this keep adding your app name in every console.log message like @@ -1667,7 +1777,9 @@ appLog("Some error message"); //output of above console: 'your app name Some error message' ``` -## Question 45 . Write a function which will test string as a literal and as an object ? +
+ +## Question 42 . Write a function which will test string as a literal and as an object ? For example: We can create string using string literal and using String constructor function. @@ -1677,6 +1789,9 @@ For example: We can create string using string literal and using String construc // using String constructor function var objStr = new String("Hi I am string object"); ``` + +
Answer + We can use typeof operator to test string literal and instanceof operator to test String object. ```javascript @@ -1689,7 +1804,11 @@ For example: We can create string using string literal and using String construc console.log(isString(ltrlStr)); // true console.log(isString(objStr)); // true ``` -## Question 46 . What is typical use case for anonymous function in JavaScript ? +
+ +## Question 43 . What is typical use case for anonymous function in JavaScript ? + +
Answer Anonymous functions basically used in following scenario. @@ -1752,7 +1871,11 @@ If your answer is yes then go and create named function rather anonymous functio 1. It can reduce a bit of code, particularly in recursive function and in callback function. 2. Avoid needless global namespace pollutions. -## Question 47 . How to set a default parameter value ? +
+ +## Question 44 . How to set a default parameter value ? + +
Answer If you are coming from python/c# you might be using default value for function parameter incase value(formal parameter) has not been passed. For instance : @@ -1832,7 +1955,9 @@ sentEmail({ }, 'Yahoo Mail'); ``` -## Question 48. Write code for merge two JavaScript Object dynamically. +
+ +## Question 45. Write code for merge two JavaScript Object dynamically. Let say you have two objects ```javascript @@ -1849,6 +1974,8 @@ var address = { ``` Write merge function which will take two object and add all the own property of second object into first object. +
Answer + ```javascript merge(person , address); @@ -1879,7 +2006,11 @@ function merge(toObj, fromObj) { } } ``` -## Question 49. What is non-enumerable property in JavaScript and how you can create one? +
+ +## Question 46. What is non-enumerable property in JavaScript and how you can create one? + +
Answer Object can have properties that don't show up when you iterate through object using for...in loop or using Object.keys() to get an array of property names. This properties is know as non-enumerable properties. @@ -1925,7 +2056,11 @@ person.phoneNo = '7777777777'; **Object.defineProperty()** also lets you create read-only properties as we saw above, we are not able to modify phoneNo value of a person object. This is because descriptor has **writable** property, which is `false` by default. Changing non-writable property value will return error in strict mode. In non-strict mode it won't through any error but it won't change the value of phoneNo. -## Question 50. What is Function binding ? +
+ +## Question 47. What is Function binding ? + +
Answer Function binding falls in advance JavaScript category and this is very popular technique to use in conjunction with event handler and callback function to preserve code execution context while passing function as a parameter. @@ -1965,6 +2100,7 @@ btn.addEventListener('click', clickHandler.handleClick.bind(clickHandler)); `bind` method is available to all the function similar to call and apply method which take argument value of `this`. +
# Coding Questions @@ -1982,20 +2118,29 @@ strB="bye there!"; console.log (strA) ``` -The output will `'hi there'` because we're dealing with strings here. Strings are +
Answer + +The output will be `'hi there'` because we're dealing with strings here. Strings are passed by value, that is, copied. - -### 2. What would be the output of following code? + +
+ +### 2. What would be the output of following code? ```javascript var objA = {prop1: 42}; var objB = objA; objB.prop1 = 90; console.log(objA) ``` -The output will `{prop1: 90}` because we're dealing with objects here. Objects are + +
Answer + +The output will be `{prop1: 90}` because we're dealing with objects here. Objects are passed by reference, that is, `objA` and `objB` point to the same object in memory. -### 3. What would be the output of following code? +
+ +### 3. What would be the output of following code? ```javascript var objA = {prop1: 42}; @@ -2004,7 +2149,10 @@ objB = {}; console.log(objA) ``` -The output will `{prop1: 42}`. + +
Answer + +The output will be `{prop1: 42}`. When we assign `objA` to `objB`, the `objB` variable will point to the same object as the `objB` variable. @@ -2012,7 +2160,9 @@ to the same object as the `objB` variable. However, when we reassign `objB` to an empty object, we simply change where `objB` variable references to. This doesn't affect where `objA` variable references to. -### 4. What would be the output of following code? +
+ +### 4. What would be the output of following code? ```javascript var arrA = [0,1,2,3,4,5]; @@ -2021,13 +2171,18 @@ arrB[0]=42; console.log(arrA) ``` + +
Answer + The output will be `[42,1,2,3,4,5]`. Arrays are object in JavaScript and they are passed and assigned by reference. This is why both `arrA` and `arrB` point to the same array `[0,1,2,3,4,5]`. That's why changing the first element of the `arrB` will also modify `arrA`: it's the same array in the memory. -### 5. What would be the output of following code? +
+ +### 5. What would be the output of following code? ```javascript var arrA = [0,1,2,3,4,5]; var arrB = arrA.slice(); @@ -2035,12 +2190,17 @@ arrB[0]=42; console.log(arrA) ``` + +
Answer + The output will be `[0,1,2,3,4,5]`. The `slice` function copies all the elements of the array returning the new array. That's why `arrA` and `arrB` reference two completely different arrays. -### 5. What would be the output of following code? +
+ +### 6. What would be the output of following code? ```javascript var arrA = [{prop1: "value of array A!!"}, {someProp: "also value of array A!"}, 3,4,5]; @@ -2048,13 +2208,17 @@ var arrB = arrA; arrB[0].prop1=42; console.log(arrA); ``` + +
Answer + The output will be `[{prop1: 42}, {someProp: "also value of array A!"}, 3,4,5]`. Arrays are object in JS, so both varaibles arrA and arrB point to the same array. Changing `arrB[0]` is the same as changing `arrA[0]` +
-### 6. What would be the output of following code? +### 7. What would be the output of following code? ```javascript var arrA = [{prop1: "value of array A!!"}, {someProp: "also value of array A!"},3,4,5]; @@ -2064,6 +2228,8 @@ arrB[3] = 20; console.log(arrA); ``` +
Answer + The output will be `[{prop1: 42}, {someProp: "also value of array A!"}, 3,4,5]`. The `slice` function copies all the elements of the array returning the new array. However, @@ -2088,6 +2254,7 @@ two elements. This is why changing the property of `arrB[0]` in `arrB` will also change the `arrA[0]`. +
## Hoisting @@ -2098,9 +2265,13 @@ This is why changing the property of `arrB[0]` in `arrB` will also change the `a 3. Type Error 4. ReferenceError: employeeId is not defined -Answer: 4) ReferenceError: employeeId is not defined +
Answer -### 2. What would be the output of following code? + 4) ReferenceError: employeeId is not defined + +
+ +### 2. What would be the output of following code? ```javascript console.log(employeeId); @@ -2112,7 +2283,11 @@ var employeeId = '19000'; 3. Type Error 4. ReferenceError: employeeId is not defined -Answer: 2) undefined +
Answer + + 2) undefined + +
### 3. What would be the output of following code? @@ -2129,7 +2304,11 @@ var employeeId = '1234abe'; 3. Type Error 4. ReferenceError: employeeId is not defined -Answer: 2) undefined +
Answer + + 2) undefined + +
### 4. What would be the output of following code? @@ -2149,7 +2328,11 @@ var employeeId = '1234abe'; 3. '1234abe' 4. ReferenceError: employeeId is not defined -Answer: 2) undefined +
Answer + + 2) undefined + +
### 5. What would be the output of following code? @@ -2167,7 +2350,11 @@ Answer: 2) undefined 3. 'Hi I am inside displayFunc' 4. ReferenceError: displayFunc is not defined -Answer: 1) undefined +
Answer + + 1) undefined + +
### 6. What would be the output of following code? @@ -2186,7 +2373,11 @@ console.log(employeeId); 3. 'abc123' 4. ReferenceError: employeeId is not defined -Answer: 2) '123bcd' +
Answer + + 2) '123bcd' + +
### 7. What would be the output of following code? @@ -2208,7 +2399,11 @@ console.log(employeeId); 3. 'abc123' 4. ReferenceError: employeeId is not defined -Answer: 3) 'abc123' +
Answer + + 3) 'abc123' + +
### 8. What would be the output of following code? @@ -2231,7 +2426,11 @@ foo(); 3. string 4. ReferenceError: employeeId is not defined -Answer: 2) 'function' +
Answer + + 2) 'function' + +
### 9. What would be the output of following code? @@ -2253,7 +2452,11 @@ foo(); 3. 'Car' 4. ReferenceError: product is not defined -Answer: 1) undefined +
Answer + + 1) undefined + +
### 10. What would be the output of following code? @@ -2277,7 +2480,11 @@ Answer: 1) undefined 3. function function 4. ReferenceError: bar is not defined -Answer: 3) function function +
Answer + + 3) function function + +
## Objects @@ -2306,7 +2513,11 @@ Answer: 3) function function 3. ["name", "salary", "country", "phoneNo"] 4. ["name", "salary", "country"] -Answer: 3) ["name", "salary", "country", "phoneNo"] +
Answer + + 3) ["name", "salary", "country", "phoneNo"] + +
### 2. What would be the output of following code ? @@ -2333,7 +2544,11 @@ Answer: 3) ["name", "salary", "country", "phoneNo"] 3. ["name", "salary", "country", "phoneNo"] 4. ["name", "salary", "country"] -Answer: 4) ["name", "salary", "country"] +
Answer + + 4) ["name", "salary", "country"] + +
### 3. What would be the output of following code ? @@ -2356,7 +2571,11 @@ Answer: 4) ["name", "salary", "country"] 3. true false 4. true true -Answer: 2) false false +
Answer + + 2) false false + +
### 4. What would be the output of following code ? @@ -2373,7 +2592,11 @@ Answer: 2) false false 3. true false 4. true true -Answer: 2) false false +
Answer + + 2) false false + +
### 5. What would be the output of following code ? @@ -2394,7 +2617,11 @@ Answer: 2) false false 3. true false 4. true true -Answer: 2) false false +
Answer + + 2) false false + +
### 6. What would be the output of following code ? @@ -2413,7 +2640,11 @@ Answer: 2) false false 3. true false 4. true true -Answer: 2) false false +
Answer + + 2) false false + +
### 7. What would be the output of following code ? @@ -2432,7 +2663,11 @@ Answer: 2) false false 3. true false 4. true true -Answer: 4) true true +
Answer + + 4) true true + +
### 8. What would be the output of following code ? @@ -2453,7 +2688,11 @@ Answer: 4) true true 3. true true true true 4. true true false false -Answer: 3) true true true true +
Answer + + 3) true true true true + +
### 9. What would be the output of following code ? @@ -2473,7 +2712,11 @@ Answer: 3) true true true true 3. foo foo 4. bar foo -Answer: 2) bar bar +
Answer + + 2) bar bar + +
### 10. What would be the output of following code ? @@ -2495,7 +2738,11 @@ Answer: 2) bar bar 3. foo foo 4. bar foo -Answer: 3) foo foo +
Answer + + 3) foo foo + +
### 11. What would be the output of following code ? @@ -2517,7 +2764,11 @@ Answer: 3) foo foo 3. foo foo 4. undefined bar -Answer: 2) undefined undefined +
Answer + + 2) undefined undefined + +
## Arrays @@ -2536,7 +2787,11 @@ Answer: 2) undefined undefined 3. ["100"] 1 4. ReferenceError: array is not defined -Answer: 3) ["100"] 1 +
Answer + + 3) ["100"] 1 + +
### 2. What would be the output of following code? @@ -2557,7 +2812,11 @@ Answer: 3) ["100"] 1 3. [] [] ['1',2,'3',4,5.6] 5 4. [] [] [Array[5]] 5 -Answer: 1) [] [] [Array[5]] 1 +
Answer + + 1) [] [] [Array[5]] 1 + +
### 3. What would be the output of following code? @@ -2575,7 +2834,11 @@ Answer: 1) [] [] [Array[5]] 1 3. 6 4. undefined -Answer: 1) 11 +
Answer + + 1) 11 + +
### 4. What would be the output of following code? @@ -2593,7 +2856,11 @@ Answer: 1) 11 3. 6 4. undefined -Answer: 3) 6 +
Answer + + 3) 6 + +
### 5. What would be the output of following code? @@ -2611,7 +2878,11 @@ Answer: 3) 6 3. Type Error 4. undefined -Answer: 1) [ 'dog', 'rat', 'goat', 'cow', 'horse', 'cat' ] +
Answer + + 1) [ 'dog', 'rat', 'goat', 'cow', 'horse', 'cat' ] + +
### 6. What would be the output of following code? @@ -2630,7 +2901,11 @@ Answer: 1) [ 'dog', 'rat', 'goat', 'cow', 'horse', 'cat' ] 3. 1 -1 -1 -1 4. 1 undefined -1 4 -Answer: 1) 1 -1 -1 4 +
Answer + + 1) 1 -1 -1 4 + +
### 7. What would be the output of following code? @@ -2648,7 +2923,11 @@ Answer: 1) 1 -1 -1 4 3. 1 1 -1 4. 1 undefined undefined -Answer: 2) 1 6 -1 +
Answer + + 2) 1 6 -1 + +
### 8. What would be the output of following code? @@ -2673,7 +2952,11 @@ Answer: 2) 1 6 -1 3. [ 2, 4, 8, 12, 16 ] true 4. [ 2, 4, 8, 12, 16 ] false -Answer: 3) [ 2, 4, 8, 12, 16 ] true +
Answer + + 3) [ 2, 4, 8, 12, 16 ] true + +
### 9. What would be the output of following code? @@ -2709,11 +2992,15 @@ Answer: 3) [ 2, 4, 8, 12, 16 ] true [ 2, '12', true,false] -Answer: 1) [ 2, '12', true ] +
Answer + + 1) [ 2, '12', true ] [ 2, '12', true ] [ 2, '12', true ] [ 2, '12', true ] +
+ ### 10. What would be the output of following code? ```javascript @@ -2748,12 +3035,16 @@ Answer: 1) [ 2, '12', true ] [] [ 'foo', 'bar', 'john', 'ritz' ] -Answer: 1) [ 'bar', 'john', 'ritz' ] +
Answer + + 1) [ 'bar', 'john', 'ritz' ] [ 'bar', 'john' ] [ 'foo', 'bar', 'john', 'ritz' ] [] [ 'foo', 'bar', 'john', 'ritz' ] +
+ ### 11. What would be the output of following code? ```javascript @@ -2770,7 +3061,11 @@ Answer: 1) [ 'bar', 'john', 'ritz' ] 3. [ 'bar', 'john' ] [ 'bar', 'john' ] [ 'bar', 'john' ] 4. [ 'bar', 'john' ] [] [] -Answer: 1. [ 'bar', 'john' ] [] [ 'foo' ] +
Answer + + 1. [ 'bar', 'john' ] [] [ 'foo' ] + +
### 12. What would be the output of following code? @@ -2787,7 +3082,11 @@ Answer: 1. [ 'bar', 'john' ] [] [ 'foo' ] 3. [ 15, 16, 2, 23, 42, 8 ] 4. [ 2, 8, 15, 16, 23, 42 ] -Answer: 3. [ 15, 16, 2, 23, 42, 8 ] +
Answer + + 3. [ 15, 16, 2, 23, 42, 8 ] + +
## Functions @@ -2814,7 +3113,11 @@ console.log(funcA()); 3. Type Error 4. ReferenceError: this is not defined -Answer: 1) +
Answer + + 1) + +
### 2. What would be the output of following code ? @@ -2834,7 +3137,11 @@ console.log(obj.innerMessage); 3. Type Error 4. undefined true -Answer: 4) undefined true +
Answer + + 4) undefined true + +
### 3. What would be the output of following code ? @@ -2854,7 +3161,11 @@ console.log(obj.innerMessage()); 3. Type Error 4. ReferenceError: this.message is not defined -Answer: 1) Hello +
Answer + + 1) Hello + +
### 4. What would be the output of following code ? @@ -2875,8 +3186,12 @@ console.log(obj.innerMessage()); 3. undefined 4. ReferenceError: this.message is not defined -Answer: 3) undefined +
Answer + + 3) undefined +
+ ### 5. What would be the output of following code ? ```javascript @@ -2897,7 +3212,11 @@ console.log(obj.innerMessage()); 3. undefined 4. ReferenceError: self.message is not defined -Answer: 2) 'Hello' +
Answer + + 2) 'Hello' + +
### 6. What would be the output of following code ? @@ -2915,7 +3234,11 @@ console.log(myFunc()); 3. undefined 4. ReferenceError: this.message is not defined -Answer: 3) undefined +
Answer + + 3) undefined + +
### 7. What would be the output of following code ? @@ -2933,7 +3256,11 @@ console.log(myFunc()); 3. undefined 4. ReferenceError: this.message is not defined -Answer: 2) 'Hi John' +
Answer + + 2) 'Hi John' + +
### 8. What would be the output of following code ? @@ -2950,7 +3277,11 @@ console.log(myFunc()); 3. undefined 4. ReferenceError: this.message is not defined -Answer: 2) 'Hi John' +
Answer + + 2) 'Hi John' + +
### 9. What would be the output of following code ? @@ -2968,7 +3299,11 @@ console.log(myFunc("a","b","c","d")); 3. undefined 4. ReferenceError -Answer: a) 2 2 2 +
Answer + + a) 2 2 2 + +
### 10. What would be the output of following code ? @@ -2986,7 +3321,11 @@ console.log(myFunc("a","b","c","d")); 3. undefined 4. ReferenceError -Answer: 2) 0 2 4 +
Answer + + 2) 0 2 4 + +
## Object Oriented @@ -3016,7 +3355,11 @@ var person1 = new Person('John'); 3. John undefined 4. John John -Answer: 1) John Person +
Answer + + 1) John Person + +
## Scopes @@ -3041,7 +3384,11 @@ console.log(userInfo.userName); 3. 12345678 undefined 4. undefined undefined -Answer: 3) 12345678 undefined +
Answer + + 3) 12345678 undefined + +
### 2. What would be the output of following code ? @@ -3058,7 +3405,11 @@ console.log(Employee.employeeId); 3. bq1uy 4. undefined -Answer: 4) undefined +
Answer + + 4) undefined + +
### 3. What would be the output of following code ? @@ -3080,7 +3431,11 @@ console.log(new Employee().employeeId); 3. bq1uy 1BJKSJ kj182 4. undefined 1BJKSJ kj182 -Answer: 2) bq1uy 1BJKSJ bq1uy +
Answer + + 2) bq1uy 1BJKSJ bq1uy + +
### 4. What would be the output of following code ? @@ -3101,7 +3456,11 @@ var employeeId = 'aq123'; 3. aq123 aq123 4. foo123 undefined -Answer: 1) foo123 aq123 +
Answer + + 1) foo123 aq123 + +
## Call, Apply, Bind @@ -3122,7 +3481,11 @@ Answer: 1) foo123 aq123 3. World 4. [ 'W', 'o', 'r', 'l', 'd' ] -Answer: 4) [ 'W', 'o', 'r', 'l', 'd' ] +
Answer + + 4) [ 'W', 'o', 'r', 'l', 'd' ] + +
### 2. What would be the output of following code ? @@ -3153,7 +3516,11 @@ Answer: 4) [ 'W', 'o', 'r', 'l', 'd' ] 3. Total amount left in account: 3600 Total amount left in account: 3300 4. Total amount left in account: 5600 Total amount left in account: 5600 -Answer: 1) Total amount left in account: 5600 Total amount left in account: 5300 +
Answer + + 1) Total amount left in account: 5600 Total amount left in account: 5300 + +
### 3. What would be the output of following code ? @@ -3185,7 +3552,11 @@ Answer: 1) Total amount left in account: 5600 Total amount left in account: 5300 3. 5600 3300 5100 4. undefined undefined undefined -Answer: 1) 5600 5300 5100 +
Answer + + 1) 5600 5300 5100 + +
### 4. What would be the output of following code ? @@ -3217,7 +3588,11 @@ Answer: 1) 5600 5300 5100 3. 5600 3300 5100 4. undefined undefined undefined -Answer: 2) 3600 3300 3100 +
Answer + + 2) 3600 3300 3100 + +
### 5. What would be the output of following code ? @@ -3234,7 +3609,11 @@ Answer: 2) 3600 3300 3100 3. Window 4. undefined -Answer: 1) Hello John +
Answer + + 1) Hello John + +
### 6. Suggest your question! @@ -3264,7 +3643,11 @@ getDataFromServer('www.google.com').then(function(name){ 3. Reference Error 4. fn is not defined -Answer: 1) John +
Answer + + 1) John + +
### 2. What would be the output of following code ? @@ -3308,9 +3691,13 @@ Answer: 1) John [42, 23, 16, 15, 8, 2] 4. Reference Error -Answer: 1) [ 2, 8, 15, 16, 23, 42 ] +
Answer + + 1) [ 2, 8, 15, 16, 23, 42 ] [ 2, 8, 15, 16, 23, 42 ] [ 2, 8, 15, 16, 23, 42 ] + +
## Return Statement @@ -3334,7 +3721,11 @@ Answer: 1) [ 2, 8, 15, 16, 23, 42 ] 3. Reference Error 4. Uncaught TypeError: Cannot read property 'fullName' of undefined -Answer: 4) Uncaught TypeError: Cannot read property 'fullName' of undefined +
Answer + + 4) Uncaught TypeError: Cannot read property 'fullName' of undefined + +
### 2. What would be the output of following code ? @@ -3352,7 +3743,11 @@ console.log(numb); 3. 2 4. (2,4,5) -Answer: 1) 5 +
Answer + + 1) 5 + +
### 3. What would be the output of following code ? @@ -3370,7 +3765,11 @@ console.log(numb); 3. "" 4. 0 -Answer: 2) undefined +
Answer + + 2) undefined + +
### 4**. What would be the output of following code ? @@ -3392,7 +3791,11 @@ console.log(mul(2)(3)[1](4)); 3. Reference Error 4. 10, 6 -Answer: 1) 6, 10 +
Answer + + 1) 6, 10 + +
### 5**. What would be the output of following code ? @@ -3416,7 +3819,11 @@ console.log(mul(2)(3).sum(4)); 3. Reference Error 4. 10, 6 -Answer: 1) 6, 10 +
Answer + + 1) 6, 10 + +
### 6. What would be the output of following code ? @@ -3440,7 +3847,11 @@ console.log(mul(2)(3)(4)(5)(6)); 3. Reference Error 4. Type Error -Answer: 1) 720 +
Answer + + 1) 720 + +
### 7. What would be the output of following code ? @@ -3467,7 +3878,9 @@ personObj.getName2(); 3. undefined Tony 4. Tony Tony -Answer: 2) Tony undefined +
Answer + + 2) Tony undefined Explaination: **getName1()** function works fine because it's being called from ***personObj***, so it has access to *this.name* property. But when while calling **getnName2** which is defined under *Object.prototype* doesn't have any proprty named *this.name*. There should be *name* property under prototype. Following is the code: @@ -3490,6 +3903,7 @@ Object.prototype.name="Steve"; personObj.getName2(); ``` +
## Contributing From 93751de0c0d41dcf3fc38c3e742419317cced0b9 Mon Sep 17 00:00:00 2001 From: AlexTaietti Date: Sun, 16 Aug 2020 02:40:08 +0100 Subject: [PATCH 135/141] corrected some typos --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5a4ba4d..3f3f3b4 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ var x; // declaring x console.log(x); // output: undefined ``` -`var x = 1` is both declaration and definition (also we can say we are doing initialisation), Here declaration and assignment of value happen inline for variable x, In JavaScript every variable declaration and function declaration brings to the top of its current scope in which it's declared then assignment happen in order this term is called `hoisting`. +`var x = 1` is both declaration and definition (what we are doing is called "initialisation"), Here declaration and assignment of value happen inline for variable x, In JavaScript both variable declarations and function declarations go to the top of the scope in which they are declared, then assignment happens—this series of events is called `hoisting`. A variable can be declared but not defined. When we try to access it, It will result `undefined`. @@ -644,7 +644,7 @@ The `typeof` operator checks if a value belongs to one of the seven basic types: `typeof(null)` will return `object`. -`instanceof` is much more intelligent: it works on the level of prototypes. In particular, it tests to see if the right operand appears anywhere in the prototype chain of the left. `instanceof` doesn’t work with primitive types. It `instanceof` operator checks the current object and returns true if the object is of the specified type, for example: +`instanceof` is much more intelligent: it works on the level of prototypes. In particular, it tests to see if the right operand appears anywhere in the prototype chain of the left. `instanceof` doesn’t work with primitive types. The `instanceof` operator checks the current object and returns true if the object is of the specified type, for example: ```javascript var dog = new Animal(); @@ -674,11 +674,11 @@ counterArray["C"] = 1; ```
Answer -First of all, in case of JavaScript an associative array is the same as an object. Secondly, even though is no built-in function or property available to calculate the length/size an object, we can write such function ourselves. +First of all, in the case of JavaScript an associative array is the same as an object. Secondly, even though there is no built-in function or property available to calculate the length/size an object, we can write such function ourselves. #### Method 1 -`Object` has `keys` method which can we used to calculate the length of object. +`Object` has `keys` method which can be used to calculate the length of object. ```javascript Object.keys(counterArray).length; // Output 3 From b32e23ec3b80f94764b0e80a486ab6e1f11fa649 Mon Sep 17 00:00:00 2001 From: AlexTaietti Date: Sat, 22 Aug 2020 21:17:49 +0100 Subject: [PATCH 136/141] corrected typos and rephrased some sentences --- README.md | 77 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 3f3f3b4..b8b329b 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,12 @@ # 123-JavaScript-Interview-Questions -It's a book about frontend interview question. We hope that it will help all javascript developers to prepare for a technical job interview. +This book's goal is to help javascript frontend developers prepare for technical job interviews through a collection of carefully compiled questions. ## Want to buy a book in paper form? Want some badass flashcards? - - This Book will be soon completed and then it will be available to buy in a paper form. If you want me to sent an early copy of this book, please add your name and email address in google form here [Google Form](https://goo.gl/forms/c8ubV1tWBBdz6fJP2). - - If you don't want to wait, you can buy [Yuri's JavaScript Flashcards](http://flashcardsjs.com), a set of frontend interview questions sorted by popularity among the interviewers printed on beautiful poker-size flashcards. + - This Book will be soon completed and then it will be available to buy in paper form. If you want me to send you an early copy of this book, please add your name and email address in this [Google Form](https://goo.gl/forms/c8ubV1tWBBdz6fJP2). + - If you don't want to wait, you can buy [Yuri's JavaScript Flashcards](http://flashcardsjs.com), a set of frontend interview questions sorted by popularity among interviewers printed on beautiful poker-size flashcards. ## Question 1. What's the difference between `undefined` and `not defined` in JavaScript @@ -17,14 +17,14 @@ In JavaScript if you try to use a variable that doesn't exist and has not been d Before starting further discussion let's understand the difference between declaration and definition. -`var x` is a declaration because you are not defining what value it holds yet, but you are declaring its existence and the need for memory allocation. +`var x` is a declaration because we are not defining what value it holds yet, but we are declaring its existence and the need for memory allocation. ```javascript var x; // declaring x console.log(x); // output: undefined ``` -`var x = 1` is both declaration and definition (what we are doing is called "initialisation"), Here declaration and assignment of value happen inline for variable x, In JavaScript both variable declarations and function declarations go to the top of the scope in which they are declared, then assignment happens—this series of events is called `hoisting`. +`var x = 1` is both declaration and definition, here declaration and assignment of value happen inline for variable x—what we are doing is called "initialisation". In JavaScript both variable declarations and function declarations go to the top of the scope in which they are declared, then assignment happens—this series of events is called "hoisting". A variable can be declared but not defined. When we try to access it, It will result `undefined`. @@ -48,7 +48,7 @@ console.log(y); // Output: ReferenceError: y is not defined ```javascript -// if( x <= 100 ) {...} +if( x <= 100 ) {...} if( !(x > 100) ) {...} ```
Answer @@ -56,9 +56,9 @@ if( !(x > 100) ) {...} `NaN <= 100` is `false` and `NaN > 100` is also `false`, so if the value of `x` is `NaN`, the statements are not the same. -The same holds true for any value of x that being converted to Number, returns NaN, e.g.: `undefined`, `[1,2,5]`, `{a:22}` , etc. +The same holds true for any value of x that being converted to type Number, returns `NaN`, e.g.: `undefined`, `[1,2,5]`, `{a:22}` , etc. -This is why you need to pay attention when you deal with numeric variables. `NaN` can’t be equal, less than or more than any other numeric value, so the only reliable way to check if the value is `NaN`, is to use `isNaN()` function. +This is why you need to pay attention when you deal with numeric variables. `NaN` can’t be equal, less than or more than any other numeric value, so the only reliable way to check if the value is `NaN`, is to use the `isNaN()` function.
@@ -66,7 +66,7 @@ This is why you need to pay attention when you deal with numeric variables. `NaN
Answer -One of the drawback of declaring methods directly in JavaScript objects is that they are very memory inefficient. When you do that, a new copy of the method is created for each instance of an object. Let's see it on example: +One of the drawbacks of declaring methods directly in JavaScript objects is that they are very memory inefficient. When you do that, a new copy of the method is created for each instance of an object. Here's an example: ```javascript var Employee = function (name, company, salary) { @@ -80,7 +80,7 @@ var Employee = function (name, company, salary) { }; }; -// we can also create method in Employee's prototype: +// Alternatively we can add the method to Employee's prototype: Employee.prototype.formatSalary2 = function() { return "$ " + this.salary; } @@ -91,7 +91,7 @@ var emp2 = new Employee('Dinesh Gupta', 'Company 2', 1039999); var emp3 = new Employee('Erich Fromm', 'Company 3', 1299483); ``` -Here each instance variable `emp1`, `emp2`, `emp3` has own copy of `formatSalary` method. However the `formatSalary2` will only be added once to an object `Employee.prototype`. +In this case each instance variable `emp1`, `emp2`, `emp3` has its own copy of the`formatSalary` method. However the `formatSalary2` will only be added once to `Employee.prototype`.
@@ -99,39 +99,45 @@ Here each instance variable `emp1`, `emp2`, `emp3` has own copy of `formatSalary
Answer -A closure is a function defined inside another function (called parent function) and has access to the variable which is declared and defined in parent function scope. +A closure is a function defined inside another function (called parent function) and as such it has access to the variables declared and defined within its parent function's scope. + +The closure has access to the variables in three scopes: -The closure has access to the variable in three scopes: - Variable declared in his own scope -- Variable declared in parent function scope +- Variable declared in its parent function's scope - Variable declared in the global namespace ```javascript -var globalVar = "abc"; +var globalVar = "abc"; //Global variable + +// Parent self-invoking function +(function outerFunction (outerArg) { // start of outerFunction's scope -// Parent self invoking function -(function outerFunction (outerArg) { // begin of scope outerFunction - // Variable declared in outerFunction function scope - var outerFuncVar = 'x'; + var outerFuncVar = 'x'; // Variable declared in outerFunction's function scope + // Closure self-invoking function - (function innerFunction (innerArg) { // begin of scope innerFunction - // variable declared in innerFunction function scope - var innerFuncVar = "y"; + (function innerFunction (innerArg) { // start of innerFunction's scope + + var innerFuncVar = "y"; // variable declared in innerFunction's function scope console.log( "outerArg = " + outerArg + "\n" + "outerFuncVar = " + outerFuncVar + "\n" + "innerArg = " + innerArg + "\n" + "innerFuncVar = " + innerFuncVar + "\n" + "globalVar = " + globalVar); - // end of scope innerFunction - })(5); // Pass 5 as parameter -// end of scope outerFunction -})(7); // Pass 7 as parameter + + // end of innerFunction's scope + + })(5); // Pass 5 as parameter to our Closure + +// end of outerFunction's scope + +})(7); // Pass 7 as parameter to the Parent function ``` -`innerFunction` is closure which is defined inside `outerFunction` and has access to all variable which is declared and defined in outerFunction scope. In addition to this function defined inside the function as closure has access to the variable which is declared in `global namespace`. +`innerFunction` is a closure which is defined inside `outerFunction` and consequently has access to all the variables which have been declared and defined within `outerFunction`'s scope as well as any variables residing in the program's global scope. -Output of above code would be: +The output of the code above would be: ```javascript outerArg = 7 @@ -151,8 +157,6 @@ console.log(mul(4)(3)(4)); // output : 48 ```
Answer -Below is the code followed by the explanation of how it works: - ```javascript function mul (x) { return function (y) { // anonymous function @@ -163,14 +167,15 @@ function mul (x) { } ``` -Here the `mul` function accepts the first argument and returns the anonymous function which takes the second parameter and returns the anonymous function which takes the third parameter and returns the multiplication of arguments which is being passed in successive +Here the `mul` function accepts the first argument and returns an anonymous function which then takes the second parameter and returns one last anonymous function which finally takes the third and final parameter; the last function then multiplies `x`, `y` and `z`, and returns the result of the operation. + +In Javascript, a function defined inside another function has access to the outer function's scope and can consequently return, interact with or pass on to other functions, the variables belonging to the scopes that incapsulate it. -In Javascript function defined inside has access to outer function variable and function is the first class object so it can be returned by the function as well and passed as an argument in another function. - A function is an instance of the Object type -- A function can have properties and has a link back to its constructor method -- A function can be stored as variable -- A function can be pass as a parameter to another function -- A function can be returned from another function +- A function can have properties and has a link to its constructor method +- A function can be stored as a variable +- A function can be passed as a parameter to another function +- A function can be returned by another function
From a14c83391324e6030e3e8ac5f64593e75250a7bc Mon Sep 17 00:00:00 2001 From: Kamlesh Pandey <47499656+KamleshPandey98@users.noreply.github.com> Date: Thu, 1 Oct 2020 20:03:56 +0530 Subject: [PATCH 137/141] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b8b329b..824b2b1 100644 --- a/README.md +++ b/README.md @@ -3776,7 +3776,7 @@ console.log(numb);
-### 4**. What would be the output of following code ? +### 4. What would be the output of following code ? ```javascript function mul(x){ @@ -3802,7 +3802,7 @@ console.log(mul(2)(3)[1](4));
-### 5**. What would be the output of following code ? +### 5. What would be the output of following code ? ```javascript function mul(x) { From 0f3706c1b447b7f012145718d4a259b885bfef89 Mon Sep 17 00:00:00 2001 From: pranav247sw Date: Mon, 26 Apr 2021 11:49:14 +0530 Subject: [PATCH 138/141] Typp/Grammar checks and corrections --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b8b329b..df5e30f 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ A closure is a function defined inside another function (called parent function) The closure has access to the variables in three scopes: -- Variable declared in his own scope +- Variable declared in its own scope - Variable declared in its parent function's scope - Variable declared in the global namespace @@ -333,7 +333,7 @@ console.log(output); ```
Answer -The code above will output `0` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object it's **local variable**. `delete` operator doesn't affect local variables. +The code above will output `0` as output. `delete` operator is used to delete a property from an object. Here `x` is not an object, it's a **local variable**. `delete` operator doesn't affect local variables.
From dd5e263b75e971019c8585ea6e2fbe72e9ce254f Mon Sep 17 00:00:00 2001 From: kalon1997 Date: Thu, 12 May 2022 12:21:33 +0530 Subject: [PATCH 139/141] added 48th ques about callbackhell promise async/await --- README.md | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) diff --git a/README.md b/README.md index fdae8f6..a83a053 100644 --- a/README.md +++ b/README.md @@ -2107,6 +2107,136 @@ btn.addEventListener('click', clickHandler.handleClick.bind(clickHandler)); +### 48. How to replace callbackhell with Promise or Async/Await with examples ? + +
Answer + +- Part I Callbackhell. +- Calling one callback function inside another and so on is callbackhell. +- First we are defining three functions addTen, subFive and mulTwo. +- These three functions while called with a number, will return a callback. +- The callback function will return either result or error. + +```js +const addTen = (num, callback) => + {return callback(num+10, false)} +``` + +```js +const subFive = (num, callback) => + {return callback(num-5, false)} +``` + +```js +const mulTwo = (num, callback) => + {return callback(num*2, false)} +``` + +- Now lets call these one by one in nested way. +- The result of previous will serve as input for next callback. + +```js +const ans = addTen(5, (addRes, addErr) => { // addRess = 15 + if(!addErr) + { + return subFive(addRes , (subRes, subErr) => { //subRes = 10 + if(!subErr){ + return mulTwo(subRes, (mulRes, mulErr) => { + if(!mulErr) + { + return mulRes; //20 + } + }) + } + }) + } + }) +console.log(ans); // 20 +``` + +- Part II Promise. +- Promise has two parameters resolve and reject. +- Rewrting those three function definations as well, without a callback. + +```js +const addTen = (num) => {return num+10} +``` + +```js +const subFive = (num) => {return num-5} +``` + +```js +const mulTwo = (num) => {return num*2} +``` + +- Creating a promise. + +```js +const promise = new Promise((resolve, reject) => { + if(true) + resolve(5) + else + reject("Something went wrong ") +}) +``` + +- Calling those three functions one by one. +- "then" will keep on returning the result and if any error "catch" will catch it. + +```js +promise.then(addTen).then(subFive).then(mulTwo).then((ans)=>{ +console.log(ans) +}).catch((err)=>{console.log(err)}); +``` + +- Part III Async / Await. +- It actually uses promise internally. + +```js +const addTen = ( num ) => { + return new Promise( ( resolve, reject ) => { + resolve( num+10) + } ) +} +``` + +```js +const subFive = ( num ) => { + return new Promise( ( resolve, reject ) => { + resolve( num-5) + } ) +} +``` + +```js +const mulTwo = ( num ) => { + return new Promise( ( resolve, reject ) => { + resolve( num*2) + } ) +} +``` + +- Put Async keyword before function name and Await before the statments inside the function +- Await will make the later code wait until the result of that statement is returned. +- Always put this inside a try/catch block. + +```js +const ans = async (num) => { + try { + var addRes = await addTen(num); + var subRes = await subFive(addRes); + var mulRes = await mulTwo(subRes); + console.log(mulRes) + } catch (err) { + console.log(err) + } +} +ans(5) +``` + +
+ # Coding Questions ## Passing values by reference vs by value From fd7a01788d0c33f58ec296e622ae653fb4a45dc6 Mon Sep 17 00:00:00 2001 From: Akhil24-abd Date: Mon, 17 Oct 2022 23:39:22 +0530 Subject: [PATCH 140/141] Questions added --- README.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/README.md b/README.md index fdae8f6..a4fc97a 100644 --- a/README.md +++ b/README.md @@ -3910,6 +3910,41 @@ personObj.getName2(); +### 8 . What would be the output of the following code ? +```javascript +let a = true; +let c = 0; + +setTimeout(() => { + a = false; +},2000) + +while(a){ + console.log('Hello') +} +``` +
Answer +The above program will print Hello infinitely. Since, Javascript is a single threaded language the actual execution happens only on the main thread. So, setTimeout will wailt for 2000 milliseconds on a seperate thread as while loop has occupied the main thread. The exit condition for the loop is to set the variable a as fasle. But as the loop continously running on the main thread , it a cannot be set false. +
+ +### 9 . What would be the output of the following code ? +```javascript + +let c=0; + +let id = setInterval(() => { + console.log(c++) +},200) + +setTimeout(() => { + clearInterval(id) +},2000) +``` + +
Answer +The above program will print 0 to 9 sequentially. +
+ ## Contributing We always appreciate your feedback on how the book can be improved, and more questions can be added. If you think you have some question then please add that and open a pull request. From 3bb40311689916c371d8a4fba35cfc13c093b774 Mon Sep 17 00:00:00 2001 From: sumeyra davran Date: Sat, 25 Nov 2023 11:37:44 +0300 Subject: [PATCH 141/141] update the answer --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a4fc97a..42c4b1f 100644 --- a/README.md +++ b/README.md @@ -3120,7 +3120,9 @@ console.log(funcA());
Answer - 1) + 1) funcA Window {...} + innerFunc1 Window {...} + innerFunA11 Window {...}