123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // Copyright 2019 Google, Inc. All rights reserved.
- // This code is governed by the BSD license found in the LICENSE file.
- /*---
- esid: prod-OptionalExpression
- description: >
- optional chain on call expression
- info: |
- Left-Hand-Side Expressions
- OptionalExpression:
- CallExpression OptionalChain
- features: [optional-chaining]
- ---*/
- // CallExpression CoverCallExpressionAndAsyncArrowHead
- function fn () {
- return {a: 33};
- };
- const obj = {
- fn () {
- return 44;
- }
- }
- assert.sameValue(33, fn()?.a);
- assert.sameValue(undefined, fn()?.b);
- assert.sameValue(44, obj?.fn());
- // CallExpression SuperCall
- class A {}
- class B extends A {
- constructor () {
- assert.sameValue(undefined, super()?.a);
- }
- }
- new B();
- // CallExpression Arguments
- function fn2 () {
- return () => {
- return {a: 66};
- };
- }
- function fn3 () {
- return () => {
- return null;
- };
- }
- assert.sameValue(66, fn2()()?.a);
- assert.sameValue(undefined, fn3()()?.a);
- // CallExpression [Expression]
- function fn4 () {
- return [{a: 77}];
- }
- function fn5 () {
- return [];
- }
- assert.sameValue(77, fn4()[0]?.a);
- assert.sameValue(undefined, fn5()[0]?.a);
- // CallExpression .IdentifierName
- function fn6 () {
- return {
- a: {
- b: 88
- }
- };
- }
- assert.sameValue(88, fn6().a?.b);
- assert.sameValue(undefined, fn6().b?.c);
- // CallExpression TemplateLiteral
- function fn7 () {
- return () => {};
- }
- assert.sameValue(undefined, fn7()`hello`?.a);
|