这个函数允许我们根据条件从数组的最后一个元素向前查找元素。例如:
const array = [{a: 1, b: 1}, {a: 2, b: 2}, {a: 3, b: 3}, {a: 4, b: 4}]
console.log(array.findLast(n => n)); //result -> {a: 4,b: 4 }
console.log(array.findLast(n => n.a * 5 === 20)); // result -> {a:4,b:4}
console.log(array.findLast(n => n.a * 5 === 21)); //result -> undefined
console.log(array.findLastIndex(n => n.a * 5 === 21)); // result -> -1
console.log(array.findLastIndex(n => n.a * 5 === 20)); // result -> 3
分析:
const array = [{a: 1, b: 1}, {a: 2, b: 2}, {a: 3, b: 3}, {a: 4, b: 4}]
console.log(array.findLast(n => n)); //结果 -> {a: 4,b: 4 }
使用 findLast 方法从数组的末尾开始查找第一个满足条件(n => n,即所有元素)的元素。因为所有元素都满足条件,所以它返回了数组的最后一个元素 {a: 4, b: 4}。
console.log(array.findLast(n => n.a * 5 === 20)); //结果 -> {a:4,b:4},因为条件为真,所以返回最后一个元素。
使用 findLast 方法从数组的末尾开始查找第一个满足条件(n => n.a * 5 === 20)的元素。这个条件相当于在查找数组中 a 属性值为4的元素,所以它返回了 {a: 4, b: 4}。
console.log(array.findLast(n => n.a * 5 === 21)); //结果 -> undefined,因为条件为假,所以返回undefined,而不是 {a:4,b:4}。
使用 findLast 方法从数组的末尾开始查找第一个满足条件(n => n.a * 5 === 21)的元素。由于数组中没有任何元素的 a 属性值可以满足这个条件,所以返回 undefined。
console.log(array.findLastIndex(n => n.a * 5 === 21)); //结果 -> -1,因为条件不能为返回最后一个元素。
使用 findLastIndex 方法从数组的末尾开始查找第一个满足条件(n => n.a * 5 === 21)的元素的索引。由于数组中没有任何元素的 a 属性值可以满足这个条件,所以返回 -1。
console.log(array.findLastIndex(n => n.a * 5 === 20)); //结果 -> 3,这是最后一个元素的索引,因为条件为真。
使用 findLastIndex 方法从数组的末尾开始查找第一个满足条件(n => n.a * 5 === 20)的元素的索引。这个条件相当于在查找数组中 a 属性值为4的元素的索引,所以它返回了 3,这是数组的最后一个元素的索引。
这个特性使我们能够在某些命令行接口中使用 Hashbang / Shebang。Shebang 用 #! 表示,是脚本开始的特殊行,告诉操作系统执行脚本时应该使用哪个解释器。
#!/usr/bin/env node
// in the Script Goal
'use strict';
console.log(2*3);
#!/usr/bin/env node
// in the Module Goal
export {};
console.log(2*2);
#!/usr/bin/env node 这行代码将直接调用一个 Node.js 源文件,作为其自身的可执行文件。
我们不需要使用这行代码 (#!/usr/bin/env node) 来显式地通过 Node 解释器调用文件,例如, node ./file 。
这允许使用唯一的 Symbols 作为键。目前 WeakMaps 只允许对象作为键。因为它们共享同样的身份特性。
Symbol是ECMAScript中唯一的原始类型,允许使用唯一的值,因此可以使用Symbol作为键,而不是创建一个新的带有WeakMap的对象。
const weak = new WeakMap();
const key = Symbol('my ref');
const someObject = { a:1 };
weak.set(key, someObject);
console.log(weak.get(key));
这在 Array.prototype 上提供了额外的方法,通过返回带有更改的新数组副本,而不是更新原始数组来更改数组。
新引入的 Array.prototype 函数包括:
事例
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
/* toReversed */
const reversed = numbers.toReversed();
console.log("reversed", reversed); // "reversed", [9, 8, 7, 6, 5, 4, 3, 2, 1]
console.log("original", numbers); // "original", [1, 2, 3, 4, 5, 6, 7, 8, 9]
这段代码使用了 toReversed 方法,该方法返回一个新数组,新数组的元素顺序与原数组相反。我们可以看到,原数组 numbers 并未被改变。
/* toSorted */
const sortedArr = numbers.toSorted();
console.log("sorted", sortedArr); // "sorted", [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log("original", numbers); // "original", [1, 2, 3, 4, 5, 6, 7, 8, 9]
这段代码使用了 toSorted 方法,该方法返回一个新数组,新数组的元素是原数组元素的排序结果。由于原数组已经是排序的,所以新数组与原数组相同。我们可以看到,原数组 numbers 并未被改变。
/* with */
const replaceWith = numbers.with(1, 100);
console.log("with", replaceWith); // "with", [1, 100, 3, 4, 5, 6, 7, 8, 9]
console.log("original", numbers); // "original", [1, 2, 3, 4, 5, 6, 7, 8, 9]
这段代码使用了 with 方法,该方法返回一个新数组,新数组在指定索引位置的元素被替换为指定值。我们可以看到,新数组的第二个元素已经被替换为 100,而原数组 numbers 并未被改变。
/* toSpliced */
const splicedArr = numbers.toSpliced(0, 4);
console.log("toSpliced", splicedArr); // "toSpliced", [5, 6, 7, 8, 9]
console.log("original", numbers); // "original", [1, 2, 3, 4, 5, 6, 7, 8, 9]
这段代码使用了 toSpliced 方法,该方法返回一个新数组,新数组删除了原数组从指定位置开始的指定数量的元素。我们可以看到,新数组删除了从位置0开始的4个元素,而原数组 numbers 并未被改变。
这些都是ES2023即将推出的一些令人期待的新功能。
来源公众号:大迁世界
contain 属性允许我们指定特定的 DOM 元素和它的子元素,让它们能够独立于整个 DOM 树结构之外。目的是能够让浏览器有能力只对部分元素进行重绘、重排,而不必每次都针对整个页面。
Html5的新特性语义化标签:有利于SEO,有助于爬虫抓取更多的有效信息,爬虫是依赖于标签来确定上下文和各个关键字的权重。表单新特性,多媒体视频(video)和音频(audio)
var不存在块级作用域,具有变量提升机制。 let和const存在块级作用域,不存在变量提升。在同一作用域内只能声明一次。const在声明时需要赋值且无法修改,但如果常量是对象,则对象的属性可以修改。
Optional Chaining(可选链式调用);Nullish coalescing(空值合并);Pipeline operator(管道运算符)通过三个函数对字符串进行处理;
在今天早些时候Angular团队发布了8.0.0稳定版。其实早在NgConf 2019大会上,演讲者就已经提及了从工具到差分加载的许多内容以及更多令人敬畏的功能。下面是我对8.0.0一些新功能的简单介绍,希望可以帮助大家快速了解新版本
实际上Generator就是遍历器的一个生成器,我们可以用Generator来生成一个遍历器。Generator有两个明显的特点:第一个是function关键字与函数名之间有一个星号,一般而言是将两者写在一起的。第二个是在函数体内部有一个yield的关键字
与我使用的其他框架相比,我最喜欢 React 的原因之一就是它对 JavaScript 的暴露程度。没有模板DSL( JSX 编译为合理的 JavaScript),组件 API 只是通过添加 React Hooks 变得更简单,并且该框架为解决的核心 UI 问题提供非常少的抽象概念
最近 ECMAScript2019,最新提案完成:tc39 Finished Proposals,我这里也是按照官方介绍的顺序进行整理,如有疑问,可以查看官方介绍啦~另外之前也整理了 《ES6/ES7/ES8/ES9系列》,可以一起看哈。
JavaScript 最初的目的是为了“赋予网页生命”。这种编程语言我们称之为脚本。它们可以写在 HTML 中,在页面加载的时候会自动执行。脚本作为纯文本存在和执行。它们不需要特殊的准备或编译即可运行。
你可能刚上手 JavaScript,或者只是曾经偶尔用过。不管怎样,JavaScript 改变了很多,有些特性非常值得一用。 这篇文章介绍了一些特性,在我看来,一个严肃的 JavaScript 开发者每天都多多少少会用到这些特性
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!