数组方法不完全指北
数组中有很多方法,在日常开发中合理选择方法可以简化我们的代码。当然合理选择的前提就是你对数组上方法了然于胸,说到数组脑海中自然而然的就浮现出push、shift、filter、foreach、map等等方法,并且对他们的参数、返回值以及使用场景十分清晰。这篇文章就重点总结数组上的方法,做一个全面的总结。我在这里将他们分成两个大区域:ES6之前和ES6之后
ES6之前toString12345let arr = [1,2,3,4,5]console.log(arr.toString()) // 1,2,3,4,5 转换成string类型 说白了就是去除两边的[]let arr1 = [1,[2,3,[4,5,[6,7,[8,[9]]]]]]console.log(arr1.toString()) //1,2,3,4,5,6,7,8,9
toString方法可以将我们的数组转换成字符串
toString方法可以将我们的多维数组扁平化后转换成字符串
join123456let arr = [1,2,3,4,5]console.log(arr.join('-')) ...
什么是构建工具
什么是构建工具 首先我们需要清楚,在企业级开发的项目中,会用到很多的技术,来优化我们的开发体验和提升我们的开发效率,然后这些技术浏览器并不认识,浏览器自始至终他就只认识==HTML== ==Css== ==JavaScript== 即便时代发展,各种前端技术层出不穷,你都需要将他们转换成浏览器认识的格式,如果你开发出来的东西,浏览器并不认识,那么你做的产品的价值在哪里?简单来说,实际开发中我们可能会需要:
TypeScript,遇到ts文件,我们需要将ts文件转换成js文件
Vue/React,遇到vue/jsx文件,我们需要用vue compiler/react compiler,将我们的vue文件转换成render函数
less/sass,我们还需要less-loader,sass-loader等编译我们的css文件
babel,我们还需要使用babel将我们写的较新的js代码转换成浏览器认识的js代码,兼容更多的浏览器
等等
当我们稍微改动一点点东西,那么我们就需要对vue文件进行编译,sass语法的css进行编译,然后再用babel对js进行编译等等,而且这套流程是 ...
Vue3响应式原理(理论篇)
首先我们需要明确,什么是响应式?`Vue`官方文档响应式的解释是:响应性是一种允许我们以声明式的方式去适应变化的编程范例,乍一看还挺难以理解,用通俗点的大白话来说:响应式就是在数据发生变化的时候执行某个或者某些回调,使页面发生更新,也就是数据驱动页面的更新。
proxy在学习响应式原理之前,我们先铺垫一点proxy的知识,vue3通过proxy实现响应式原理,那么我们肯定需要清楚proxy的用法。
123456789101112131415161718let reactive = (target) => { return new Proxy(target, { get(target, key) { console.log(target, key); }, set(target, key, value) { console.log(target, key, value, '被拦截了'); } })}let obj = { ...
undefined的细节
undefined的几个特性
undefined 是window下的一个属性,即使一个原始数据类型,也是一个原始值数据
不可写
1234console.log(window.undefined) //undefinedwindow.undefined = 'coderwei'console.log(window.undefined) // undefined
不可配置
12delete window.undefined console.log(window.undefined) //undefined
不可枚举
123456for (const item in window) { if (item === undefined) { console.log(item); //不会输出 }}//补充 既然不可枚举 那我们使用Object.defineProperty定义window下面的undefined 使其变成可枚举的属性,可以嘛? 实际上浏览器会给我抛出异常,告诉我们undefined是不可重新定义
使 ...
博客常用语法
文本样式文本内容
文本内容
文本内容
文本内容
文本内容
文本内容
彩色文本
彩色文字在一段话中方便插入各种颜色的标签,包括:红色、黄色、绿色、青色、蓝色、灰色。
超大号文字文档「开始」页面中的标题部分就是超大号文字。Volantis
A Wonderful Theme for Hexo
行内文本样式 text
带 下划线 的文本
带 着重号 的文本
带 波浪线 的文本
带 删除线 的文本
键盘样式的文本 command + D
密码样式的文本:这里没有验证码
专栏博客链接样式
纯文本测试
支持简单的 markdown 语法
支持自定义颜色
绿色
黄色
青色
蓝色
call、apply、bind
手写call、apply、bind方法call方法call、apply和bind方法我们都知道是用来绑定this的,那么它内部做了什么事情呢?其实也不复杂,对于call来说总结下来也就五步
在封装的call函数内部需要拿到需要绑定的函数
然后将传进来的第一个参数,也就是this转换为对象,顺手判断一下是否为undefined或者是null。因为原生call方法传入这两个参数绑定的是window
然后将这个对象加入一个属性,value就是拿到的函数
利用隐式绑定调用一下这个函数,调用完就可以删除掉这个函数了
最后将结果返回出去即可
12345678910111213141516// 1. call的实现:function foo(a, b, c) { console.log(this.name); console.log(a + b + c);}//利用ES6提供的剩余参数Function.prototype.weiCall = function (thisArg, ...arg) {//edge case,判断传入的参数是否合法 thisArg ...
this指向
JS中的this指向总结为什么会出现this首先在学习this到底指向谁之前,先要知道为什么要有this?实际上从某些角度来说,即便没有this也无伤大雅,我们先看个例子。
12345678910111213141516const obj = { name: "coderwei", running() { console.log(obj.name + "在跑步"); }, sleep() { console.log(obj.name + "在睡觉"); }, study() { console.log(obj.name + "在学习"); },};obj.running(); //coderwei在跑步obj.sleep(); //coderwei在睡觉obj.study(); //coderwei在学习
在这个例子中,我们会发现,即便不用this,也不影响我们代码的正常执行,但是如果有一天obj ...
ES Module
ES Module的导入和导出模块化的开发方式可以提高代码复用率,方便进行代码的管理。通常一个文件就是一个模块,有自己的作用域,只向外暴露特定的变量和函数。在早期的js没有模块化的概念。但是随着发展又需要模块化,于是出现了集中规范,早期比较出名的就有AMD、CMD,他们都只是一种规范,没有具体的实践,而AMD具体的实践者就有requirejs、curl,CMD则有seajs,不过随着历史的发展,这两种规范都慢慢的推出了历史的舞台,现在流行的commonjs 和ES6 Module,而node就是commonjs最佳的实践者,而ES Module则是官方规范的模块化,自然而然就是现在最主流的模块化方案,ES Module的工作原理有一篇文章讲的非常好,如果对英文没有压力的话,我觉得非常有必要阅读一篇。
export导出
第一种方法:
12export const name = "coderwei";export const age = 19;
第二种方式:
123456const name = "coderwei";const age = 19 ...
事件循环
事件循环(EventLoop)进程和线程在了解什么是js的事件循环之前,必须要弄清楚什么叫线程,什么又叫进程?当我们的电脑刚组装好,是没有办法使用的,这个时候我们就需要安装操作系统,操作系统就像是我们和硬件之间的桥梁。
进程:进程是指计算机中已运行的程序,是分时系统的基本运作单位。这时维基百科对进程的解释,还是那句话,维基百科喜欢用概念解释概念,太抽象了。举个通俗的例子,我们的电脑每打开一个软件,就会开辟一个进程,用于服务这个软件
线程:线程是指操作系统能够进行运算调度最小的单位,大部分情况下他被包含在进程中。也就是说一个进程可以拥有多个线程。
事件队列我们都知道JavaScript是单线程语言,那么他遇到耗时的代码会如何处理呢?比如说有一个十秒的定时器,难不成站在那里等待?这明显不现实,所以这个时候就需要一个地方用于存放一些耗时的任务,我先继续往下面执行,等你该运行了我就回过头来执行其中的代码,那么问题又来了,这个队列由谁来维护?自然不可能是JavaScript,别忘记JavaScript是单线程的,如果是JavaScript来维护,那么其他代码怎么处理。这个维护队列的兄弟就是我 ...









