object-spread.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. load("test-common.js");
  2. function testObjSpread(obj) {
  3. return obj.foo === 0 &&
  4. obj.bar === 1 &&
  5. obj.baz === 2 &&
  6. obj.qux === 3;
  7. }
  8. function testObjStrSpread(obj) {
  9. return obj[0] === "a" &&
  10. obj[1] === "b" &&
  11. obj[2] === "c" &&
  12. obj[3] === "d";
  13. }
  14. try {
  15. let obj = {
  16. foo: 0,
  17. ...{ bar: 1, baz: 2 },
  18. qux: 3,
  19. };
  20. assert(testObjSpread(obj));
  21. obj = { foo: 0, bar: 1, baz: 2 };
  22. obj.qux = 3;
  23. assert(testObjSpread({ ...obj }));
  24. let a = { bar: 1, baz: 2 };
  25. obj = { foo: 0, ...a, qux: 3 };
  26. assert(testObjSpread(obj));
  27. obj = {
  28. ...{},
  29. ...{
  30. ...{ foo: 0, bar: 1, baz: 2 },
  31. },
  32. qux: 3,
  33. };
  34. assert(testObjSpread(obj));
  35. obj = { ..."abcd" };
  36. assert(testObjStrSpread(obj));
  37. obj = { ...["a", "b", "c", "d"] };
  38. assert(testObjStrSpread(obj));
  39. obj = { ...String("abcd") };
  40. assert(testObjStrSpread(obj));
  41. a = { foo: 0 };
  42. Object.defineProperty(a, 'bar', {
  43. value: 1,
  44. enumerable: false,
  45. });
  46. obj = { ...a };
  47. assert(obj.foo === 0 && obj.bar === undefined);
  48. let empty = ({
  49. ...undefined,
  50. ...null,
  51. ...1,
  52. ...true,
  53. ...function(){},
  54. ...Date,
  55. });
  56. assert(Object.getOwnPropertyNames(empty).length === 0);
  57. console.log("PASS");
  58. } catch (e) {
  59. console.log("FAIL: " + e);
  60. }