javaScript知识储备组成
- ECMAScript(核心)
- DOM(文档对象模型)
- BOM(浏览器对象模型)
定义
- 解释型脚本语言
- 弱语言类型
- 单线程
变量命名规范? 字母、下划线、数字、$符号
? 语义化、结构化
? 驼峰式
? 数字开头
? 关键字、保留字
数据类型基本数据类型
- null
- undefined
- Boolean
- Number
- String
- Symbol
- BigInt
const bigInt = 9007199254740991nBigInt(9007199254740991)// 9007199254740991n// 注意:当使用 BigInt 时,带小数的运算会被取整 。BigInt 和 Number 不是严格相等的,但是宽松相等的 。引用数据类型- Object
- Array
数组扩展内容扁平化-多维数组转换一维数组
/*** flat()* @param {number} n 维度* @return {array} 一维数组**/[1,2,[3,4]].flat(2) // [1,2,3,4][1,2,[3,4]].toString().split(';')// ['1','2','3','4']【javaScript知识储备】合并/*** concat()连接多个数组时效率低,返回新数组,不建议* map() 使用较为复杂,不建议* push.apply()使用较为复杂,不建议* for in使用较为复杂,不建议* ...扩展运算符,返回新数组,建议**/const a1 = [1,2]const a2 = [3,4]a1.concat(a2)// [1,2,3,4][...a1,...a2]// [1,2,3,4]去重/*** new Set() 利用新的数据结构元素不相同特性,建议* 对象法:判断对象中是否存在key值,不建议* 双循环对比:使用较为复杂,不建议**/[...new Set([1,1,2,3])] // [1,2,3]// 注意:new Set()返回的是伪数组,可配合...或Array.from()转换成数组排序/*** sort() 对于undefined 和 null 对象会有问题,但胜在简单易用* 冒泡排序法* 选择排序法**/[1,3,2,4].sort((a,b) => a-b)// [1,2,3,4]// 注意:a-b 升序,b-a 降序求和/*** reduce()* @param {function} funtion 累加器函数* @param {number} initialValue 初始值,可选**/[1,2,3,4].reduce((pre,cur) => { pre + cur }, 0) // 10- Function
数据类型判断方式
- typeof
/*** @param {any} object 某个实例对象* @return {string} type**/typeof(0)// 'number'typeof(null)// 'object'typeof(undefined)// 'undefined'缺点:无法判断null、object、array,返回值都是object- instanceof
/*** @param {any} object 某个实例对象* @param {prototype} constructor 某个构造函数* @return {boolean} true/false**/[] instanceof Object// true[] instanceof Array// true缺点:无法判断array,可搭配用Array.isArray()判断数组类型- Object.prototype.toString.call()
/*** @param {any} object 某个实例对象* @return {string} type**/Object.prototype.toString.call(1)// [object Number]Object.prototype.toString.apply(undefined)// [object Undefined]缺点:返回结果不能直接使用,需额外处理,搭配.slice(8,-1)即可类型转换
- 显式转换
String(112)// {string} '112'Number('112')// {number} 112- 隐式转换
+'1' === 1// true1 == true// truetrue/5// 0.2附加内容:探讨 == 与 === 两者的异同点/***相同点:两者均可达到判断数据是否相等的效果*不同点:==仅判断数据是否相等,不会判断类型,存在隐式类型转换,===则会判断数据与类型是否都相等**/'1' == 1// true'1' === 1// falseEvent LoopEvent Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理Task QueueTask Queue即事件循环中的任务队列,任务队列中包含MacroTask、MicroTask两种任务 。
MacroTaskmacro task即宏任务:setTimeOut()、setInterval()...
MicroTaskmicro task即微任务:Promise()、nextTick()...
运行机制mainProcess -> [one] macroTask -> [all] microTask -> [one] macroTask ...
简单解释:每一次事件循环中,主进程先执行一个macroTask宏任务,macroTask宏任务执行完毕后,主进程便查询并执行microTask微任务,直至队列内microTask执行完毕,之后再执行一个macroTask,以此循环 。
管中窥豹,microTask执行优先级是较高于macroTask的 。
其他小知识点
- Promise的执行顺序问题
- async/await语法糖执行问题
- setTimeOut不能精准定时执行问题
本文来自博客园,作者:吴知木,转载请注明原文链接:https://www.cnblogs.com/zh1q1/p/15222241.html
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
