Skip to content

zogorn/javascript-interview-questions

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 

Repository files navigation

Essential JavaScript Interview Questions

1. Explain the result of output:

(function test () {
	console.log(
		{}.constructor === arguments.constructor,
		[].constructor === arguments.constructor
	);
})();

2. Explain the result of output:

(function test (arguments) {
	console.log(arguments[0]);
})(100);
(function test () {
    var arguments;
	console.log(arguments[0]);
})(200);
(function test() {
	function sum() {
		var sum = 0, i;
		for (i in arguments) {
			sum += i;
		}
		return sum;
	}

	console.log(sum(10, 20, 30, 40, 50));
})();

3. Explain the result of output:

(function test() {
	console.log(
		function () {} instanceof Object,
		function () {} instanceof Function,
		Function instanceof Object,
		Object instanceof Function
	);
})();

4. Explain the result of output:

(function test() {
	console.log(
		function () {}.apply.length
	);
})();

5. Explain the result of output:

(function test() {
	console.log(
		Function === Object.constructor,
		Function === Number.constructor,
		Function === Function.constructor,
		Function === Window.constructor,
		Function === Function.prototype.constructor,
		Object === Object.prototype.constructor,
		Number === Number.prototype.constructor,
		Array === Array.prototype.constructor,
		Window === Window.prototype.constructor
	);
})();

6. Explain the result of output:

(function test() {
	console.log(
		typeof Object.prototype,
		typeof String.prototype,
		typeof RegExp.prototype,
		typeof Function.prototype
	);
})();
(function test() {
	console.log(
		typeof undefined,
		typeof typeof undefined,
		typeof null,
		typeof 1 / null,
		typeof [],
		typeof {},
		typeof document
	);
})();
(function test() {
	console.log(
		typeof Infinity,
		typeof NaN,
		typeof {null: null}.null,
		typeof {NaN: NaN}.NaN,
		typeof {Infinity: Infinity}.Infinity
	);
})();

7. Explain the result of output:

(function test() {
	var fn = function () {
		return this * 2;
	};

	console.log(fn.apply(undefined));
	console.log(fn.apply(null));
	console.log(fn.apply(1));
})();
(function test() {
	'use strict';
	var fn = function () {
		return this * 2;
	};

	console.log(fn.apply(undefined));
	console.log(fn.apply(null));
	console.log(fn.apply(1));
})();

8. Explain the result of output:

(function test() {
	console.log(
		Object.prototype.toString.call([]),
		Object.prototype.toString.call({}),
		Object.prototype.toString.call(Window),
		(16).toString(16),
		(true).toString(16),
		(false).toString(16)
	);
})();

9. Explain the result of output:

(function test() {
	var sum = function (a, b) {
		return a + b;
	};
	console.log(typeof sum.call.apply);
	console.log(sum.call.apply(null, [1, 2]));
})();

10. Explain the result of output:

(function test() {
	console.log(void (p = 1 / ""), p);
})();

11. Explain the result of output:

(function test() {
	(function () {
		a = 1;
		var a = 2;
	})();
	console.log(a);
})();
(function test() {
	var a = 1;
	function test() {
		if (!a) {
			var a = 10;
		}
		console.log(a);
	}
	test();
	console.log(a);
})();
(function test() {
	(function () {
		var a = b = 3;
	})();

	console.log(
		typeof a,
		typeof b
	);
})();

12. Which a variant is preferable and why?

(function test() {
	console.log(error !== undefined && error.x);
})();
(function test() {
	console.log(typeof error !== 'undefined' && error.x);
})();

13. Explain the result of output:

(function test() {
	var a = [];

	console.log(
		a.length,
		[,].length,
		[, ,].length
	);

	a.length = -1;
	console.log(a.length);
})();
(function test() {
	var a = [1, 2, 3, 4, 5];
	a.length = null;

	console.log(a[4]);
})();
(function test() {
	var a = [1, 2, 3, 4, 5];
	a.length = undefined;

	console.log(a[4]);
})();
(function test() {
	var a = [[[1], 2], 3];

	console.log(a.length);
})();
(function test() {
	console.log(
	    [1,2,[3,4]] + [[5,6], 7, 8]
	);
})();

14. Explain the result of output:

(function test() {
	console.log(
		9 < 5 < 1,
		2 < 6 < 1,
		1 < 3 < 4
	);
})();

15. Explain the result of output:

(function test() {
	function fn() {
		return
		{
			value: "test"
		}
	}

	console.log(
		typeof fn()
	);
})();

