JavaScript ES6에는 다양한 새로운 언어 기능이 추가되었으며, 그중 일부는 다른 언어보다 더 획기적이고 더 광범위하게 사용할 수 있습니다. ES6 클래스와 같은 기능은 참신하기는 하지만 실제로는 JavaScript에서 클래스를 생성하는 기존 방법 위에 추가되는 구문 설탕일 뿐입니다. 생성기와 같은 기능은 매우 강력하지만 대상 작업을 위해 예약되어 있습니다.
지난 12개월 동안 다양한 JavaScript 관련 프로젝트를 진행하면서 저는 일반적인 JavaScript 작업이 수행되는 방식을 실제로 단순화하기 때문에 꼭 필요한 5가지 ES6 기능을 발견했습니다. 귀하의 상위 5개 항목은 나와 다를 수 있습니다. 그렇다면 마지막에 있는 댓글 섹션에서 공유해 주시기 바랍니다.
시작해 보세요!
- 화살표 함수
- Promises
- Async 함수
- Destructuring
- Default 및 Rest 매개변수
1) JavaScript 화살표 함수
in ES6 JavaScript에서 제가 가장 좋아하는 새로운 기능 중 하나는 완전히 새로운 기능은 아니지만, 사용할 때마다 미소를 짓게 만드는 새로운 구문입니다. 나는 익명 함수를 정의하는 매우 우아하고 간결한 방법을 제공하는 화살표 함수에 대해 이야기하고 있습니다.
간단히 말하면 화살표 함수는 function
키워드를 잃은 다음 화살표 =>
를 사용하여 익명 함수의 매개변수 부분과 함수 본문을 분리합니다. function
,然后用一个箭头 =>
来分离一个匿名函数的参数部分和函数体:
(x, y) => x * y;
这相当于:
function(x, y){ return x * y; }
或者:
(x, y) => { var factor = 5; var growth = (x-y) * factor; }
完全等价于:
function(x, y){ var factor = 5; var growth = (x-y) * factor; }
在使用传统的匿名函数时,箭头函数还消除了一个关键的错误源,即函数内的 this
对象的值。使用箭头函数,this
是基于词法绑定,这仅仅是意味着它的值被绑定到父级作用域的一种奇特的方式,并且永远不会改变。如果一个箭头函数定义在一个自定义对象 countup
中,this
值毫无疑问地指向 countup
。比如:
var countup = { counter: 15, start:function(){ window.addEventListener('click', () => { alert(this.counter) // correctly alerts 15 due to lexical binding of this }) } }; countup.start();
对比传统匿名函数,this
的值在哪变化取决于它被定义的上下文环境。当在上面的例子中尝试引用 this.counter
,结果将返回 undefined
,这种行为可能会把很多不熟悉动态绑定的复杂性的人搞糊涂。使用箭头函数,this
的值总是可预测并且容易推断的。
对于箭头函数的详细讲解, 请看 “Overview of JavaScript Arrow Functions“.
2) JavaScript Promises
JavaScript ES6 Promises 使异步任务的处理方式变成线性, 这是大多数现代Web应用程序中的一项任务。 而不是依靠回调函数 —— 通过JavaScript框架(如jQuery)普及。JavaScript Promises 使用一个中心直观的机制来跟踪和响应异步事件。它不仅使调试异步代码变得更容易,而且使得编写它也是一种乐趣。
所有 JavaScript Promise 都是通过 Promise()
构造函数开始和结束:
const mypromise = new Promise(function(resolve, reject){ // 在这编写异步代码 // 调用 resolve() 来表示任务成功完成 // 调用 reject() 来表示任务失败 })
在内部使用 resolve()
和 reject()
方法,当一个 Promise 被完成或拒绝时,我们可以分别向一个 Promise 对象发出信号。 then()
与 catch()
方法随后可以被调用,用以处理完成或拒绝 Promise 后的工作。
我用下面一个被注入 XMLHttpRequest 函数的 Promise 的变种,来一个接一个的检索外部文件内容:
function getasync(url) { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest() xhr.open("GET", url) xhr.onload = () => resolve(xhr.responseText) xhr.onerror = () => reject(xhr.statusText) xhr.send() }) } getasync('test.txt').then((msg) => { console.log(msg) // echos contents of text.txt return getasync('test2.txt') }).then((msg) => { console.log(msg) // echos contents of text2.txt return getasync('test3.txt') }).then((msg) => { console.log(msg) // echos contents of text3.txt })
要掌握 JavaScript Promises 的关键点,例如 Promise 链和并行执行 Promise,请阅读 “Beginner’s Guide to Promises“.
3) JavaScript 异步函数
除了 JavaScript Promise,异步函数进一步重写了传统的异步代码结构,使其更具可读性。每当我向客户展示带有async 编程功能的代码时,第一个反应总是令人惊讶,随之而来的是了解它是如何工作的好奇心。
一个异步函数由两部分构成:
1) 一个以 async
为前缀的常规函数
async function fetchdata(url){ // Do something // Always returns a promise }
2) 在异步函数(Async function)内,使用 await
关键字调用异步操作函数
一个例子胜过千言万语。下面是基于上面示例重写的 Promise,以便使用 Async functions代替:
function getasync(url) { // same as original function return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest() xhr.open("GET", url) xhr.onload = () => resolve(xhr.responseText) xhr.onerror = () => reject(xhr.statusText) xhr.send() }) } async function fetchdata(){ // main Async function var text1 = await getasync('test.txt') console.log(text1) var text2 = await getasync('test2.txt') console.log(text2) var text3 = await getasync('test3.txt') console.log(text3) return "Finished" } fetchdata().then((msg) =>{ console.log(msg) // logs "finished" })
上面的例子运行时会输出“test.txt”,“test2.txt”,“test3.txt”,最后是“Finished”。
如你所见,在异步函数中,我们把异步函数 getasync()
当作是同步函数调用 – 没有 then()
方法或回调函数通知进行下一步。无论何时遇到关键字 await
,执行都会暂停,直到 getasync()
解决,然后再转到异步函数中的下一行。结果与纯粹的基于 Promise,使用一串 then
var profile = {name:'George', age:39, hobby:'Tennis'} var {name, hobby} = profile // destructure profile object console.log(name) // "George" console.log(hobby) // "Tennis"이것은 다음과 같습니다:🎜
var profile = {name:'George', age:39, hobby:'Tennis'} var {name:n, hobby:h} = profile // destructure profile object console.log(n) // "George" console.log(h) // "Tennis"🎜또는:🎜
var jsondata = { title: 'Top 5 JavaScript ES6 Features', Details: { date: { created: '2017/09/19', modified: '2017/09/20', }, Category: 'JavaScript', }, url: '/top-5-es6-features/' }; var {title, Details: {date: {created, modified}}} = jsondata console.log(title) // 'Top 5 JavaScript ES6 Features' console.log(created) // '2017/09/19' console.log(modified) // '2017/09/20'🎜정확히 다음과 같습니다:🎜
var soccerteam = ['George', 'Dennis', 'Sandy'] var [a, b] = soccerteam // destructure soccerteam array console.log(a) // "George" console.log(b) // "Dennis"🎜화살표 함수는 또한 전통적인 익명 함수, 즉 함수 /code 내에서
thisthis
는 어휘 바인딩을 기반으로 합니다. 이는 해당 값이 상위 범위에 바인딩되고 절대 변경되지 않는다는 멋진 표현일 뿐입니다. 사용자 정의 개체 countup
에 화살표 함수가 정의된 경우 this
값은 의심할 바 없이 countup
을 가리킵니다. 예: 🎜var soccerteam = ['George', 'Dennis', 'Sandy'] var [a,,b] = soccerteam // destructure soccerteam array console.log(a) // "George" console.log(b) // "Sandy"🎜기존 익명 함수와 비교하면
this
값이 정의된 컨텍스트에 따라 변경됩니다. 위의 예에서 this.counter
를 참조하려고 하면 결과는 정의되지 않음
이 됩니다. 이 동작은 동적 바인딩의 복잡성에 익숙하지 않은 많은 사람들을 혼란스럽게 할 수 있습니다. 화살표 함수를 사용하면 this
의 값은 항상 예측 가능하고 추론하기 쉽습니다. 🎜🎜화살표 함수에 대한 자세한 설명은 "JavaScript 화살표 함수 개요"를 참조하세요.🎜🎜2) JavaScript Promises🎜🎜JavaScript ES6 Promise는 대부분의 현대 웹 애플리케이션에서 나타나는 비동기 작업을 선형적으로 처리합니다. . 콜백 함수에 의존하는 대신 jQuery와 같은 JavaScript 프레임워크로 대중화되었습니다. JavaScript Promise는 비동기 이벤트를 추적하고 응답하기 위한 직관적인 중앙 메커니즘을 사용합니다. 비동기 코드 디버깅이 더 쉬워질 뿐만 아니라 작성도 즐거워집니다. 🎜🎜모든 JavaScript Promise는 Promise()
생성자를 통해 시작하고 끝납니다. 🎜function getarea(w,h){ var w = w || 10 var h = h || 15 return w * h }🎜내부적으로
resolve()
및 reject()
메서드를 사용합니다. Promise가 완료되거나 거부되면 각각 Promise 객체에 신호를 보낼 수 있습니다. 그런 다음 then()
및 catch()
메서드를 호출하여 Promise가 완료되거나 거부된 후 작업을 처리할 수 있습니다. 🎜🎜외부 파일의 내용을 하나씩 검색하기 위해 XMLHttpRequest 함수에 삽입된 Promise의 다음 변형을 사용했습니다. 🎜function getarea(w=10, h=15){ return w * h } getarea(5) // returns 75🎜Promise 체이닝 및 Promise 병렬 실행과 같은 JavaScript Promise의 핵심 사항을 익히려면 " "프라미스"에 대한 초보자 가이드.🎜🎜3) JavaScript 비동기 함수🎜🎜JavaScript Promise 외에도 비동기 함수는 기존 비동기 코드 구조를 더 읽기 쉽게 만들기 위해 다시 작성합니다. 클라이언트에게 비동기 프로그래밍 기능이 있는 코드를 보여줄 때마다 첫 번째 반응은 항상 놀라움이었고, 그 다음에는 그것이 어떻게 작동하는지 이해하려는 호기심이 뒤따랐습니다. 🎜🎜비동기 함수는 두 부분으로 구성됩니다. 🎜🎜1)
async
🎜function addit(...theNumbers){ // get the sum of the array elements return theNumbers.reduce((prevnum, curnum) => prevnum + curnum, 0) } addit(1,2,3,4) // returns 10🎜라는 접두사가 붙은 일반 함수 2) 비동기 함수(Async 함수) ,
await
키워드를 사용하여 비동기 작업 함수를 호출하세요🎜🎜예제는 천 마디 말만큼 가치가 있습니다. 다음은 비동기 함수를 대신 사용하기 위해 위의 예를 기반으로 다시 작성된 Promise입니다. 🎜function addit(theNumbers){ // force arguments object into array var numArray = Array.prototype.slice.call(arguments) return numArray.reduce((prevnum, curnum) => prevnum + curnum, 0) } addit(1,2,3,4) // returns 10🎜위의 예는 다음과 같은 경우 "test.txt", "test2.txt", "test3.txt"를 출력합니다. run 을 실행하고 마지막으로 "완료"됩니다. 🎜🎜보시다시피 비동기 함수에서는 비동기 함수
getasync()
를 동기 함수 호출로 처리합니다. then()
메서드나 콜백 함수는 없습니다. 알림. 다음 단계. await
키워드가 발견될 때마다 비동기 함수의 다음 줄로 이동하기 전에 getasync()
가 해결될 때까지 실행이 일시 중지됩니다. 결과는 여러 then
메서드를 사용하는 순전히 Promise 기반과 동일합니다. 🎜要掌握异步函数,包括如何 await
并行执行函数,请阅读 “Introduction to JavaScript Async Functions- Promises simplified”
4) JavaScript 解构
除了箭头函数,这是我每天使用最多的 ES6 功能。ES6 解构并非一个新功能,而是一个新的赋值语法,可以让您快速解压缩对象属性和数组中的值,并将它们分配给各个变量。
var profile = {name:'George', age:39, hobby:'Tennis'} var {name, hobby} = profile // destructure profile object console.log(name) // "George" console.log(hobby) // "Tennis"
这里我用解构快速提取 profile
对象的 name
和 hobby
属性 。
使用别名,你可以使用与你正在提取值的对象属性不同的变量名:
var profile = {name:'George', age:39, hobby:'Tennis'} var {name:n, hobby:h} = profile // destructure profile object console.log(n) // "George" console.log(h) // "Tennis"
嵌套对象解构
解构也可以与嵌套对象一起工作,我一直使用它来快速解开来自复杂的JSON请求的值:
var jsondata = { title: 'Top 5 JavaScript ES6 Features', Details: { date: { created: '2017/09/19', modified: '2017/09/20', }, Category: 'JavaScript', }, url: '/top-5-es6-features/' }; var {title, Details: {date: {created, modified}}} = jsondata console.log(title) // 'Top 5 JavaScript ES6 Features' console.log(created) // '2017/09/19' console.log(modified) // '2017/09/20'
解构数组
数组的解构与在对象上的工作方式类似,除了左边的花括号使用方括号代替:
var soccerteam = ['George', 'Dennis', 'Sandy'] var [a, b] = soccerteam // destructure soccerteam array console.log(a) // "George" console.log(b) // "Dennis"
你可以跳过某些数组元素,通过使用逗号(,):
var soccerteam = ['George', 'Dennis', 'Sandy'] var [a,,b] = soccerteam // destructure soccerteam array console.log(a) // "George" console.log(b) // "Sandy"
对我而言,解构消除了传统方式提取和分配对象属性和数组值的所有摩擦。要充分掌握ES6解构的复杂性和潜力,请阅读”Getting to Grips with ES6: Destructuring“.
5) 默认和剩余参数(Default and Rest Parameters)
最后,我最想提出的ES6的两个特性是处理函数参数。几乎我们在JavaScript中创建的每个函数都接受用户数据,所以这两个特性在一个月中不止一次地派上用场。
默认参数(Default Parameters)
我们都使用过一下模式来创建具有默认值的参数:
function getarea(w,h){ var w = w || 10 var h = h || 15 return w * h }
有了ES6对默认参数的支持,显式定义的参数值的日子已经结束:
function getarea(w=10, h=15){ return w * h } getarea(5) // returns 75
关于 ES6 默认参数的更多详情 在这.
剩余参数(Rest Parameters)
ES6中的 Rest Parameters 使得将函数参数转换成数组的操作变得简单。
function addit(...theNumbers){ // get the sum of the array elements return theNumbers.reduce((prevnum, curnum) => prevnum + curnum, 0) } addit(1,2,3,4) // returns 10
通过在命名参数前添加3个点 ...
,在该位置和之后输入到函数中的参数将自动转换为数组。
没有 Rest Parameters, 我们不得不做一些复杂的操作比如 手动将参数转换为数组 :
function addit(theNumbers){ // force arguments object into array var numArray = Array.prototype.slice.call(arguments) return numArray.reduce((prevnum, curnum) => prevnum + curnum, 0) } addit(1,2,3,4) // returns 10
Rest parameters 只能应用于函数的参数的一个子集,就像下面这样,它只会将参数从第二个开始转换为数组:
function f1(date, ...lucknumbers){ return 'The Lucky Numbers for ' + date + ' are: ' + lucknumbers.join(', ') } alert( f1('2017/09/29', 3, 32, 43, 52) ) // alerts "The Lucky Numbers for 2017/09/29 are 3,32,43,52"
对于 ES6 中 Rest Parameters 完整规范,看这里.
结论
你同意我所说的 ES6 特性的前五名吗?哪个是你最常用的,请在评论区和大家分享。
推荐教程:《javascript基础教程》
위 내용은 JavaScript ES6의 가장 중요한 5가지 기능 살펴보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.

보다 효율적인 코드를 작성하고 성능 병목 현상 및 최적화 전략을 이해하는 데 도움이되기 때문에 JavaScript 엔진이 내부적으로 작동하는 방식을 이해하는 것은 개발자에게 중요합니다. 1) 엔진의 워크 플로에는 구문 분석, 컴파일 및 실행; 2) 실행 프로세스 중에 엔진은 인라인 캐시 및 숨겨진 클래스와 같은 동적 최적화를 수행합니다. 3) 모범 사례에는 글로벌 변수를 피하고 루프 최적화, Const 및 Lets 사용 및 과도한 폐쇄 사용을 피하는 것이 포함됩니다.

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

Python과 JavaScript는 커뮤니티, 라이브러리 및 리소스 측면에서 고유 한 장점과 단점이 있습니다. 1) Python 커뮤니티는 친절하고 초보자에게 적합하지만 프론트 엔드 개발 리소스는 JavaScript만큼 풍부하지 않습니다. 2) Python은 데이터 과학 및 기계 학습 라이브러리에서 강력하며 JavaScript는 프론트 엔드 개발 라이브러리 및 프레임 워크에서 더 좋습니다. 3) 둘 다 풍부한 학습 리소스를 가지고 있지만 Python은 공식 문서로 시작하는 데 적합하지만 JavaScript는 MDNWebDocs에서 더 좋습니다. 선택은 프로젝트 요구와 개인적인 이익을 기반으로해야합니다.

