- 2019.08: 1.1.x
- 2019.09: 1.2.x
- 2019.10: 2.1.x
目录
- Q1.
typeof null === typeof {}
的结果及其原因 - Q2.
var str1 = 'string', str2 = String('string'), str3 = new String('string');
,变量str1
、str2
和str3
结果是相同的吗?如果不相同可能通过处理使其相同吗? - Q3.分别说出以下比较的结果及原因:
console.log(3.0 === 3);
console.log(+0 === -0);
console.log(+Infinity === -Infinity);
console.log(NaN === NaN);
- Q4.什么是Number的安全整数?以下运算操作的结果是什么?
var num = Math.pow(2, 60);
console.log(num);
num++;
console.log(num);
num -= Math.pow(2, 59);
console.log(num);
- Q5.以下代码数据赋值运行都会报错吗?顺带说说
undefined
和null
的区别
var undefined = 'undefined';
var null = 'null';
- Q6.以下代码执行输出的结果是什么?
var x = new Boolean(false);
if (x) {
console.log('true');
} else {
console.log('false');
}
-
Q7.
NaN、null、undefined、true/false、Infinity
中哪些能通过全局属性取值?如浏览器window.NaN
、nodeJswindow.null
-
Q8.除了使用模板字符串外,如何通过最快的方式解决以下字符串赋值报错的问题
var longString = "This is a long String
i need to wrap across multiple lines and don't want to keep in a row
because it's unreadable.";
- Q9.关于Symbol,为什么
Symbol()
不能用new来定义?consol.log(Symbol.length, String.length, Number.length)
的输出是什么?Symbol能转换为数值吗?
-
Q1.分别
new Array(4)
和[,,,]
定义数组的结果是一样的吗? -
Q2.数组最大长度是多少?超出会如何
-
Q3.
console.log(Date.length, Function.length, Array.length, Object.length)
的输出是什么?
- Q1.以下语句会报错吗?如果报错如何最简单进行调整?
var numstr1 = 6.6.toFixed(2);
var numstr2 = 6.toFixed(2);
- Q3.说出以下转换数字数值转换的结果:
// parseInt
parseInt('123.456.789');
parseInt('123abc');
parseInt('abc123');
parseInt(123.456, 36);
parseInt(123.456, 2);
parseInt(123.456, 1);
// parseFloat
parseFloat('123.456.789');
parseFloat('123abc.456.789');
// Number
Number('123a.456');
Number('0x11');
Number('0b11');
Number('0o11');
// Math.round
Math.round('123a.456');
-
Q4.
parseInt()
/parseFloat()
/Number()
/Math.round()
做数值转换时的效率排行顺序,可以的话解释下原因并说明相关应用场景。 -
Q5.介绍一下
Number.prototype.toFixed()
和Number.prototype.toPrecision()
的应用场景 -
Q6.以下双等判断的返回值是什么?
console.log([] == ![]);
console.log([] == '');
console.log('123.000000000000000000000000001' == 123);
console.log(false == []);
console.log(false == 0);
console.log(false == null);
console.log(Symbol('a') == false);
- Q1.请描述以下加法计算结果
1 + null;
1 + '2';
null + false;
false + undefined;
true + false;
[] + [];
{} + {};
{} + [];
[] + {};
{} + true;
[] + true;
'' + Symbol();
-
Q2.
let a = [1];
,如何在不删除/增加数组项的情况下使a == 'abc'
以及a++ > 456
同时成立? -
Q3.有一个对象obj,
var obj = { 0: 1, 1: 2, 2: 3, length: 3}
,如何给它赋予数组的所有方法,如map、reduce、filter等等等等。 -
Q4.请试着解释为什么解构字符串会返回数组,如
[...'abc']
->['a', 'b', 'c']
。 -
Q5.直接修改引用类型的
valueOf()
方法或toString()
方法会有什么后果?举例说明
-
Q1.简单描述let/const与var变量赋值的区别
-
Q2.以下代码执行的输出结果分别是什么?
console.log(a);
var a = 1;
console.log(a);
let a = 1;
console.log(a);
function a () { return 1 }
console.log(a);
var a = () => 1;
var a = 1;
console.log(a);
console.log(window.a);
window.a = 2;
console.log(a);
console.log(window.a)
let a = 1;
console.log(a);
console.log(window.a);
window.a = 2;
console.log(a);
console.log(window.a);
- Q3.以下赋值操作会有问题吗?为什么
``` js
// 操作1
Object.defineProperty(window, 'test', {
writable: true,
value: 123
});
// 操作2
let test = 456;
// 操作1
window.test2 = 'abc';
// 操作2
let test2 = 'def';
- Q1.大致描述以下代码的执行顺序
function a () { console.log('a') }
function b () { console.log('b'); a(); }
function c () { console.log('c'); b(); }
c();
function a () { console.log('a') }
function b () { console.log('b') }
function c () { console.log('c'); new Promise((resolve) => resolve()).then(b); a(); }
c();
- Q1.以下代码执行的输出结果分别是什么?
(function (num) {
console.log(num);
var num = 20;
console.log(num);
function num() {}
console.log(num);
})(10);
function a(b) {
console.log(b);
var b = function () {
console.log(b)
}
b();
}
a(1)
var name = 'World!';
(function () {
if (typeof name === 'undefined') {
var name = 'Jack';
console.log('Goodbye ' + name);
} else {
console.log('Hello ' + name);
}
})();
-
Q2.
try...catch
的作用域有何特殊性?如何优化以及有何作用? -
Q3.针对作用域链我们可以做到哪些性能优化?
var name = "gobal";
var object = {
name : "object",
getName: function(){
return function(){
return this.name;
};
}
};
object.getName()();
var items = document.querySelectorAll('li');
for(var i=0;i<items.length;i++){
items[i].onclick = function(){
alert(i)
}
}
for (var i = 0; i < 6; i++) {
setTimeout(function () {
console.log(i)
}, 1000);
}
- Q3.常见IIFE有哪些作用、应用场景
-
Q1.请列举浅拷贝和深拷贝的方法
-
Q2.深拷贝时遇到对象的自我调用应该如何处理?
-
Q3.描述lodash的深拷贝方法_.clone/_.cloneDeep的原理逻辑
-
Q4.浅拷贝和深拷贝有哪些应用场景?
-
Q1.描述下“标记清除”和“引用计数”两种垃圾回收方式的原理。
-
Q2.为什么要有WeakSet/WeakMap两种数据类型。它们与垃圾回收有何关系?
-
Q3.WeakSet/WeakMap有哪些应用场景?
-
Q1.堆和栈的区别?js的调用堆栈指得是什么
-
Q2.调用堆栈是否有限制,如果有,具体限制是什么?如何避免呢
-
Q1.什么是递归?递归会有隐患吗
-
Q2.什么是尾递归?它的作用是什么?能否举个例子
-
Q1.js实现异步的方式和场景有哪些?
-
Q2.什么是回调,你知道回调地狱么?如何解决回调地狱的问题
-
Q3.你知道Promise吗?那await/async呢?那generator函数呢?有了解过它们babel转为ES5后是啥样的么
-
Q1.js中的消息队列是怎么样的?
-
Q2.什么是宏任务?什么是微任务
- Q1.下面的执行代码依次输出什么?
<body>
<script>
console.log('a1');
setTimeout(function () {
console.log('a2')
}, 0);
new Promise((resolve) => {
console.log('a3');
setTimeout(function () {
console.log('a4')
}, 0);
resolve();
}).then(() => {
console.log('a5')
});
console.log('a6');
</script>
<script>
console.log('b1');
setTimeout(function () {
console.log('b2')
}, 0);
new Promise((resolve) => {
console.log('b3');
setTimeout(function () {
console.log('b4')
}, 0);
resolve();
}).then(() => {
console.log('b5')
});
console.log('b6');
</script>
</body>
- Q2.简单描述下事件循环的机制,浏览器环境与nodejs环境下的事件循环有区别吗?
-
Q1.Memoization是什么?
-
Q2.Memoization的应用场景是什么?
- Q1.以下基本数据类型的加号运算的结果是什么?
1 + 2
1 + '2'
1 + false
'1' + false
1 + null
'1' + null
1 + undefined
'1' + undefined
false + null
Undefined + false
1 + Symbol()
1 + 1n
'1' + 1n
- Q2.以下涉及到引用类型的加号运算的结果是什么?
[] + []
{} + []
[] + {}
0 + {}
{} + 0
[] + 0
0 + {}
new Set() + new Set()
new Map() + new Map()
-
Q3.
0.03 % 0.01
的结果是什么?求余运算需要注意什么? -
Q4.ES7新增的幂运算操作符是什么?
-
Q5.连等赋值需要注意什么?
-
Q1.了解过标志位与掩码么?有何作用?
-
Q2.用按位非
~
判断索引存在的原理是什么?如~'123test123'.indexOf('test')
-
Q3.左移/右移操作符有哪些用?无符号左移/右移呢?
-
Q4.请用按位操作符实现经典题:不能使用额外的变量或内容空间来交换两个整数的值,如
a = 1; b = 2
-
Q1.逗号操作符的运作模式是怎么样的?
-
Q2.逗号操作符有哪些常见使用场景?批量变量赋值使用逗号操作符和不使用有何区别?
-
Q3.圆括号操作符的运作模式和应用场景是怎么样的?
-
Q1.解构和展开的运作模式是怎么样的?有了解过它babel后的结果吗?
-
Q2.为什么展开运算符能解构字符串?如
[...'test']
-
Q3.请用解构赋值实现经典题:不能使用额外的变量或内容空间来交换两个整数的值,如
a = 1; b = 2
-
Q1.经典题:自己撸一个函数来实现new运算符
-
Q2.in操作符的运作模式
-
Q1.typeof的检测原理
-
Q2.instanceof的检测原理
-
Q3.写一个数据类型检测方法
-
Q1.super关键字是用来干嘛的?
-
Q2.super的prop属性有什么意义?
反馈和转载请联系作者:[email protected]