03 2019 档案
摘要:首先确定已经全局安装过好几遍express和express-generator,但一使用express命令直接报找不到ejs模块,全局和本地安装ejs都没用,nodemon模块报同样错误,找不到debug模块。 原因:本地npm仓库文件冲突(估计)。 使用如下的全局安装方法,安装的模块文件是在C:\
阅读全文
摘要:1.概念 遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。 Iterator 的作用有三个: Iterator 的遍历过程: (1)创建一个指针对象,
阅读全文
摘要:1.Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是
阅读全文
摘要:1.概述 Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API。Reflect对象的设计目的有这样几个。 (1) 将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。现阶段,某些方法同时在Obje
阅读全文
摘要:Java可以使用面向切面(AOP)的方法来实现某些统一的操作,比如某个操作的前置通知,后置通知等等,这种操作非常方便,其本质便是动态代理,JS的代理Proxy代理该如何使用呢? 某位大神的实现如下: 然后开始学习Proxy 1.概述 Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,
阅读全文
摘要:1.set 基本等于Java的Set集合类型,无序不可重复集,常被用来去重。 基本用法 Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。 上面代码中,例一和例二都是Set函数接受数组作为参数,例三是接受类似数组的对象作为参数。 上面代码也展示了一种去
阅读全文
摘要:1.概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入S
阅读全文
摘要:1.Object.is() ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符( )。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。JavaScript 缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。 ES6 提出“Sa
阅读全文
摘要:1.扩展运算符 1.1含义 扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。 相当于对数组进行了遍历。该运算符主要用于函数调用。 上面代码中,array.push(...items)和add(...numbers)这两行,都是函数的调
阅读全文
摘要:1.开源项目 [译]过去一年25个惊人的开源Node.js项目(2018版) 百度网盘下载助手
阅读全文
摘要:1.函数参数的默认值 1.1基本用法 ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法。 上面代码检查函数log的参数y有没有赋值,如果没有,则指定默认值为World。这种写法的缺点在于,如果参数y赋值了,但是对应的布尔值为false,则该赋值不起作用。就像上面代码的最后一行,参数y
阅读全文
摘要:1.二进制和八进制表示法 ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。 从 ES5 开始,在严格模式之中,八进制就不再允许使用前缀0表示,ES6 进一步明确,要使用前缀0o表示。 如果要将0b和0o前缀的字符串数值转为十进制,要使用Number方法。 2
阅读全文
摘要:ES6 加强了对 Unicode 的支持,并且扩展了字符串对象。 1.字符的Unicode表示法 JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点。 从来不知道好可以这么做。 但是,这种表示法只限于码点在\u0000~\uFFFF之间的字符。超
阅读全文
摘要:1.数组的解构赋值 1.1基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 以前,为变量赋值,只能直接指定值。 ES6 允许写成下面这样。 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值。的确高大上了许多有木有。 本质
阅读全文
摘要:1.一些历史 ES6(ECMAScript 6.0)是 JavaScript 语言的新一代标准,于2015 年 6 月正式发布,距今已经4年了,它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 而我们现在所广泛使用的ES5版的JavaScript其实是
阅读全文
摘要:1.以复制方式实现的继承 1.1浅拷贝 基本类型的复制 以上代码中,通过一个extend()函数,将父对象parent的属性遍历赋给子对象child,从而实现继承。 但是这种字面量复制的方式存在巨大的缺陷,当父对象有引用类型的属性时,通过这么复制的方式,就像上一节中的var b = a一样,只会将a
阅读全文
摘要:1.对象创建的3中方法 1.1.对象字面量 使用get/set的好处就是可以对值进行逻辑判断,这种方法定义的对象并不能实现Java中的private私有化效果。 在对多层嵌套对象的属性级联访问时,要对中间属性判空,除了多个if 判断之外,还可以这么写: 注意:没有这个属性的时候会返回undefine
阅读全文
摘要:1.什么是闭包? 维基百科解释为: 在计算机科学中,闭包(Closure)是词法闭包(Lexcial Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造他的环境也不例外。所以,另有一种说法认为闭包是自由函数和与其相关的引用环境组合而成的实体。
阅读全文
摘要:有如下代码: 这段代码4个alert(),根据前面的预处理知识,首先a是undefined,d是f的局部变量,c不会被预处理,所以报错,那b呢?结果是b也弹出undefined,说明在预处理的时候,if else判断语句被忽略了。 首先知道,作用域有4类,分别是: 块作用域; 函数作用域; 动态作用
阅读全文
摘要:声明:之所以分为全局预处理与函数预处理,只是为了理解方便,其实在实际运行中二者是不分先后的。 函数预处理阶段与全局预处理的差别: 函数每调用一次,就会产生一个LexicalEnviroment对象,在全局预处理中该对象就是window对象,但在函数预处理中该对象是不可见,无法访问的,因为他是JS解析
阅读全文
摘要:有如下代码: 不论var f 与function f 的先后顺序如何,该代码执行的结果总是弹出function f 的字符串,为什么呢?像这种函数与变量命名冲突时JS的处理原则又是什么? 在扫描函数声明与变量声明的时候,是先扫描函数声明(function fn()),后扫描变量声明(var a)的;
阅读全文
摘要:问题:有如下代码 这段代码的执行结果为undefined,为什么呢? JS的解析与执行并不是读一行,处理一行,读一行,处理一行这样进行的,而是分为两个阶段: 1、预处理阶段; 2、执行阶段; 然后分别以全局和函数内部的局部代码而言: 1、全局预处理 在解析JS代码的时候,首先会创建一个全局Lexic
阅读全文