【无标题】

本文探讨了JavaScript中的instanceof关键字、数据类型检测(typeof与instanceof的区别),以及同步与异步编程、事件循环机制、数组扁平化、内存中数据存储和深浅拷贝的概念,以Student类为例讲解了原型链和对象复制。
摘要由CSDN通过智能技术生成

instanceof

判断数据类型的关键字,针对于引用类型
对象 instance 类型:返回布尔值

typeof和instanceof异同
1、都是用来判断数据类型的关键字
2、typeof用来判断内置基本类型,number,string,boolean,如果判断引用类型,则全部返回object
3、

同步异步****

前提:所有的代码在执行时,都要消耗执行时间,只有异步代码消耗等待时间
同步:同步代码执行时,必须按照顺序一步接一步
异步:当遇到需要消耗等待时间代码时,先继续执行后续代码

异步代码的分类:和消耗等待时间有关
注意事项:同步代码执行优先于异步代码,且只有同步代码遵循自上而下的规则
1、定时器的回调函数
2、回调函数
3、发请求和接响应

事件轮循机制

事件轮循机制 js的编译原理
1、所有的代码都要经过主线程的编译
2、同步代码开始存储在执行栈(主线程)中
3、异步代码存储在任务队列中
4、主线程优先执行同步代码,当某个异步代码结束等待状态,则进入准备执行状态,会通知主线程。当主线程的其他任务执行完毕后,会执行该异步任务
5、重复2-4步骤
6、异步代码的宏任务,微任务优先级高于宏任务

同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务; //执行栈
异步任务指的是,不先进入主线程、而进入"任务队列"(task queue)的任务,只有等主线程任务执行完毕, //任务队列
"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行。
异步任务又分为宏任务(macro-task)与微任务(micro-task)。
宏任务大概包括:script(整块代码)、setTimeout、setInterval、I/O、UI交互事件、setImmediate(node环境)
微任务大概包括:new promise().then(回调)、MutationObserver(html5新特性)、Object.observe(已废弃)、process.nextTick(node环境)

数组的扁平化

将一个多维数组,如果需要将它扁平化。这可以通过使用
1、Array.prototype.flat()函数
2、通过使用扩展运算符(spread operator)…来完成。

数据在内存中的存储方式

// 内置类型和引用类型在内存中存储的方式:
// 内置类型:只有一块栈空间,存储的就是数据本身
// let a = 123;
// 引用类型:有两块空间,一块栈,一块堆。
// let arr = new Array(1,2,3);
// 栈存储的是堆空间的地址,堆存储的是真正的数值。
//:引用类型作为实参,可以改变的是该地址所指向空间的内容
// 面试题?值传递和引用传递的区别?

深浅拷贝

// 拷贝:用已有对象初始化一个新的对象
// let a = 123;
// let b = a;

// 深浅拷贝:深浅拷贝只针对于引用类型
// 浅拷贝:只拷贝地址,但是并不开辟空间,多个对象共享同一个堆区
// let arr1 = [1,2,3];
// let arr2 = arr1;

// arr1[0] = 666;

// console.log(arr1,arr2);

// 深拷贝:开辟空间且赋值(每一个对象都必须得new一次)
// let arr1 = [1,2,3];
// let arr2 = [];

// for(let i=0;i<arr1.length;i++){
//     arr2.push(arr1[i]);
// }

// arr2[2] = 999;

// let arr1 = [1,2,3];
// let arr2 = [...arr1];

// arr2[2] = 999;

// console.log(arr1);
// console.log(arr2);

//--------------------------
function Student(name,id){
    this.name = name;
    this.id = id;
}

Student.prototype.copy = function(){
    let s = new Student(this.name,this.id);
    return s;
}

let s1 = new Student("坤坤",9527);
let s2 = s1.copy();//返回一个开辟了堆空间且初始化数值为s1的对象

s2.name = "凢凢";

console.log(s1,s2);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值