> 웹 프론트엔드 > 프런트엔드 Q&A > es6 기호는 기본 유형입니까?

es6 기호는 기본 유형입니까?

青灯夜游
풀어 주다: 2022-03-08 17:00:02
원래의
2607명이 탐색했습니다.

es6 기호는 기본형입니다. Symbol은 es6에 도입된 새로운 기본 데이터 유형으로, 고유한 값을 나타냅니다. 해당 기능은 속성 이름 충돌을 방지하고 객체의 각 속성 이름이 고유하도록 하는 것입니다.

es6 기호는 기본 유형입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, ECMAScript 버전 6, Dell G3 컴퓨터.

Symbol은 기본 데이터 유형으로, ES6에 도입된 새로운 데이터 유형입니다. Symbol是一种基本数据类型,一种在ES6引入的新的数据类型。

目的是为了防止属性名的冲突,保证对象中每一个属性名都是独一无二的。

let s1 = Symbol('foo');
let s2 = Symbol('foo');

s1 === s2 // false
로그인 후 복사

Symbol类型可以有一个字符串参数,表示对Symbol实例的描述。所以相同描述的两个Symbol类型实例也是不相等的。

如何在对象中使用

let s = Symbol();

// 第一种写法
let a = {};
a[mySymbol] = 'Hello!';

// 第二种写法
let a = {
  [mySymbol]: 'Hello!'
};

// 第三种写法
let a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });

// 以上写法都得到同样结果
a[mySymbol] // "Hello!"
로그인 후 복사

可以看出使用Symbol类型当属性名,必须使用[]才可以。如果不使用则表示与变量名相同字符串当属性名的属性。

Symbol作为属性名,遍历对象的时候,该属性不会出现在for...infor...of循环中,也不会被Object.keys()Object.getOwnPropertyNames()JSON.stringify()返回

但是,它也不是私有属性,有一个Object.getOwnPropertySymbols()方法,可以获取指定对象的所有Symbol属性名。该方法返回一个数组,成员是当前对象的所有用作属性名的Symbol值。

如何使用同一个Symbol值

Symbol.for("bar") === Symbol.for("bar")
// true
로그인 후 복사

使用Symbol.for()方法,同样参数创建的变量就是同一个值。因为使用这个方法创建的Symbol变量会把参数在全局登记。而Symbol()创建的变量的参数则不会在全局登记。

let s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"

let s2 = Symbol("foo");
Symbol.keyFor(s2) // undefined
로그인 후 복사

使用Symbol.keyFor()则可以变量找到全局登记的参数的名字。

Symbol内置的属性值

Symbol.hasInstance:其它对象使用instanceof运算符的时候会使用该属性名指向的内部方法。

Symbol.isConcatSpreadable

Symbol.species

Symbol.match

Symbol.replace

Symbol.search

Symbol.split

Symbol.iterator

Symbol.toPrimitive

Symbol.toStringTag

Symbol.unscopables

이 목적은 속성 이름 충돌을 방지하고 개체의 각 속성 이름이 고유한지 확인하는 것입니다. rrreeeSymbol 유형에는 Symbol 인스턴스의 설명을 나타내는 문자열 매개변수가 있을 수 있습니다. 따라서 동일한 설명을 가진 두 개의 Symbol 유형 인스턴스는 동일하지 않습니다.

객체에서 사용하는 방법

rrreeeSymbol 타입을 속성 이름으로 사용하려면 []를 사용해야 함을 알 수 있습니다. 사용하지 않을 경우 속성명과 변수명과 동일한 문자열을 나타냅니다. 🎜🎜🎜Symbol은 객체를 순회할 때 for...in, for...of 루프에 나타나지 않습니다. Object.keys(), Object.getOwnPropertyNames(), JSON.stringify()에 의해 반환되지도 않습니다. 🎜🎜🎜🎜그러나 두 속성 모두 비공개가 아닌 경우 지정된 객체의 모든 Symbol 속성 이름을 가져올 수 있는 Object.getOwnPropertySymbols() 메서드가 있습니다. 이 메소드는 현재 객체의 속성 이름으로 사용되는 모든 Symbol 값을 멤버로 포함하는 배열을 반환합니다. 🎜🎜

동일한 Symbol 값을 사용하는 방법

rrreee🎜Symbol.for() 메소드를 사용하면 동일한 매개변수로 생성된 변수는 동일한 값을 갖게 됩니다. 이 방법을 사용하여 생성된 Symbol 변수는 전역적으로 매개변수를 등록하기 때문입니다. Symbol()에 의해 생성된 변수의 매개변수는 전역적으로 등록되지 않습니다. 🎜rrreee🎜변수에서 전역적으로 등록된 매개변수의 이름을 찾으려면 Symbol.keyFor()를 사용하세요. 🎜

Symbol 내장 속성 값

🎜Symbol.hasInstance: 다른 개체가 instanceof 연산자를 사용하는 경우 다음이 가리키는 내부 메서드를 사용합니다. 속성 이름. 🎜🎜Symbol.isConcatSpreadable🎜🎜Symbol.species🎜🎜Symbol.match🎜🎜Symbol.replace🎜🎜 Symbol.search🎜🎜Symbol.split🎜🎜Symbol.iterator🎜🎜Symbol.toPrimitive🎜🎜Symbol.toStringTag🎜🎜Symbol.unscopables🎜🎜[관련 권장 사항: 🎜javascript 비디오 튜토리얼🎜, 🎜웹 프론트 엔드🎜]🎜

위 내용은 es6 기호는 기본 유형입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