主题: JavaScript 难度: ⭐⭐⭐ ES6 的展开语法在以函数形式进行编码时非常有用,因为咱们可以轻松地创建数组或对象的副本,而无需求助于Object.create,slice或库函数。...就像展开语法的逆过程一样,它将数据放入并填充到数组中而不是展开数组,并且它在函数变量以及数组和对象解构分中也经常用到。 ? 问题 6: ES6 类和 ES5 函数构造函数有什么区别?...const 声明一个只读的变量,一旦声明,常量的值就不可改变: ? Object.freeze适用于值,更具体地说,适用于对象值,它使对象不可变,即不能更改其属性。 ?...不幸的是,这种方法有一个问题。给定表达式的求值总是undefined的,所以如果IIFE 函数有返回值,则不能使用它,如下所示: ? 问题 17: 能否比较模块模式与构造函数/原型模式的用法?...构造函数和原型是实现类和实例的合理方法之一。它们与模型并不完全对应,因此通常需要选择一个特定的scheme或辅助方法来实现原型中的类。 问题 18: ES6 Map 和 WeakMap 有什么区别?
手动实现Array.prototype.reduce方法 reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。...它是一个类似数组的对象,因为它有一个length属性,我们可以使用数组索引表示法arguments[1]来访问单个值,但它没有数组中的内置方法,如:forEach、reduce、filter和map。...因此,JS引擎在这个函数外创建了一个全局变量b,之后表达式b = 0的返回值为0,并赋给新的局部变量a。 我们可以通过在赋值之前先声明变量来解决这个问题。...对象析构是从对象或数组中获取或提取值的一种新的、更简洁的方法。...CommonJS-Node.js AMD(异步模块定义)-浏览器 基本上,使用模块的方式很简单,import用于从另一个文件中获取功能或几个功能或值,同时export用于从文件中公开功能或几个功能或值
14. == 和 === 有什么区别? 15. 为什么在 JS 中比较两个相似的对象时返回 false? 16. !! 运算符能做什么? 17. 如何在一行中计算多个表达式的值? 18....undefined是未指定特定值的变量的默认值,或者没有显式返回值的函数,如:console.log(1),还包括对象中不存在的属性,这些 JS 引擎都会为其分配 undefined 值。...具体更多规则可以对参考我之前的文章: 我对 JS 中相等和全等操作符转化过程一直很迷惑,直到有了这份算法 15. 为什么在 JS 中比较两个相似的对象时返回 false?...如何判断值是否为数组? 我们可以使用Array.isArray方法来检查值是否为数组。当传递给它的参数是数组时,它返回true,否则返回false。...为什么typeof null 返回 object?如何检查一个值是否为 null? typeof null == 'object'总是返回true,因为这是自 JS 诞生以来null的实现。
主题: JavaScript难度: ⭐⭐⭐ ES6 的展开语法在以函数形式进行编码时非常有用,因为咱们可以轻松地创建数组或对象的副本,而无需求助于Object.create,slice或库函数。..."};person = animal; // ERROR "person" is read-only Object.freeze适用于值,更具体地说,适用于对象值,它使对象不可变,即不能更改其属性。...,而不是创建未初始化的对象,它会返回使用从原型或样本对象复制的值进行初始化的对象。...给定表达式的求值总是undefined的,所以如果IIFE 函数有返回值,则不能使用它,如下所示: const foo = voidfunction bar() { console.log('前端小智...构造函数和原型是实现类和实例的合理方法之一。它们与模型并不完全对应,因此通常需要选择一个特定的scheme或辅助方法来实现原型中的类。 问题 18: ES6 Map 和 WeakMap 有什么区别?
主题: JavaScript 难度: ⭐⭐⭐ ES6 的展开语法在以函数形式进行编码时非常有用,因为咱们可以轻松地创建数组或对象的副本,而无需求助于Object.create,slice或库函数。..."snake" }; person = animal; // ERROR "person" is read-only Object.freeze适用于值,更具体地说,适用于对象值,它使对象不可变...,而不是创建未初始化的对象,它会返回使用从原型或样本对象复制的值进行初始化的对象。...给定表达式的求值总是undefined的,所以如果IIFE 函数有返回值,则不能使用它,如下所示: const foo = void function bar() { console.log('...构造函数和原型是实现类和实例的合理方法之一。它们与模型并不完全对应,因此通常需要选择一个特定的scheme或辅助方法来实现原型中的类。 问题 18: ES6 Map 和 WeakMap 有什么区别?
箭头函数的结构 箭头函数的箭头=>之前是一个空括号、单个的参数名、或用括号括起的多个参数名,而箭头之后可以是一个表达式(作为函数的返回值),或者是用花括号括起的函数体(需要自行通过return来返回值,...解构赋值语法是JavaScript的一种表达式,可以方便的从数组或者对象中快速提取值赋给定义的变量。 获取数组中的值 从数组中获取值并赋值到变量中,变量的顺序与数组中对象顺序对应。...将指定位置上的数组元素与给定的值相加,并返回相加前该元素的值。 将指定位置上的数组元素与给定的值相与,并返回与操作前该元素的值。...返回数组中指定元素的值。 将指定位置上的数组元素与给定的值相或,并返回或操作前该元素的值。 将数组中指定的元素设置为给定的值,并返回该值。...(); 可选链中的 ? 表示如果问号左边表达式有值, 就会继续查询问号后面的字段。根据上面可以看出,用可选链可以大量简化类似繁琐的前置校验操作,而且更安全。
每个ECMAScript版本都采用不同的方式枚举对象。让我们检查一下。 该Object.keys()方法返回给定对象自己的可枚举属性名称的数组,并以与普通循环相同的顺序进行迭代。...6、如何将项目插入到特定索引(JavaScript)的数组中?...1)、includes() 该includes()方法确定一个数组是否在其条目中包括某个值,是返回值true还是false适当的值。...; console.log(reverse(data)); 27、如何在JavaScript中将字符串转换为对象数组? 当我们从无法控制的第三方API中获取一些数据时,就会出现这种情况。...当我们有一个包含一些数字的对象数组时,我们想在下面求和是带有reduce的解决方案。
我们可以使用数组解构来获取其中每一个值。...由于我们使用的是async/await,函数把返回值放在一个数组中。而我们使用数组解构后就可以把返回值直接赋给相应的变量。...数组也可以对象解构,可以方便的获取数组的第n个值 const csvFileLine = '1997,John Doe,US,john@doe.com,New York'; const { 2: country...但是当有很多表单,则需要应用验证,此时会有不同的字段和规则。如果可以构建一个在运行时配置的通用验证函数,会是一个好选择。...Javascript》 不得不知的ES6小技巧 js运算符的一些特殊应用 JS高级技巧(简洁版) 小议 js 下字符串比较大小 推介阅读:ES6演示小网站 完
我们可以使用数组解构来获取其中每一个值。...由于我们使用的是async/await,函数把返回值放在一个数组中。而我们使用数组解构后就可以把返回值直接赋给相应的变量。...数组也可以对象解构,可以方便的获取数组的第n个值 const csvFileLine = '1997,John Doe,US,john@doe.com,New York'; const { 2: country...但是当有很多表单,则需要应用验证,此时会有不同的字段和规则。如果可以构建一个在运行时配置的通用验证函数,会是一个好选择。...JS高级技巧(简洁版) 6. 小议 js 下字符串比较大小 推介阅读: ES6演示小网站
undefined是未指定特定值的变量的默认值,或者没有显式返回值的函数,如:console.log(1),还包括对象中不存在的属性,这些 JS 引擎都会为其分配 undefined 值。...手动实现Array.prototype.reduce方法 reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。...它是一个类似数组的对象,因为它有一个length属性,我们可以使用数组索引表示法arguments[1]来访问单个值,但它没有数组中的内置方法,如:forEach、reduce、filter和map。...如何判断值是否为数组? 我们可以使用Array.isArray方法来检查值是否为数组。当传递给它的参数是数组时,它返回true,否则返回false。...为什么typeof null 返回 object?如何检查一个值是否为 null? typeof null == 'object'总是返回true,因为这是自 JS 诞生以来null的实现。
ES6之前常常使用Object当作键值对集合使用,但Object只能是String与Symbol作为键,而ES6中新增加的Map的键可以是任意值,包括函数、对象或任意基本类型;Map中的key是有序的。...has(key)方法:获取一个布尔值,表示Map实例是否包含键对应的值。 delete(key)方法:根据key删除集合中的对象,成功删除返回true,否则返回false。...(2)、Map对象的遍历 keys()方法:获取迭代(Iterator)对象,含每个元素的key的数组。 values()方法:获取迭代(Iterator)对象,含每个元素的value的数组。...图5-9 Map示例输出结果 注意展开运算符"…"的使用,Object.entries()的作用是获取对象自身可枚举属性的键值对数组。.../js/module8.js'; sum(100,N); //输出100+200= 300 使用*号可以将所有导入的成员绑定到一个特定的对象,使用时可以通过"对象名.成员"的方式访问,我们常常把这种导入方式称为命名空间导入
以下技巧解释了如何正确检查属性的存在。 技巧3:检查属性是否存在 JS 提供了许多方法来确定对象是否具有特定属性: obj.prop!...in操作符的存在表明一个明确的意图,即检查对象是否具有特定的属性,而不访问实际的属性值。...ES6 Object.assign(target,source1,source2,...)将所有可枚举的自有属性的值从一个或多个源对象复制到目标对象中,该函数返回目标对象。...当然,永远不要在return和返回的表达式之间放置换行符。 2.5 void 操作符 void 计算表达式无论计算结果如何都返回undefined 。...,为了避免获取undefined,请确保使用有效的数组索引并避免创建稀疏数组。
大家好,又见面了,我是你们的朋友全栈君。 说到集合,第一个想到的就是中学学到的那个数学概念:集合。在我们开始集合相关的js实现前,我们有必要来了解一下什么是集合以及集合的数学概念。 ...在数学中,集合是指具有某种特定性质的具体的或抽象的对象汇总成的集体,这些对象称为该集合的元素。 比如,一个包括0到9十个数字的集合表示为:N = {0,1,2,3,4,5,6,7,8,9}。...5、size():返回集合所包含元素的数量。 6、values():返回一个包含集合中所有值的数组。...它会返回一个数组,其中包含对象的所有元素,这样我们就可以获取其元素的个数了。...this.size = function () { return Object.keys(items).length; } //上面我们用ES6新方法来获取items的长度
说到集合,第一个想到的就是中学学到的那个数学概念:集合。在我们开始集合相关的js实现前,我们有必要来了解一下什么是集合以及集合的数学概念。 好吧,我们一起来复习一下早就被我们遗忘的集合。 ...集合是由一组无序且唯一的项组成的。集合这个数据结构使用了与有限集合相同的数学概念。在数学中,集合是指具有某种特定性质的具体的或抽象的对象汇总成的集体,这些对象称为该集合的元素。 ...5、size():返回集合所包含元素的数量。 6、values():返回一个包含集合中所有值的数组。...它会返回一个数组,其中包含对象的所有元素,这样我们就可以获取其元素的个数了。...this.size = function () { return Object.keys(items).length; } //上面我们用ES6新方法来获取items的长度
null 表示空,但是当我们使用 typeof 来进行数据类型检测的时候,得到的值是 object。 具体原因可以参阅前面第 68 题。 135....当拷贝的 object 只有一层的时候,是深拷贝,但是当拷贝的对象属性值又是一个引用时,换句话说有多层时,就是一个浅拷贝。 ES6 扩展运算符,当 object 只有一层的时候,也是深拷贝。...Promise 对象 3、如果全部成功,状态变为 resolved,返回值将组成一个数组传给回调 4、只要有一个失败,状态就变为 rejected,返回值将直接传递给回调 all() 的返回值也是新的...如何将伪数组转换为标准数组 参考答案: 在 JavaScript 中,arguments 就是一个伪数组对象。关于 arguments 具体可以参阅后面 250 题。...可以使用 ES6 的扩展运算符来将伪数组转换为标准数组 例如: var arr = [...arguments]; 179. array 和 object 的区别 参考答案: 数组表示有序数据的集合,
ES6新增的扩展运算符(...)(重要),可以轻松的实现数组和松散序列的相互转化,可以取代arguments对象和apply方法,轻松获取未知参数个数情况下的参数集合。...(尤其是在ES5中,arguments并不是一个真正的数组,而是一个类数组的对象,但是扩展运算符的逆运算却可以返回一个真正的数组)。...ES6在Object原型上新增了getPrototypeOf()和setPrototypeOf()方法,用来获取或设置当前对象的prototype对象。...ES6在Object原型上还新增了Object.keys(),Object.values(),Object.entries()方法,用来获取对象的所有键、所有值和所有键值对数组。...十五、问:Promise是什么,有什么作用? 答:Promise是ES6引入的一个新的对象,他的主要作用是用来解决JS异步机制里,回调机制产生的“回调地狱”。
实现类的继承类的继承在几年前是重点内容,有n种继承方式各有优劣,es6普及后越来越不重要,那么多种写法有点『回字有四样写法』的意思,如果还想深入理解的去看红宝书即可,我们目前只实现一种最理想的继承方式。...('cxk', 'father');child.say() // father好,我是练习时长两年半的cxk实现一个迭代器生成函数ES6对迭代器的实现JS原生的集合类型数据结构,只有Array(数组)和...该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰通俗的解释:假如我们有一块内存,专门用来缓存我们最近发访问的网页...// 删除元素 data.set(key, value); // 重新插入元素 return value // 返回获取的值 }}var lruCache = new LRUCache(5...那我们只需要处理普通函数的情况,箭头函数直接返回它本身就好了。那么如何来区分两者呢?答案是: 利用原型。箭头函数是不存在原型的。
答: ES6是新一代的JS语言标准,规范了JS使用标准,对分JS语言核心内容做了升级优化,,新增了JS原生方法,使得JS使用更加规范,更加优雅,更适合大型应用的开发。...ES6新增的扩展运算符(...)(重要),可以轻松的实现数组和松散序列的相互转化,可以取代arguments对象和apply方法,轻松获取未知参数个数情况下的参数集合。...(尤其是在ES5中,arguments并不是一个真正的数组,而是一个类数组的对象,但是扩展运算符的逆运算却可以返回一个真正的数组)。...ES6在Object原型上新增了getPrototypeOf()和setPrototypeOf()方法,用来获取或设置当前对象的prototype对象。...ES6在Object原型上还新增了Object.keys(),Object.values(),Object.entries()方法,用来获取对象的所有键、所有值和所有键值对数组。
JS方面 ES 1. 讲下作用域的理解 作用域是一套用来管理引擎如何在当前作用域以及嵌套的子作用域中根据标识符名称进行变量查找的规则。...概念: 内层函数能够访问外层函数作用域的变量 缺点: 引起内存泄漏(释放内存) 作用: 使用闭包修正打印值 实现柯里化 实现私有变量,实现JS的模块化应用, 但在ES6后通过官方提供的import、export...(es6引入的新原始数据类型,表示独一无二的值) 引用类型: 对象(object) js中还有内置对象:String、Number、Boolean、Object、Function、Array、Date、...对象Object有4个数据描述符:value(属性值)、writable(可写)、enumerable(可枚举)、configurable(可配置),后三者的默认值均为true;2个访问描述符:getter...(而不是存在于原型链中),并且还需满足enumerable: true Object.keys()会返回一个数组,包含所有可枚举属性 Object.getOwnPropertyNames()会返回一个数组
在浏览器中,js = ES + webApis(BOM,DOM) 在node中,js = ES + nodeApis(fs,net,etc…) ES6(es2015) es6规范是老生常谈的知识点,所以这里只简单盘点一下...(第6个基本类型) 生成器和迭代器 具体内容可以查看我写过的一篇 ES6新特性梳理汇总 ES7(es2016) Array.prototype.includes() 检查一个基本类型的值,是否在数组里...,完全避免了回调地狱层层嵌套的可能 实用程度:★★★★★ Object.values() 返回一个包含该对象所有的可枚举值的数组。...一个类的类主体中可以有任意数量的静态 {} 初始化块,它们将与任何交错的静态字段初始值设定项一起按照声明的顺序执行,我们可以在静态块中使用超属性来访问超类的属性。...10this.colors.push("green"); 11} 12} 13console.log(Car.colors); // [ "blue", "red", "green" ] 14 in 运算符 来检查一个对象中是否有一个特定的私有字段
领取专属 10元无门槛券
手把手带您无忧上云