array-pattern-emulates-undefined.js (1314B)
1 // Copyright (C) 2020 Alexey Shvayka. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 /*--- 4 esid: sec-destructuring-binding-patterns-runtime-semantics-bindinginitialization 5 description: > 6 Destructuring initializer is not evaluated when value is an object 7 with [[IsHTMLDDA]] internal slot. 8 info: | 9 BindingPattern : ArrayBindingPattern 10 11 1. Let iteratorRecord be ? GetIterator(value). 12 2. Let result be IteratorBindingInitialization of ArrayBindingPattern with arguments 13 iteratorRecord and environment. 14 3. If iteratorRecord.[[Done]] is false, return ? IteratorClose(iteratorRecord, result). 15 4. Return result. 16 17 Runtime Semantics: IteratorBindingInitialization 18 19 SingleNameBinding : BindingIdentifier Initializer[opt] 20 21 [...] 22 5. If Initializer is present and v is undefined, then 23 [...] 24 6. If environment is undefined, return ? PutValue(lhs, v). 25 features: [destructuring-binding, IsHTMLDDA] 26 ---*/ 27 28 var IsHTMLDDA = $262.IsHTMLDDA; 29 var initCount = 0; 30 var counter = function() { 31 initCount += 1; 32 }; 33 34 var x; 35 ([x = counter()] = [IsHTMLDDA]); 36 37 assert.sameValue(x, IsHTMLDDA); 38 assert.sameValue(initCount, 0); 39 40 var base = {}; 41 ([base.y = counter()] = [IsHTMLDDA]); 42 43 assert.sameValue(base.y, IsHTMLDDA); 44 assert.sameValue(initCount, 0); 45 46 reportCompare(0, 0);