首页 > 其他分享 >举例说明了十大ES6功能

举例说明了十大ES6功能

时间:2022-11-10 23:05:44浏览次数:66  
标签:ES6 console log 十大 age name var array 举例说明


虽然ES6规范不是最近才发布,但我认为很多开发人员仍然不太熟悉。 主要原因是在规范发布之后,Web浏览器的支持可能很差。 目前,规范发布已经超过2年了,现在很多浏览器对ES6支持良好。 即使您(或您的客户)不使用最新版本的Web浏览器,也可以使用转换器(如Babel),在应用程序的构建过程中将ES6转换为ES5。 这意味着要向前迈出一步,学习ES6。

在本文中,我将尽量简单地介绍最有用的功能。 在本教程之后,您将拥有基本技能,并能够将其应用于实际项目中。 不要将其视为指南或文件。 我的目标是鼓励你深入挖掘并熟悉ES6。

const和let关键字

const使您能够定义常量(最终变量!)。 let让你定义变量。 这很棒,但是JavaScript中没有变量吗? 是有的,但是由var声明的变量具有函数范围,并被提升到顶部。 这意味着在声明之前可以使用一个变量。 让变量和常量具有块范围(由{}包围),在声明之前不能使用。



function          f() {       
var x = 1
let y = 2
const z = 3
{
var x = 100
let y = 200
const z = 300
console.log( 'x in block scope is' , x)
console.log( 'y in block scope is' , y)
console.log( 'z in block scope is' , z)
}
console.log( 'x outside of block scope is' , x)
console.log( 'y outside of block scope is' , y)
console.log( 'z outside of block scope is' , z)
}

f()



运行结果如下:



x         in          block scope is 100        
y in block scope is 200
z in block scope is 300
x outside of block scope is 100
y outside of block scope is 2
z outside of block scope is 3



数组辅助方法

出现了新的很酷的功能,这有助于在很多情况下使用JS Array。 您实现了多少次的逻辑,如:过滤,检查是否有任何或所有元素符合条件,或者元素转换? 是不是很多种情景下都有用过? 现在语言本身自带这些很好用的功能。 在我看来,这是最有价值的功能:

forEach

对数组的每个元素执行传入的函数,将数组元素作为参数传递。



var          colors = [        'red'        ,         'green'        ,         'blue'        ]       

function print(val) {
console.log(val)
}

colors.forEach(print)



运行结果如下:



red        
green
blue



map

创建一个包含相同数量元素的新数组,但是由传入的函数返回元素。 它只是将每个数组元素转换成别的东西。



var          colors = [        'red'        ,         'green'        ,         'blue'        ]       

function capitalize(val) {
return val.toUpperCase()
}

var capitalizedColors = colors.map(capitalize)

console.log(capitalizedColors)



运行结果如下:



[        "RED"        ,        "GREEN"        ,        "BLUE"        ]



filter

创建一个包含原始数组子集的新数组。 新数组包含的这些元素通过由传入的函数实现的测试,该函数应该返回true或false。



var          values = [1, 60, 34, 30, 20, 5]       

function lessThan20(val) {
return val < 20
}

var valuesLessThan20 = values.filter(lessThan20)

console.log(valuesLessThan20)



运行结果如下:



[1,5]



find

找到通过传入的函数测试的第一个元素,该函数应该返回true或false。



var          people = [       
{name: 'Jack' , age: 50},
{name: 'Michael' , age: 9},
{name: 'John' , age: 40},
{name: 'Ann' , age: 19},
{name: 'Elisabeth' , age: 16}
]

function teenager(person) {
return person.age > 10 && person.age < 20
}

var firstTeenager = people.find(teenager)

console.log( 'First found teenager:' , firstTeenager.name)



运行结果如下:



First found teenager: Ann


every

检查数组的每个元素是否通过传入函数的测试,该函数应该返回true或false(每个函数都返回true,则结果为true,否则为false)。



