js练习题第13天 答案及解析

本篇文章是js基础练习题第十三天的答案及解析部分,纯题目部分请移步js基础练习题 第13天

正文

1.js有几种基本数据类型?

答案:在js中一共有7种基本数据类型,分别是number, string, boolean, null, undefined, symbol, bigint

关于symbol的介绍,可以参照MDN symbol,关于bigint的介绍,可以参看MDN bigint


2.js有几种引用数据类型?

答案:在js中一共有3种引用数据类型,分别是objectarrayfunction


3.简述基本数据类型与引用数据类型的区别。

从数据存储上来说,基本数据类型的名(key)和值(value)都存储在栈内存中;而引用数据类型的名存在栈内存中,值存在于堆内存中,栈内存会提供一个引用的地址(指针)指向堆内存中的值。


4.深拷贝与浅拷贝有何区别?如何利用js实现一个简单的深拷贝,试给出你的代码。

浅拷贝是对栈内存中的值(即指针)的拷贝,拷贝前后对象指向的是堆内存中的同一个值;深拷贝是指在堆内存中开辟一个新的内存专门来存放拷贝值,此时拷贝后的值与原值就是相互独立、互不影响的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 可以使用递归去复制所有层级属性
function deepClone(obj) {
let objClone = Array.isArray(obj) ? [] : {};
if(obj && typeof obj === “object”) {
for(var key in obj) {
if(obj.hasOwnProperty(key)) {
//判断ojb子元素是否为对象,如果是,递归复制
if(obj[key] && typeof obj[key] === “object”) {
objClone[key] = deepClone(obj[key]);
} else {
//如果不是,简单复制
objClone[key] = obj[key];
}
}
}
} else {
return obj;
}
return objClone;
}

使用复制代码时,请将代码中的中文双引号替换为英文引号。


5.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var a = 10;
var b = 20;
var obj = {
a: 30,
b: this.a + 40,
foo: function () {
return this.a;
},
bar: () => this.a ,
baz: function() {
function abc() {
return this.b;
}
abc();
},
}
以上代码运行后,则obj.b = __________,obj.foo()的返回值为 __________,

答案:50、30

执行了
1
var test = obj.foo;
后,test()的返回值为__________,obj.bar()的返回值为__________,obj.baz()的返回值为__________。

答案:10、10、undefined

关于js中this的讲解,可以参照这波能反杀的个人博客


6.实现一个add方法,使计算结果能够满足如下预期:
add(1, 2, 3) = 6
add(1, 2, 3)(4) = 10
add(1)(2)(3)(4)(5) = 15

答案:如下方代码段所示

1
2
3
4
5
6
7
8
9
10
const add = (…args) => { 
const _add = function() {
args.push(…arguments);
return _add;
}
_add.toString = () => {
return args.reduce( (a, b) => a + b );
}
return _add;
}


7.说说你了解的Promise

Promise是一种异步机制,主要是用来解决回调地狱的问题。Promise对象有三种状态,分别是pendingresolvedrejected;在Promise对象的构造函数中,接收resolvereject函数修改状态;Promise对象中的then方法,可以接收构造函数中处理的状态变化,并分别对应执行。then方法的执行结果也会返回一个Promise对象,因此可以进行then的链式执行,这也是解决回调地狱的主要方式。

说明

  1. 题目中出现的JS指的是采用ECMAScript 2015及之后标准的JavaScript
  1. 答案中,若有错误和需完善的地方,可在下方留言反馈哈~~

  2. 查看纯习题版,请点击js基础练习题 第13天

--本文结束 感谢阅读--
创作十分不易,原创更应鼓励