16. Explain the result of output:

(function test() {
	function sum(a, b) {
		return a + b;
	}

	function sum(c) {
		return c;
	}

	console.log(sum(3));
	console.log(sum(2, 4));
})();

17. Explain the result of output:

(function test() {
	a = 1;
	window.b = 2;
	this.c = 3;
	var d = 4;

	delete a;
	delete b;
	delete c;
	delete d;

	console.log(typeof a, typeof b, typeof c, typeof d);
})();

18. Explain the result of output:

(function test() {
	var a = 1;

	setTimeout(function () {
		a = 0;
		console.log('Hi!');
	}, 0);

	while (a) {
	}
	console.log('Hello!');
})();

19. Explain the result of output:

(function test() {
	console.log(
		[] - [],
		[] + [],
		{} - {},
		{} + {}
	);
})();

20. Explain the result of output:

(function test() {
	var holder = {value: 1},
		holder2 = holder;

	holder.result = holder = {value: 0};

	console.log(
		holder.result,
		holder2
	);
})();

21. Explain the result of output:

(function test() {
	var test = {
		property: 'Value',

		getPropertyValue: function () {
			return this.property;
		}
	};

	var getPropertyValue = test.getPropertyValue;

	console.log(
		getPropertyValue(),
		test.getPropertyValue()
	);
})();
(function test () {
	"use strict";
	
	var holder, fn;
	holder = {
		holderFn: function () {
			console.log(this);
		}
	};
	fn = holder.holderFn;
	
	holder.holderFn();
	fn();
})();

22. What is the maximum depth of the stack, starting with the "test" function?

<script>
    var a = [1, 2, 3, 4, 5];
    
    (function test() {
        console.log((new Error()).stack);
    
        var item = a.pop();
        item && setTimeout(arguments.callee, 0);
    })();
</script>
var a = [1, 2, 3, 4, 5];

(function test() {
    console.log((new Error()).stack);

    var item = a.pop();
    item && arguments.callee();
})();

23. Explain the result of output:

(function test() {
	function fn() {
		arguments.callee.count = arguments.callee.count || 0;
		return arguments.callee.count++;
	}

	console.log(
		fn(),
		fn(),
		fn()
	);
})();

24. Explain the result of output:

(function test() {
	var a = '5', b = 2, c = a+++b;
	console.log(c);
})();

25. Explain the result of output:

console.log(
	016 * 2,
	0x16 * 2
);
console.log(
	Math.floor(999.99) === ~~999.99,
	Math.floor(-999.99) === ~~-999.99,
	~function(){}(),
	~~function(){}(),
	~~null,
	~~undefined,
	~~[],
	~~{},
	~~'Test'
);
console.log(
	1 + "2" + "2",
	1 + +"2" + "2",
	1 + -"1" + "2",
	+"1" + "1" + "2",
	"2" * 3,
	"6" / 2,
	"A" - "B" + "2",
	"A" - "B" + 2
);
console.log(0.1 + 0.2);
console.log(0.1 + 0.2 === 0.3);
console.log(
	(0.1 + 0.2) + 0.3 === 0.1 + (0.2 + 0.3)
);
console.log(
	Number('Test!'),
	Number(''),
	Number('00010'),
	Number(true),
	Number(NaN),
	parseInt('2', 2),
	parseInt('011', 8),
	parseInt('011', 10),
	parseInt('00C', 16),
	parseInt([10, 9, 8, 7, 6, 5, 4, 3, 2, 1]),
	1 / -0,
	isNaN(1 / -0),
	isFinite(1 / -0),
	0 / -0,
	isNaN(0 / -0),
	isFinite(0 / -0),
	1 / 0,
	isNaN(1 / 0),
	isFinite(1 / 0),
	0 / 0,
	isNaN(0 / 0),
	isFinite(0 / 0),
	NaN === NaN,
	Infinity === Infinity
);

26. Explain the result of output:

console.log(true == [1] && true == [2]);
console.log(
	new Boolean() == true,
	new Boolean("") == true,
	new Boolean("0") == true,
	new Boolean("1") == true,
	new Boolean("true") == true
);
console.log(
	false == '0',
	false === '0',
	true == '1',
	true === '1',
	true == '2',
	true === '2'
);

27. Explain the result of output:

(function () {
    var fn = function () {
        console.log(typeof this);
    };
    fn.call("Hello World!");
})();

