es6 기호는 기본형입니다. Symbol은 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...in
、for...of
循环中,也不会被Object.keys()
、Object.getOwnPropertyNames()
、JSON.stringify()
返回
但是,它也不是私有属性,有一个
Object.getOwnPropertySymbols()
方法,可以获取指定对象的所有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.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 유형 인스턴스는 동일하지 않습니다.
[]
를 사용해야 함을 알 수 있습니다. 사용하지 않을 경우 속성명과 변수명과 동일한 문자열을 나타냅니다. 🎜🎜🎜Symbol은 객체를 순회할 때 for...in
, for...of
루프에 나타나지 않습니다. Object.keys()
, Object.getOwnPropertyNames()
, JSON.stringify()
에 의해 반환되지도 않습니다. 🎜🎜🎜🎜그러나 두 속성 모두 비공개가 아닌 경우 지정된 객체의 모든 Symbol 속성 이름을 가져올 수 있는 Object.getOwnPropertySymbols()
메서드가 있습니다. 이 메소드는 현재 객체의 속성 이름으로 사용되는 모든 Symbol 값을 멤버로 포함하는 배열을 반환합니다. 🎜🎜Symbol.for()
메소드를 사용하면 동일한 매개변수로 생성된 변수는 동일한 값을 갖게 됩니다. 이 방법을 사용하여 생성된 Symbol 변수는 전역적으로 매개변수를 등록하기 때문입니다. Symbol()
에 의해 생성된 변수의 매개변수는 전역적으로 등록되지 않습니다. 🎜rrreee🎜변수에서 전역적으로 등록된 매개변수의 이름을 찾으려면 Symbol.keyFor()
를 사용하세요. 🎜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 중국어 웹사이트의 기타 관련 기사를 참조하세요!