C/C에서 JavaScript로 전환하려면 동적 타이핑, 쓰레기 수집 및 비동기 프로그래밍으로 적응해야합니다. 1) C/C는 수동 메모리 관리가 필요한 정적으로 입력 한 언어이며 JavaScript는 동적으로 입력하고 쓰레기 수집이 자동으로 처리됩니다. 2) C/C를 기계 코드로 컴파일 해야하는 반면 JavaScript는 해석 된 언어입니다. 3) JavaScript는 폐쇄, 프로토 타입 체인 및 약속과 같은 개념을 소개하여 유연성과 비동기 프로그래밍 기능을 향상시킵니다.

각각의 엔진의 구현 원리 및 최적화 전략이 다르기 때문에 JavaScript 엔진은 JavaScript 코드를 구문 분석하고 실행할 때 다른 영향을 미칩니다. 1. 어휘 분석 : 소스 코드를 어휘 단위로 변환합니다. 2. 문법 분석 : 추상 구문 트리를 생성합니다. 3. 최적화 및 컴파일 : JIT 컴파일러를 통해 기계 코드를 생성합니다. 4. 실행 : 기계 코드를 실행하십시오. V8 엔진은 즉각적인 컴파일 및 숨겨진 클래스를 통해 최적화하여 Spidermonkey는 유형 추론 시스템을 사용하여 동일한 코드에서 성능이 다른 성능을 제공합니다.

실제 세계에서 JavaScript의 응용 프로그램에는 서버 측 프로그래밍, 모바일 애플리케이션 개발 및 사물 인터넷 제어가 포함됩니다. 1. 서버 측 프로그래밍은 Node.js를 통해 실현되며 동시 요청 처리에 적합합니다. 2. 모바일 애플리케이션 개발은 재교육을 통해 수행되며 크로스 플랫폼 배포를 지원합니다. 3. Johnny-Five 라이브러리를 통한 IoT 장치 제어에 사용되며 하드웨어 상호 작용에 적합합니다.

일상적인 기술 도구를 사용하여 기능적 다중 테넌트 SaaS 응용 프로그램 (Edtech 앱)을 구축했으며 동일한 작업을 수행 할 수 있습니다. 먼저, 다중 테넌트 SaaS 응용 프로그램은 무엇입니까? 멀티 테넌트 SAAS 응용 프로그램은 노래에서 여러 고객에게 서비스를 제공 할 수 있습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기
