function-default-parameters.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. load("test-common.js");
  2. try {
  3. function func1(a, b = 1) {
  4. return a + b;
  5. }
  6. const arrowFunc1 = (a, b = 1) => a + b;
  7. assert(func1(4, 5) === 9);
  8. assert(func1(4) === 5);
  9. assert(func1(4, undefined) === 5);
  10. assert(Number.isNaN(func1()));
  11. assert(arrowFunc1(4, 5) === 9);
  12. assert(arrowFunc1(4) === 5);
  13. assert(arrowFunc1(4, undefined) === 5);
  14. assert(Number.isNaN(arrowFunc1()));
  15. function func2(a = 6) {
  16. return typeof a;
  17. }
  18. const arrowFunc2 = (a = 6) => typeof a;
  19. assert(func2() === "number");
  20. assert(func2(5) === "number");
  21. assert(func2(undefined) === "number");
  22. assert(func2(false) === "boolean");
  23. assert(func2(null) === "object");
  24. assert(func2({}) === "object");
  25. assert(arrowFunc2() === "number");
  26. assert(arrowFunc2(5) === "number");
  27. assert(arrowFunc2(undefined) === "number");
  28. assert(arrowFunc2(false) === "boolean");
  29. assert(arrowFunc2(null) === "object");
  30. assert(arrowFunc2({}) === "object");
  31. function func3(a = 5, b) {
  32. return a + b;
  33. }
  34. const arrowFunc3 = (a = 5, b) => a + b;
  35. assert(func3(4, 5) === 9);
  36. assert(func3(undefined, 4) === 9);
  37. assert(Number.isNaN(func3()));
  38. assert(arrowFunc3(4, 5) === 9);
  39. assert(arrowFunc3(undefined, 4) === 9);
  40. assert(Number.isNaN(arrowFunc3()));
  41. function func4(a, b = a) {
  42. return a + b;
  43. }
  44. const arrowFunc4 = (a, b = a) => a + b;
  45. assert(func4(4, 5) === 9);
  46. assert(func4(4) === 8);
  47. assert(func4("hf") === "hfhf");
  48. assert(func4(true) === 2);
  49. assert(Number.isNaN(func4()));
  50. assert(arrowFunc4(4, 5) === 9);
  51. assert(arrowFunc4(4) === 8);
  52. assert(arrowFunc4("hf") === "hfhf");
  53. assert(arrowFunc4(true) === 2);
  54. assert(Number.isNaN(arrowFunc4()));
  55. function func5(a = function() { return 5; }) {
  56. return a();
  57. }
  58. const arrowFunc5 = (a = function() { return 5; }) => a();
  59. assert(func5() === 5);
  60. assert(func5(function() { return 10; }) === 10);
  61. assert(func5(() => 10) === 10);
  62. assert(arrowFunc5() === 5);
  63. assert(arrowFunc5(function() { return 10; }) === 10);
  64. assert(arrowFunc5(() => 10) === 10);
  65. function func6(a = () => 5) {
  66. return a();
  67. }
  68. const arrowFunc6 = (a = () => 5) => a();
  69. assert(func6() === 5);
  70. assert(func6(function() { return 10; }) === 10);
  71. assert(func6(() => 10) === 10);
  72. assert(arrowFunc6() === 5);
  73. assert(arrowFunc6(function() { return 10; }) === 10);
  74. assert(arrowFunc6(() => 10) === 10);
  75. function func7(a = { foo: "bar" }) {
  76. return a.foo;
  77. }
  78. const arrowFunc7 = (a = { foo: "bar" }) => a.foo
  79. assert(func7() === "bar");
  80. assert(func7({ foo: "baz" }) === "baz");
  81. assert(arrowFunc7() === "bar");
  82. assert(arrowFunc7({ foo: "baz" }) === "baz");
  83. console.log("PASS");
  84. } catch (e) {
  85. console.log("FAIL: " + e);
  86. }