2.js部分 常被忽视的语法 单线程执行

本文介绍了JavaScript的异步编程方法,包括回调、发布订阅、Promise、generator和async/await。同时讲解了逻辑运算、字符串引用、数组和字符串函数、JSON操作以及模块导出。此外,还探讨了for-in、for-of和forEach的区别,正则表达式,以及setTimeout延时0毫秒在异步执行中的作用。强调JavaScript是单线程执行的特性,以及如何利用它实现异步操作。
摘要由CSDN通过智能技术生成

玩转javascript异步编程

转载链接:https://mp.weixin.qq.com/s?__biz=MzI1ODI5NjE1NQ==&mid=2247485489&idx=1&sn=06878d23c05a1042ba51590414ae12ff&chksm=ea0b1805dd7c911327f08f659c87b23d02600d55a686b22e69c27afe8d42ca506786e7abcac0&scene=0&xtrack=1#rd

  • 异步的几种常用方法
    • 回调函数
    • 订阅和发布模式
    • Promise
    • generator
    • async/await

逻辑计算

  • 运算
    &&
    ||

  • 位运算
    &
    |

被忽视的某些函数:

变量在字符串中的引用

① ` ${ para } ` 注意!! 是要 `` 而不是单引号

var a = 1;
console.log(`a的值是:${a}`); //a的值是:1

② " + para + "

const person = {
    fname: "san",
    lname: "zhang",
    age: 99
};
let info;
for(info in person) {
    console.log("person[" + info + "] = " + person[info]);
}
//            结果              //
person[fname] = san
person[lname] = zhang
person[age] = 99

常用数组函数

在这里插入图片描述

  • filter 过滤掉全部
  • forEach 遍历每一个,不能停
  • some 可以通过return停
  • some函数、fineIndex函数,索引直到return 可以通过return停

【splice 删除】
在这里插入图片描述
上面的函数等于下面的作用
在这里插入图片描述

字符串函数

  • eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

  • charAt() 方法:判断哪个字符在哪个位置

    • var str=“Hello world!”
      document.write(str.charAt(1))
  • indexOf 搜寻是否包含某一字符串

在这里插入图片描述

  • arr.includes(smallarr) 有则返回true
    在这里插入图片描述
    能够返回所有如何条件的item 到newList中

JSON 与 JSON字符串

  • 在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:
    JSON字符串:
    var str1 = ‘{ “name”: “cxh”, “sex”: “man” }’;
    JSON对象:
    var str2 = { “name”: “cxh”, “sex”: “man” };

  • //由JSON字符串转换为JSON对象
    var obj = eval(’(’ + str1 + ‘)’);
    或者
    var obj = str1.parseJSON();
    或者
    var obj = JSON.parse(str1);

  • //将JSON对象转化为JSON字符串。
    例如:
    var last=obj.toJSONString();
    或者
    var last=JSON.stringify(obj);

module.exports

参考:https://www.cnblogs.com/fayin/p/6831071.html
CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。

for-in、for-of、 forEach

  • for-in
    [for…in 作用在数组上【不推荐】]
    在这里插入图片描述



  • for…of
    语句创建一个循环来迭代可迭代的对象。在 ES6 中引入的 for…of 循环,以替代 for…in 和 forEach() ,并支持新的迭代协议。for…of 允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等。
    举例参考:https://www.cnblogs.com/m2maomao/p/7743143.html


  • forEach:
    在 for 循环中可以使用 continue,break 来控制循环和跳出循环,这个是 forEach 所不具备的。forEach 只支持 IE9 及以上

正则表达式

学习网站:http://www.runoob.com/regexp/regexp-syntax.html
https://www.cnblogs.com/chenmeng0818/p/6370819.html
括号参考:https://www.jb51.net/article/52594.html
*、+限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。
在这里插入图片描述

由于邮箱的基本格式为“名称@域名”,需要使用“^”匹配邮箱的开始部分,用“KaTeX parse error: Can't use function '\.' in math mode at position 75: …[a-zA-Z0-9_-]+(\̲.̲[a-zA-Z0-9_-]+)…/

setTimeout延时0毫秒的作用

JavaScript 是单线程执行的,也就是无法同时执行多段代码,当某一段代码正在执行的时候,所有后续的任务都必须等待,形成一个队列,一旦当前任务执行完毕,再从队列中取出下一个任务。这也常被称为 “阻塞式执行”。所以一次鼠标点击,或是计时器到达时间点,或是 Ajax 请求完成触发了回调函数,这些事件处理程序或回调函数都不会立即运行,而是立即排队,一旦线程有空闲就执行。

参考:https://blog.csdn.net/evkj2013/article/details/81137003
https://www.cnblogs.com/gaojian0927/p/9722847.html

1、实现javascript的异步;

正常情况下javascript都是按照顺序执行的。但是我们可能让该语句后面的语句执行完再执行本身,这时就可以用到setTimeout延时0ms来实现了。
如:
alert(1);
setTimeout(“alert(2)”, 0);
alert(3);
虽然延时了0ms,但是执行顺序为:1,3,2
这样就保证setTimeout里面的语句在某一代码段中最后执行。

2.立即插队

假如当前 JavaScript 进程正在执行一段很耗时的代码,此时发生了一次鼠标点击,那么事件处理程序就被阻塞,用户也无法立即看到反馈,事件处理程序会被放入任务队列,直到前面的代码结束以后才会开始执行。如果代码中设定了一个 setTimeout,那么浏览器便会在合适的时间,将代码插入任务队列,如果这个时间设为 0,就代表立即插入队列,但不是立即执行,仍然要等待前面代码执行完毕。所以setTimeout 并不能保证执行的时间,是否及时执行取决于 JavaScript 线程是拥挤还是空闲。

JS是单进程执行的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值