var          people = [       
{name: 'Jack' , age: 50},
{name: 'Michael' , age: 9},
{name: 'John' , age: 40},
{name: 'Ann' , age: 19},
{name: 'Elisabeth' , age: 16}
]

function teenager(person) {
return person.age > 10 && person.age < 20
}

var everyoneIsTeenager = people.every(teenager)

console.log( 'Everyone is teenager: ' , everyoneIsTeenager)



运行结果如下:



Everyone is teenager:         false



some

检查数组的任何元素是否通过由提供的函数实现的测试,该函数应该返回true或false。(有一个函数返回true,则结果true。否则结果为false)



var          people = [       
{name: 'Jack' , age: 50},
{name: 'Michael' , age: 9},
{name: 'John' , age: 40},
{name: 'Ann' , age: 19},
{name: 'Elisabeth' , age: 16}
]

function teenager(person) {
return person.age > 10 && person.age < 20
}

var thereAreTeenagers = people.some(teenager)

console.log( 'There are teenagers:' , thereAreTeenagers)



运行结果如下:



There are teenagers:         true



reduce

方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。 累加器的初始值应作为reduce函数的第二个参数提供。



var          array = [1, 2, 3, 4]       

function sum(acc, value) {
return acc + value
}

function product(acc, value) {
return acc * value
}

var sumOfArrayElements = array.reduce(sum, 0)
var productOfArrayElements = array.reduce(product, 1)

console.log( 'Sum of' , array, 'is' , sumOfArrayElements)
console.log( 'Product of' , array, 'is' , productOfArrayElements)



运行结果如下:



Sum of [1,2,3,4] is 10        
Product of [1,2,3,4] is 24


箭头函数

执行非常简单的函数(如上述的Sum或Product)需要编写大量的模版。 有什么解决办法吗? 是的,可以尝试箭头函数!



var          array = [1, 2, 3, 4]       

const sum = (acc, value) => acc + value
const product = (acc, value) => acc * value

var sumOfArrayElements = array.reduce(sum, 0)
var productOfArrayElements = array.reduce(product, 1)


箭头函数也可以内联。 它真的简化了代码:



var          array = [1, 2, 3, 4]       

var sumOfArrayElements = array.reduce((acc, value) => acc + value, 0)
var productOfArrayElements = array.reduce((acc, value) => acc * value, 1)



箭头函数也可以更复杂,并且有很多行代码:



var          array = [1, 2, 3, 4]       

const sum = (acc, value) => {
const result = acc + value
console.log(acc, ' plus ' , value, ' is ' , result)
return result
}

var sumOfArrayElements = array.reduce(sum, 0)



哪个Java开发人员在切换到JS项目时不会错过类? 谁不喜欢显式继承,像Java语言,而不是为原型继承编写魔术代码? 这引起了一些JS开发者反对,因为在ES6中已经引入了类。 他们不改变继承的概念。 它们只是原型继承的语法糖。



class Point {       
constructor(x, y) {
this .x = x
this .y = y
}

toString() {
return '[X=' + this .x + ', Y=' + this .y + ']'
}
}

class ColorPoint extends Point {
static default () {
return new ColorPoint(0, 0, 'black' )
}

constructor(x, y, color) {
super (x, y)
this .color = color
}

toString() {
return '[X=' + this .x + ', Y=' + this .y + ', color=' + this .color + ']'
}
}

console.log( 'The first point is ' + new Point(2, 10))
console.log( 'The second point is ' + new ColorPoint(2, 10, 'green' ))



运行结果如下:



The first point is [X=2, Y=10]        
The second point is [X=2, Y=10, color=green]
The default color point is [X=0, Y=0, color=black]


对象功能增强

对象功能已被增强。 现在我们可以更容易地:

1.定义具有和已有变量名称相同且赋值的字段
2.定义函数
3.定义动态(计算)属性



const color =         'red'       
const point = {
x: 5,
y: 10,
color,
toString() {
return 'X=' + this .x + ', Y=' + this .y + ', color=' + this .color
},
[ 'prop_' + 42 ]: 42
}

