이 기사는 ES6의 Symbol에 대한 자세한 소개(코드 예제)를 제공합니다. 이는 특정 참조 가치가 있으므로 도움이 될 수 있습니다.
Symbol은 고유한 값을 표현하기 위해 ES6에 도입된 새로운 기본 데이터 유형입니다.
Symbol 기능
1.Symbol은 팩토리 함수를 통해 생성되며 new로 생성될 수 없으므로, instanceof 연산자를 사용하여 반환된 결과는 false입니다
var sym = Symbol(); var sym1 = new Symbol(); // TypeError sym instanceof Symbol // false
2.Symbol은 typeof 연산자를 사용하여 "symbol"
var sym = Symbol('foo'); typeof sym; // "symbol"
3을 반환합니다. Symbol 팩토리 함수는 현재 기호를 설명하는 선택적 매개변수를 지원할 수 있습니다
var sym2 = Symbol('foo'); var sym3 = Symbol('foo');
4.Symbol은 고유하며, Symbol("foo") == Symbol("foo")는 false를 반환합니다
Symbol('foo') === Symbol('foo'); // false
5.Symbol 및 숫자 또는 문자열인 경우 작업이 수행되면 예외가 발생합니다
sym | 0 // TypeError Symbol("foo") + "bar" // TypeError
6. 기호 팩토리 함수에서 반환된 기호는 속성 충돌을 피하기 위해 객체의 속성 이름으로 사용될 수 있습니다. for...in iteration
var obj = {}; obj[Symbol("a")] = "a"; obj[Symbol.for("b")] = "b"; obj["c"] = "c"; obj.d = "d"; for (var i in obj) { console.log(i); // logs "c" and "d" }에서는 열거할 수 없습니다.
7. Symbol 팩토리 함수에서 반환된 값을 객체 속성 이름으로 사용할 수 있습니다. JSON.stringify()를 사용하여 직렬화하는 경우 이 속성은 무시됩니다.
JSON.stringify({[Symbol("foo")]: "foo"}); // '{}'
8.Symbol은 고유하지만 Symbol.for를 사용할 수 있습니다. () 동일한 Symbol 값 공유
var mySymbol1 = Symbol.for('some key'); var mySymbol2 = Symbol.for('some key'); mySymbol1 == mySymbol2 //true
Symbol 실제 전투
객체 리터럴 전용 속성 및 메서드
const myPrivateMethod = Symbol("myPrivateMethod"); const myPrivateProperty = Symbol("myPrivateProperty"); const obj = { [myPrivateProperty]: "semlinker", [myPrivateMethod]() { return `Hello ${this[myPrivateProperty]}!!!`; }, hello() { console.log(this[myPrivateMethod]()); } }; console.log(Object.keys(obj)); console.log(obj.hello());
Symbol은 객체 리터럴 생성 시 사용하는 것 외에도 클래스의 전용 속성 및 메서드 정의 시에도 사용할 수 있습니다.
클래스의 개인 속성 및 메서드
const myPrivateMethod = Symbol("myPrivateMethod"); const myPrivateProperty = Symbol("myPrivateProperty"); class MyClass { constructor() { this[myPrivateProperty] = "semlinker"; } [myPrivateMethod]() { return `Hello ${this[myPrivateProperty]}!!!`; } hello() { console.log(this[myPrivateMethod]()); } } const myCls = new MyClass(); console.log(myCls.hello());
ES6에서는 Symbol.match, Symbol.replace, Symbol.search, Symbol.iterator 및 Symbol.split과 같은 일부 전역 기호가 도입되었습니다. 여기에서는 Symbol.search 및 Symbol.iterator를 간략하게 소개합니다.
Symbol.iterator
class Skill { constructor() { this.skills = ['Angular', 'React', 'Vue', 'Koa', 'Ionic']; } [Symbol.iterator]() { let index = 0; return { next: () => { const value = this.skills[index++]; const done = index === this.skills.length + 1; return { value, done }; } } } } const mySkills = new Skill(); console.log([...mySkills]); for (let skill of mySkills) { console.log(`My skill is ${skill}`); }
Symbol.search
먼저 예제를 간략하게 살펴보겠습니다.
'angular'.search('ng') // 4
이 예제의 실행 흐름:
Parse 'angular'.search('ng')
Convert ' angle'을 문자열 객체로 new String('angular')
'ng'를 일반 객체로 변환 new Regexp('ng')
'angular' 문자열 객체의 검색 메서드를 호출하면 자동으로 ng 일반 객체가 호출됩니다. 내부적으로 Symbol.search 메서드
자세한 내용은 다음 유사 코드를 참조하세요.
// pseudo code for String class class String { constructor(value) { this.value = value; } search(obj) { obj[Symbol.search](this.value); } } class RegExp { constructor(value) { this.value = value; } [Symbol.search](string) { return string.indexOf(this.value); } }
또한 Symbol.search를 사용하여 String.prototype.search() 메서드가 내부에서 Symbol.search() 메서드를 호출하도록 할 수도 있습니다. 사용자 정의를 달성하기 위한 사용자 정의 개체 검색 논리 정의:
class Article { constructor(tag) { this.tag = tag; } [Symbol.search](string) { return string.indexOf(this.tag) >= 0 ? 'Found' : 'Not_Found'; } } var article = new Article('Angular'); console.log('Angular7'.search(article)); // Found console.log('重温ES6'.search(article)); // Not_Found
위 예제의 실행 흐름:
'Angular7'.search(article) 문을 구문 분석합니다.
'Angular7'을 문자열 개체 new String("Angular7")으로 변환
기사는 객체이므로 여기서는 변환이 필요하지 않습니다
'Angular7' 문자열 객체의 검색 메소드를 호출하면 기사 객체 내부의 Symbol.search 메소드가 자동으로 호출됩니다(예: 기사[Symbol.search](' Angular7')
위 내용은 ES6의 기호에 대한 자세한 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

在es6中,可以利用“Array.isArray()”方法判断对象是否为数组,若判断的对象是数组,返回的结果是true,若判断对象不是数组,返回的结果是false,语法为“Array.isArray(需要检测的js对象)”。

es6中遍历跟迭代的区别是:遍历强调的是要把整个数据依次全部取出来,是访问数据结构的所有元素;而迭代虽然也是依次取出数据,但是并不保证取多少,也不保证把所有的数据取完,是遍历的一种形式。

在es6中,可用Object对象的is()方法来判断两个对象是否相等,该方法检测两个变量的值是否为同一个值,判断两个对象的引用地址是否一致,语法“Object.is(对象1,对象2)”;该方法会返回布尔值,若返回true则表示两个对象相等。

转换方法:1、利用“+”给数字拼接一个空字符,语法“数字+""”;2、使用String(),可把对象的值转换为字符串,语法“String(数字对象)”;3、用toString(),可返回数字的字符串表示,语法“数字.toString()”。

sort排序是es6中的;sort排序是es6中用于对数组的元素进行排序的方法,该方法默认不传参,按照字符编码顺序进行排序,排序顺序可以是字母或数字,并按升序或降序,语法为“array.sort(callback(a,b))”。

在es6中,assign用于对象的合并,可以将源对象的所有可枚举属性复制到目标对象;若目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性,语法为“Object.assign(...)”

改变方法:1、利用splice()方法修改,该方法可以直接修改原数组的内容,语法为“数组.splice(开始位置,修改个数,修改后的值)”;2、利用下标访问数组元素,并重新赋值来修改数组数据,语法为“数组[下标值]=修改后的值;”。

在es6中,import as用于将若干export导出的内容组合成一个对象返回;ES6的模块化分为导出与导入两个模块,该方法能够将所有的导出内容包裹到指定对象中,语法为“import * as 对象 from ...”。


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

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

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

뜨거운 주제



