摘要: null: Null类型,代表“空值”,代表一个空对象指针,使用typeof运算得到 “object”,所以你可以认为它是一个特殊的对象值。 undefined: Undefined类型,当一个声明了一个变量未初始化时,得到的就是undefined。 null是javascript的关键字,可以认为 阅读全文
posted @ 2019-10-16 16:36 大橙橙 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 异步编程当然少不了定时器了,常见的定时器函数有setTimeout、setInterval、requestAnimationFrame。我们先来讲讲最常用的setTimeout,很多人认为setTimeout是延时多久,那就应该是多久后执行。 其实这个观点是错误的,因为 JS 是单线程执行的,如果前 阅读全文
posted @ 2019-10-16 10:16 大橙橙 阅读(896) 评论(0) 推荐(0) 编辑
摘要: 一个函数如果加上async,那么该函数就会返回一个Promise async就是将函数返回值使用Promise.resolve()包裹了下,和then中处理返回值一样,并且await只能配套async使用 async和await可以说是异步终极解决方案了,相比直接使用Promise来说,优势在于处理 阅读全文
posted @ 2019-10-16 10:15 大橙橙 阅读(5988) 评论(0) 推荐(0) 编辑
摘要: Promise翻译过来就是承诺的意思,这个承诺会在未来有一个确切的答复,并且该承诺有三种状态,分别是: 这个承诺一旦从等待状态变成为其他状态就永远不能更改状态了,也就是说一旦状态变为 resolved 后,就不能再次改变 当我们在构造Promise的时候,构造函数内部的代码是立即执行的 Promis 阅读全文
posted @ 2019-10-16 10:14 大橙橙 阅读(3874) 评论(0) 推荐(0) 编辑
摘要: Generator算是 ES6 中难理解的概念之一了,Generator最大的特点就是可以控制函数的执行。在这一小节中我们不会去讲什么是Generator,而是把重点放在Generator的一些容易困惑的地方。 你也许会疑惑为什么会产生与你预想不同的值,接下来就让我为你逐行代码分析原因 首先Gene 阅读全文
posted @ 2019-10-16 10:09 大橙橙 阅读(696) 评论(0) 推荐(0) 编辑
摘要: 回调函数应该是大家经常使用到的,以下代码就是一个回调函数的例子: 但是回调函数有一个致命的弱点,就是容易写出回调地狱(Callback hell)。假设多个请求存在依赖性,你可能就会写出如下代码: 以上代码看起来不利于阅读和维护,当然,你可能会想说解决这个问题还不简单,把函数分开来写不就得了 以上的 阅读全文
posted @ 2019-10-16 10:06 大橙橙 阅读(2312) 评论(0) 推荐(0) 编辑
摘要: 当我们创建一个对象时let obj = { age: 25 },我们可以发现能使用很多种函数,但是我们明明没有定义过它们,对于这种情况你是否有过疑惑? 当我们在浏览器中打印obj时你会发现,在obj上居然还有一个__proto__属性,那么看来之前的疑问就和这个属性有关系了。 其实每个 JS 对象都 阅读全文
posted @ 2019-10-16 09:59 大橙橙 阅读(789) 评论(0) 推荐(0) 编辑
摘要: 在上面,我们了解了对象类型在赋值的过程中其实是复制了地址,从而会导致改变了一方其他也都被改变的情况。通常在开发中我们不希望出现这样的问题,我们可以使用浅拷贝来解决这个情况。 浅拷贝 首先可以通过Object.assign来解决这个问题,很多人认为这个函数是用来深拷贝的。其实并不是,Object.as 阅读全文
posted @ 2019-10-16 09:53 大橙橙 阅读(1920) 评论(0) 推荐(0) 编辑
摘要: 闭包的定义其实很简单:函数 A 内部有一个函数 B,函数 B 可以访问到函数 A 中的变量,那么函数 B 就是闭包。 很多人对于闭包的解释可能是函数嵌套了函数,然后返回一个函数。其实这个解释是不完整的,就比如我上面这个例子就可以反驳这个观点。 在 JS 中,闭包存在的意义就是让我们可以间接访问函数内 阅读全文
posted @ 2019-10-16 09:52 大橙橙 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 对于==来说,如果对比双方的类型不一样的话,就会进行类型转换,这也就用到了第四题:类型转换的问题。 假如我们需要对比x和y是否相同,就会进行如下判断流程: 首先会判断两者类型是否相同。相同的话就是比大小了 类型不相同的话,那么就会进行类型转换 会先判断是否在对比null和undefined,是的话就 阅读全文
posted @ 2019-10-16 09:51 大橙橙 阅读(399) 评论(0) 推荐(0) 编辑
摘要: this是很多人会混淆的概念,但是其实它一点都不难,只是网上很多文章把简单的东西说复杂了。在这一小节中,你一定会彻底明白this这个概念的。 我们先来看几个函数调用的场景 接下来我们一个个分析上面几个场景 对于直接调用foo来说,不管foo函数被放在了什么地方,this一定是window 对于obj 阅读全文
posted @ 2019-10-16 09:51 大橙橙 阅读(913) 评论(0) 推荐(0) 编辑
摘要: 首先我们要知道,在 JS 中类型转换只有三种情况,分别是: 转换为布尔值 转换为数字 转换为字符串 我们先来看一个类型转换表格,然后再进入正题 转Boolean 在条件判断时,除了undefined,null,false,NaN,'',0,-0,其他所有值都转为true,包括所有对象。 对象转原始类 阅读全文
posted @ 2019-10-16 09:50 大橙橙 阅读(127) 评论(0) 推荐(0) 编辑
摘要: typeof对于原始类型来说,除了null都可以显示正确的类型 typeof对于对象来说,除了函数都会显示object,所以说typeof并不能准确判断变量到底是什么类型 如果我们想判断一个对象的正确类型,这时候可以考虑使用instanceof,因为内部机制是通过原型链来判断的。 对于原始类型来说, 阅读全文
posted @ 2019-10-16 09:50 大橙橙 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 在 JS 中,除了原始类型那么其他的都是对象类型了。对象类型和原始类型不同的是,原始类型存储的是值,对象类型存储的是地址(指针)。当你创建了一个对象类型的时候,计算机会在内存中帮我们开辟一个空间来存放值,但是我们需要找到这个空间,这个空间会拥有一个地址(指针)。 对于常量a来说,假设内存地址(指针) 阅读全文
posted @ 2019-10-16 09:49 大橙橙 阅读(763) 评论(0) 推荐(0) 编辑
摘要: 在 JS 中,存在着 6 种原始值,分别是: boolean null undefined number string symbol 首先原始类型存储的都是值,是没有函数可以调用的,比如undefined.toString() 此时你肯定会有疑问,这不对呀,明明'1'.toString()是可以使用 阅读全文
posted @ 2019-10-16 09:48 大橙橙 阅读(698) 评论(0) 推荐(0) 编辑