console.log( 'The point is ' + point)

console.log( 'The dynamic property is ' + point.prop_42)



运行结果如下:



The point is X=5, Y=10, color=red        
The dynamic property is 42



模板字符串

谁喜欢写大字符串和变量连接? 我相信我们中只有少数人喜欢。 谁讨厌阅读这样的代码? 我确定大家都是,ES6引入了非常易于使用的字符串模板和变量的占位符。



function          hello(firstName, lastName) {       
return `Good morning ${firstName} ${lastName}!
How are you?`
}

console.log(hello( 'Jan' , 'Kowalski' ))



运行结果如下:



Good morning Jan Kowalski!        
How are you?


请注意,我们可以写多行文本。

重要提示:使用反引号代替撇号来包装文本。

默认函数参数

你不喜欢提供所有可能的函数参数? 使用默认值。



function          sort(arr = [], direction =         'ascending'        ) {       
console.log( 'I\'m going to sort the array' , arr, direction)
}

sort([1, 2, 3])
sort([1, 2, 3], 'descending' )



运行结果如下:



I        'm going to sort the array [1,2,3] ascending        
I' m going to sort the array [1,2,3] descending


rest参数和扩展运算符

扩展

它可以将数组或对象内容提取为单个元素。

示例 - 制作数组的浅拷贝:



var          array = [        'red'        ,         'blue'        ,         'green'        ]       
var copyOfArray = [...array]

console.log( 'Copy of' , array, 'is' , copyOfArray)
console.log( 'Are' , array, 'and' , copyOfArray, 'same?' , array === copyOfArray)


运行结果如下:



Copy of [        "red"        ,        "blue"        ,        "green"        ] is [        "red"        ,        "blue"        ,        "green"        ]        
Are [ "red" , "blue" , "green" ] and [ "red" , "blue" , "green" ] same? false



示例 - 合并数组:



var          defaultColors = [        'red'        ,         'blue'        ,         'green'        ]       
var userDefinedColors = [ 'yellow' , 'orange' ]

var mergedColors = [...defaultColors, ...userDefinedColors]

console.log( 'Merged colors' , mergedColors)



运行结果如下:



Merged colors [        "red"        ,        "blue"        ,        "green"        ,        "yellow"        ,        "orange"        ]



rest参数

您要将前几个函数参数绑定到变量,其他变量作为数组绑定到单个变量吗? 现在你可以很容易地做到这一点。



function          printColors(first, second, third, ...others) {       
console.log( 'Top three colors are ' + first + ', ' + second + ' and ' + third + '. Others are: ' + others)
}
printColors( 'yellow' , 'blue' , 'orange' , 'white' , 'black' )



运行结果如下:



Top three colors are yellow, blue and orange. Others are: white,black



解构赋值

数组

从数组中提取所请求的元素并将其分配给变量。



function          printFirstAndSecondElement([first, second]) {       
console.log( 'First element is ' + first + ', second is ' + second)
}

function printSecondAndFourthElement([, second, , fourth]) {
console.log( 'Second element is ' + second + ', fourth is ' + fourth)
}

var array = [1, 2, 3, 4, 5]

printFirstAndSecondElement(array)
printSecondAndFourthElement(array)


运行结果如下:



First element is 1, second is 2        
Second element is 2, fourth is 4



对象

从对象中提取所请求的属性,并将其分配给与属性相同名称的变量。



function          printBasicInfo({firstName, secondName, profession}) {       
console.log(firstName + ' ' + secondName + ' - ' + profession)
}

var person = {
firstName: 'John' ,
secondName: 'Smith' ,
age: 33,
children: 3,
profession: 'teacher'
}

printBasicInfo(person)


运行结果如下:



John Smith - teacher



Promises

Promises承诺(是的,我知道这听起来很奇怪),你将会得到延期或长期运行任务的未来结果。 承诺有两个渠道:第一个为结果,第二个为潜在的错误。 要获取结果,您将回调函数作为“then”函数参数。 要处理错误,您将回调函数提供为“catch”函数参数。



