>일반적인 문제 >기호 사용법에 대한 자세한 설명

기호 사용법에 대한 자세한 설명

藏色散人
藏色散人원래의
2020-07-08 12:02:3714159검색

symbol은 JavaScript의 7번째 데이터 유형인 새로운 기본 데이터 유형입니다. Symbol 값은 "let s = Symbol();typeof s;" 구문을 사용하여 Symbol 함수에 의해 생성됩니다. 여기서 typeof는 s가 기호임을 나타냅니다. 데이터 유형.

기호 사용법에 대한 자세한 설명

Symbol() 사용 방법

소개: ES5 객체 속성 이름은 모두 문자열이므로 속성 이름 충돌이 쉽게 발생할 수 있습니다. 예를 들어 프로젝트는 매우 크고 한 사람이 개발하지 않습니다. , 변수 이름 충돌이 발생할 수 있으므로 고유한 이름이 있으면 속성 이름 충돌을 근본적으로 방지할 수 있으면 좋겠습니다. 이것이 ES6에서 Symbol을 도입한 이유입니다.

ES6에는 고유성을 나타내는 새로운 기본 데이터 유형인 Symbol이 도입되었습니다. 이는 JavaScript의 일곱 번째 데이터 유형입니다. Symbol 값은 Symbol 함수를 통해 생성되며, 속성 이름이 Symbol 유형에 속하는 한 고유하며 다른 속성 이름과 충돌하지 않음을 보장할 수 있습니다.

let s = Symbol();
typeof s;
//"symbol"

위 코드에서 s는 고유한 값이고, typeof는 s가 심볼 데이터 타입임을 나타냅니다.

참고: 기호 함수 앞에 new 키워드를 사용할 수 없습니다. 그렇지 않으면 오류가 보고됩니다. 이는 기호가 객체가 아닌 기본 데이터 유형이므로 속성을 추가할 수 없기 때문입니다.

symbol은 기호에 대한 설명을 나타내는 매개변수로 허용됩니다.

var s1 = Symbol("foo");
var s2 = Symbol("bar");
s1 // Symbol("foo")
s2 // Symbol("bar")
s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)

이 매개변수는 콘솔 출력에 추가되지 않는 경우 생략 가능합니다. 도움이 되지 않는 두 개의 Symbol()이 될 것입니다. 구별하려면 매개변수를 추가하는 것이 구별됩니다.

매개변수가 없는 두 기호는 동일하지 않습니다. 예를 들어

// 没有参数的情况
var s1 = Symbol();
var s2 = Symbol();
s1 == s2 // false
// 有参数的情况
var s1 = Symbol("foo");
var s2 = Symbol("foo");
s1 == s2 // false

는 매개변수 유무에 관계없이 동일하지 않습니다.

기호는 다른 값과 함께 작동할 수 없습니다. 그렇지 않으면 오류가 보고됩니다. , 부울 값으로 문자열로 변환되지만 숫자로 변환할 수는 없습니다

var s1 = Symbol("My Symbol");
"your symbol is" + s1;
// TypeError: can't convert symbol to string
`your symbol is ${s1}`
// TypeError: can't convert symbol to string

각 기호가 다르기 때문에 동일한 이름의 속성을 보장하기 위해 개체의 속성 이름으로 식별자로 사용할 수 있습니다. 나타나지 않습니다

// 转为字符串
var s1 = Symbol("My Symbol");
String(s1) // "Symbol(My Symbol)"
s1.toString() // "Symbol(My Symbol)"
//转为布尔值
var s1 = Symbol();
Boolean(s1) //true
!s1 //false
if(s1) {
 //  ...  
}
//转为数值就会报错

참고: 기호 값은 개체의 속성으로 사용됩니다. 이름을 지정할 때 점 연산자를 사용할 수 없습니다. 마찬가지로 개체 내부에서 기호 값을 사용할 경우에도 대괄호 안에 배치해야 합니다

var mySymbol = Symbol();
//第一种写法
var a = {};
a[mySymbol] = "Hello!";
//第二种写法
var a = {
     [mySymbol]: "Hellow!"
}
//第三种写法
var a = {};
Object.defineProperty(a, mySymbol, { value: "Hellow!" });
//以上写法的结果都相同
a[mySymbol] // "Hellow!"

Symbol 또한 이 상수 집합의 값이 동일하지 않도록 상수 집합을 정의할 수도 있습니다

let s = Symbol();
let obj = {
    [s]: function(arg) {...}  
}
//如果s不放在[]中,该属性名就是字符串,而不是Symbol
//可以采用增强的方式在书写上面的代码
let s = Symbol();
let obj = {
    [s](arg) {...}
}

상수에 기호 값을 사용하는 가장 큰 장점은 다른 값이 동일할 수 없다는 것입니다.

마법 문자열 제거

마법 문자열은 코드에 여러 번 나타나는 특정 문자열이나 숫자를 나타내며 코드와 강한 결합을 형성합니다. 좋은 코딩 스타일은 마술 문자열을 제거하고 대신 의미 변수를 명확하게 해야 합니다.

const COLOR_RED = Symbol();
const COLOR_GREEN = Symbol();
function getComponent(color) {
    switch(color) {
        case: COLOR_RED:
               return "red";
        case: COLOR_GREEN:
              return "green";
        default:
              throw new Error("Undefind color")
    }  
}

위 문자열에서 Tringel은 마법의 문자열로 여러 번 나타나며 코드와 강한 결합을 형성하므로 향후 유지 관리에 도움이 되지 않습니다.

function getArea(shape, options) {
     var area = 0;
     switch(shape) {
          case: "Tringel":     // 魔术字符串
              area = 5*options.width*options.height;
              break;
     }
     return area;
}
getArea("Tringel", {width: 100, height: 100});    // 魔术字符串

Symbol을 대신 사용하는 것이 매우 적합합니다

var shapeType = {
   triangle: "Tringel"
}
function getArea(shape, options) {
     var area = 0;
     switch(shape) {
          case: shapeType.triangle:     // 消除魔术字符串
              area = 5*options.width*options.height;
              break;
     }
     return area;
}
getArea(shapeType.triangle, {width: 100, height: 100});    //消除魔术字符串

더 많은 관련 지식은

PHP 중국어 홈페이지

를 방문해주세요!

위 내용은 기호 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.