53 lines
1.3 KiB
JavaScript
53 lines
1.3 KiB
JavaScript
|
// Copyright 2018 the V8 project authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
// Test spreading of holey arrays. Holes should be replaced with undefined.
|
||
|
|
||
|
var a = [, 2];
|
||
|
|
||
|
assertEquals([, 2], [...a]);
|
||
|
assertTrue([...a].hasOwnProperty(0));
|
||
|
assertTrue([2, ...a].hasOwnProperty(1));
|
||
|
|
||
|
|
||
|
class MyArray1 extends Array {
|
||
|
constructor(a) {
|
||
|
super(...a);
|
||
|
}
|
||
|
}
|
||
|
var myarr1 = new MyArray1(a);
|
||
|
assertEquals(undefined, myarr1[0]);
|
||
|
assertTrue(myarr1.hasOwnProperty(0));
|
||
|
|
||
|
|
||
|
class MyArray2 extends Array {
|
||
|
constructor(a) {
|
||
|
super(2, ...a);
|
||
|
}
|
||
|
}
|
||
|
var myarr2 = new MyArray2(a);
|
||
|
assertEquals(undefined, myarr2[1]);
|
||
|
assertTrue(myarr2.hasOwnProperty(1));
|
||
|
|
||
|
function foo0() { return arguments.hasOwnProperty(0); }
|
||
|
assertTrue(foo0(...a));
|
||
|
|
||
|
function foo1() { return arguments.hasOwnProperty(1); }
|
||
|
assertTrue(foo1(2, ...a));
|
||
|
|
||
|
// This test pollutes the Array prototype. No more tests should be run in the
|
||
|
// same instance after this.
|
||
|
a.__proto__[0] = 1;
|
||
|
var arr2 = [...a];
|
||
|
assertEquals([1,2], arr2);
|
||
|
assertTrue(arr2.hasOwnProperty(0));
|
||
|
|
||
|
myarr1 = new MyArray1(a);
|
||
|
assertEquals(1, myarr1[0]);
|
||
|
assertTrue(myarr1.hasOwnProperty(0));
|
||
|
|
||
|
var myarr2 = new MyArray2(a);
|
||
|
assertEquals(1, myarr2[1]);
|
||
|
assertTrue(myarr2.hasOwnProperty(1));
|