"new" 연산자를 사용하여 개체를 만들 때 괄호를 생략할 수 있습니까?
다음과 같이 오브젝트가 생성되는 것을 본 적이 있습니다.
const obj = new Foo;
그러나 개체를 만들 때 괄호는 선택사항이 아니라고 생각했습니다.
const obj = new Foo();
오브젝트를 작성하는 앞의 방법이 유효하고 ECMAScript 표준에 정의되어 있습니까?이전의 오브젝트 작성 방법과 이후의 오브젝트 작성 방법 사이에 어떤 차이가 있습니까?한쪽이 다른 쪽보다 더 좋습니까?
로, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
new
연산자만, JavaScript는 함수 호출에 인수가 없는 경우 괄호를 생략함으로써 문법을 단순화합니다. 있다, 하다, 하다, 하다를 .new
★★★★★★★★★★★★★★★★★★:o = new Object; // Optional parenthesis omitted here d = new Date(); ...
개인적으로 저는 항상 괄호를 사용합니다. 심지어 컨스트럭터가 인수를 받지 않을 때도요.
또한 괄호를 생략하면 JSLint가 기분을 상하게 할 수 있습니다.보고하다Missing '()' invoking a constructor
툴에 괄호 생략을 허용하는 옵션은 없는 것 같습니다.
1 David Flanagan: JavaScript the Definitive Guide: 제4판 (75페이지)
두 가지 사이에는 차이가 있습니다.
new Date().toString()
합니다.new Date.toString()
"TypeError: Date.toString은 컨스트럭터가 아닙니다"를 슬로우합니다.
은 ★★★★★★★★★★★★★★★★★★★new Date()
★★★★★★★★★★★★★★★★★」new Date
우선순위가 다르다MDN에 따르면 JavaScript 연산자 우선 순위 테이블 부분은 다음과 같습니다.
우선 순위 | 오퍼레이터 타입 | 연관성 | 연산자 |
---|---|---|---|
18 | 액세스 Access ( 멤버액세스) new 리스트 ('인수 리스트') |
에서 오른쪽으로 에서 오른쪽으로 |
… . … … [ … ] new … ( … ) |
17 | 호출 " " "new 리스트 ('인수 리스트') |
에서 오른쪽으로 에서 왼쪽으로 |
… ( … ) new … |
이 표에서는 다음과 같이 설명합니다.
new Foo()
우선도가new Foo
new Foo()
와 같은 우선순위를 가진다..
new Foo
precedence '1'보다..
new Date().toString()
하게 동작합니다.(new Date()).toString()
new Date.toString()
는 "TypeError: Date.toString is not constructor" 를 슬로우합니다.이유는 다음과 같습니다..
우선도가new Date
호출) 은 ('함수 호출'보다 높음)으로 평가됩니다.(new (Date.toString))()
할 수 .
… [ … ]
환입니니다다new Foo
오른쪽에서 왼쪽으로의 연관성을 가지며,new Foo()
"관련성"은 적용되지 않습니다.실제론 별 차이가 없는 것 같아요.자세한 내용은 이 SO 질문을 참조하십시오.
한쪽이 다른 쪽보다 더 좋습니까?
그것을 모두 알고 있기 때문에, 라고 추측할 수 있다.new Foo()
권장됩니다.
"새로운" 연산자를 사용해도 별 차이가 없다고 생각합니다.이 두 줄의 코드는 같지 않으므로 이 습관을 들이지 않도록 주의하십시오.
var someVar = myFunc; // this assigns the function myFunc to someVar
var someOtherVar = myFunc(); // this executes myFunc and assigns the returned value to someOtherVar
전달할 인수가 없는 경우 괄호는 옵션입니다.그것들을 생략하는 것은 단지 통사적인 설탕일 뿐이다.
https://262.ecma-international.org/6.0/ #sec-new-sec-sec-sec-sec-sec-sec-sec-
여기에서는, 2개의 변종이 어떻게 동작하는지를 정의하는 ES6 사양의 일부를 나타냅니다.no-parenthes 변종은 빈 인수 목록을 전달합니다.
흥미롭게도, 그 두 형태는 다른 문법적 의미를 가지고 있다.이것은 결과 멤버에 액세스하려고 할 때 표시됩니다.
new Array.length // fails because Array.length is the number 1, not a constructor
new Array().length // 0
그 둘 사이에는 차이가 없다.
언급URL : https://stackoverflow.com/questions/3034941/can-we-omit-parentheses-when-creating-an-object-using-the-new-operator
'programing' 카테고리의 다른 글
래퍼 "https"를 찾을 수 없습니다. PHP 구성 시 래퍼 "https"를 사용하도록 설정하지 않았습니까? (0) | 2022.10.02 |
---|---|
공유 테이블 구조를 가진 멀티 테넌트(Multi-tenant) 데이터베이스를 작성하려면 어떻게 해야 합니까? (0) | 2022.10.02 |
JavaScript에서 var가 문자열인지 확인하려면 어떻게 해야 합니까? (0) | 2022.10.02 |
PHP 재귀 함수가 있는 디렉터리의 모든 파일 및 폴더 나열 (0) | 2022.10.02 |
인덱싱이 'C'에서 0으로 시작하는 이유는 무엇입니까? (0) | 2022.10.02 |