function          asyncFunc() {       
return new Promise((resolve, reject) => {
setTimeout(() => {
const result = Math.random();
result > 0.5 ? resolve(result) : reject( 'Oppps....I cannot calculate' )
}, 1)
});
}

for (let i=0; i<10; i++) {
asyncFunc()
.then(result => console.log( 'Result is: ' + result))
. catch (result => console.log( 'Error: ' + result))
}


运行结果如下:



Result is: 0.7930997430022211        
Error: Oppps....I cannot calculate
Result is: 0.6412258210597288
Result is: 0.7890325910244533
Error: Oppps....I cannot calculate
Error: Oppps....I cannot calculate
Result is: 0.8619834683310168
Error: Oppps....I cannot calculate
Error: Oppps....I cannot calculate
Result is: 0.8258410427354488



总结

我希望你喜欢这篇文章。 如果您想要一些练习,您可以使用沙箱进行学习过程:​​https://es6console.com/​​。 如果您需要更多信息,可以在这里找到

​https://github.com/lukehoban/es6features​​​​http://exploringjs.com/es6/​

翻译自​​Top 10 ES6 features by example​


标签:ES6,console,log,十大,age,name,var,array,举例说明
From: https://blog.51cto.com/u_15760883/5842292

相关文章

  • (转)陆奇博士2022年度分享:前沿科技创新创业十大趋势(重磅完整版)
     https://mp.weixin.qq.com/s?__biz=MzA3NjAwOTk0NA==&mid=2650657441&idx=1&sn=e0b9365e66329d8e735605a511f46d9c&chksm=876eaa16b01923008d4a07156936a434bdd9a313330......
  • ES6中对象新增了哪些扩展?
    1、属性的简写ES6中,当对象键名与对应值名相等的时候,可以进行简写。consto={method(){return"Hello!";}};//等同于consto={method:function(){retu......
  • 【ES6 教程】第一章 新的ES6语法10—如何替换字符串中的变量
    英文|https://www.javascripttutorial.net翻译|杨小爱在今天的教程中,我们将学习JavaScript模板文字,它使我们可以更轻松地使用字符串模板。在ES6之前,我们使用单引号......
  • 9个常用ES6特性归纳
    1、展开操作符顾名思义,用于对象或数组之前的展开操作符(…),将一个结构展开为列表。演示一下:letfirstHalf=[one,two];letsecondHalf=[three,four,...firstHalf......
  • 24个解决实际问题的ES6代码段
    英文| https://madza.hashnode.dev/24-modern-es6-code-snippets-to-solve-practical-js-problems作者|Madza译者|王强策划|李俊辰这篇文章基于实际使用场景总结......
  • JavaScript数组去重—ES6的两种方式
    说明JavaScript数组去重这个问题,经常出现在面试题中,以前也写过一篇数组去重的文章,(JavaScript数组去重的多种方法原理详解)但感觉代码还是有点不够简单,今天和大家再说两种......
  • js es5和es6
    ES5新增内容严格模式概述:我们普通书写的js代码并没有特别多的规范,甚至在某些时候可以随意发挥,这种模式被称为怪异模式。相对而言一种更加规范化的模式被称为严格模式。严......
  • ES6的详细注解
    let声明变量的新方法。变量无法重复声明。块级作用域。也就是说let只在代码块中生效,包括if、else等花括号中的变量不会定义到全局。不存在变量提升。也就是说,在声明变量之前......
  • C# ES6 yield的实现原理
    我们先看es6里的是这样子://Generator函数function*chain(){yield'a';console.log('sss');yield'b';yield'c';return'end';}varexp=cha......
  • ES6
    var、let、constvar  const(对于普通类型不可改变值,引用类型不可改变栈里的地址)  letlet没有声明提升,声明可以不赋值,暂时性死区,块级作用域,不能重复赋值解构赋值......