(function () {
    "use strict";
    var fn = function () {
        console.log(typeof this);
    };
    fn.call("Hello World!");
})();
console.log(
	(function () {
		return (new this).stack;
	}).apply(Error)
);

28. Explain the result of output:

(function test() {
	var a = {},
		b = {value: 'test1'},
		c = {value: 'test2'};

	a[b] = 'test3';
	a[c] = 'test4';

	console.log(a[b]);
})();

29. Explain the result of output:

console.log(
	Date(),
	new Date,
	+Date(),
	+new Date,
	+new Date(),
	+new Date() === +new Date
);

30. Explain the result of output:

console.log(typeof confirm('Do you like JavaScript?'));

31. Eliminate non-existent state of promise.

  1. fulfilled
  2. awaiting
  3. pending
  4. refused
  5. rejected
  6. interrupted

32. Explain the result of output:

(function test() {
	console.log(
		[1, 2, 3, 4, 5].map(function (n) {
			return n === 1 && 1 || arguments.callee(n - 1) * n;
		})
	);
})();
(function test() {
	"use strict";
	console.log(
		[1, 2, 3, 4, 5].map(function (n) {
			return n === 1 && 1 || arguments.callee(n - 1) * n;
		})
	);
})();

33. Explain the result of output:

(function test() {
	var s1 = 'test',
		s2 = new String('test'),
		s3 = String('test');

	console.log(
		s1 == s2,
		s1 === s2,
		s1 == s3,
		s1 === s3,
		s1.constructor === s2.constructor,
		s1.constructor === s3.constructor,
		typeof s1,
		typeof s2,
		typeof s3
	);

	console.log(
		s1.slice() == s1,
		s1.slice() == s2,
		s1.slice() == s3,
		s1.slice() === s1,
		s1.slice() === s2,
		s1.slice() === s3
	);

	s1[2] = 'w';
	console.log(s1);
})();

34. Explain the result of output:

(function test() {
	var a = [1, 2, 3],
		b = a.reverse(),
		c = [4, 5, 6];

	b.push(c);

	console.log(a.length, b.length);
	console.log(a.slice(-1));
	console.log(b.slice(-1));
})();

35. Explain the result of output:

(function test() {
	for (var i = 0; i < 5; i++) {
		setTimeout(function () {
			console.log(i);
		}, 0)
	}
})();

36. Explain the result of output:

<script>
    Object.defineProperty(this, "value", {
        value: 100,
        writable: false
    });
    
    value = 200;
    
    console.log(window.value, this.value, value);
</script>
<script>
    Object.defineProperty(this, "variable", {
        value: 100,
        configurable: false
    });
    
    console.log(delete variable);
</script>
<script>
    var a = 100;
    console.log(Object.getOwnPropertyDescriptor(this, "a"));
    
    b = 200;
    console.log(Object.getOwnPropertyDescriptor(this, "b"));
</script>

37. Explain the result of output:

(function test() {
	var Factory = function () {
		var a = [];
		a[Array.prototype.pop.apply(arguments)] = 1;
		return a;
	};

	console.log(
		Factory(0).length,
		Factory(100).length,
		Factory(Infinity).length,
		Factory(NaN).length
	);
})();

38. Explain the result of output when the page is fully loaded:

<html>
    <head>
        <script>
            setTimeout(function () {
                console.log(
                        performance.now() > 5000
                );
            }, 10000);
        </script>
    </head>
    <body>
    </body>
</html>

39. Do you see the pitfalls in the code?

<html>
    <body>
        <script>
              function nodeHouse(id) {
                var node;
                return {
                  make: function () {
                    node = document.createElement("div");
                    node.setAttribute('id', id);
                    document.body.appendChild(node);
                    return this;
                  },
                  destroy: function () {
                    document.body.removeChild(node);
                    return this;
                  },
                  test: function () {
                    return node.getAttribute('id') == id;
                  }
                };
              }
            
              var nodesHouse = [],
                      currentNodeHouse;
            
              for (var i = 0; i < 100000; i++) {
                nodesHouse.push(currentNodeHouse = nodeHouse(i));
                currentNodeHouse.make().destroy();
              }
        </script>
    </body>
</html>

40. How can we prevent a memory leak?

var Key = function (key) {
	this.key = key;
};

var map = new Map();

function addToMap() {
	var currentKey = new Key(100);
	map.set(currentKey, {});
	currentKey = null;

	setTimeout(addToMap);
}

setTimeout(addToMap);

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published