Repository: mdn/content
Pull request #39643: Lint: use concise assignment operators
Author: login: Josh-Cena
Labels: name: Content:WebAPI
description: Web API docs
name: Content:JS
description: JavaScript docs
name: Content:Games
description: Games docs
name: size/m
description: [PR only] 51-500 LoC changed
Created: 2025-05-23T09:06:09Z | Merged: 2025-05-23T12:38:33Z

Prefer `a += b` to `a = a + b` for more concise and less bug-prone code.


Diff:
diff --git a/files/en-us/games/tutorials/2d_breakout_game_pure_javascript/build_the_brick_field/index.md b/files/en-us/games/tutorials/2d_breakout_game_pure_javascript/build_the_brick_field/index.md
index 00cc07661732299..dfc73c1ee112ee4 100644
--- a/files/en-us/games/tutorials/2d_breakout_game_pure_javascript/build_the_brick_field/index.md
+++ b/files/en-us/games/tutorials/2d_breakout_game_pure_javascript/build_the_brick_field/index.md
@@ -215,7 +215,7 @@ function draw() {
     dy = -dy;
   } else if (y + dy > canvas.height - ballRadius) {
     if (x > paddleX && x < paddleX + paddleWidth) {
-      if ((y = y - paddleHeight)) {
+      if ((y -= paddleHeight)) {
         dy = -dy;
       }
     } else {
diff --git a/files/en-us/games/tutorials/2d_breakout_game_pure_javascript/collision_detection/index.md b/files/en-us/games/tutorials/2d_breakout_game_pure_javascript/collision_detection/index.md
index 8ab33f0dc8f9f74..c89c253eaad48b0 100644
--- a/files/en-us/games/tutorials/2d_breakout_game_pure_javascript/collision_detection/index.md
+++ b/files/en-us/games/tutorials/2d_breakout_game_pure_javascript/collision_detection/index.md
@@ -258,7 +258,7 @@ function draw() {
     dy = -dy;
   } else if (y + dy > canvas.height - ballRadius) {
     if (x > paddleX && x < paddleX + paddleWidth) {
-      if ((y = y - paddleHeight)) {
+      if ((y -= paddleHeight)) {
         dy = -dy;
       }
     } else {
diff --git a/files/en-us/web/api/fetch_api/using_fetch/index.md b/files/en-us/web/api/fetch_api/using_fetch/index.md
index a7ba332a3c6a5c7..ace06d6e4ea0a32 100644
--- a/files/en-us/web/api/fetch_api/using_fetch/index.md
+++ b/files/en-us/web/api/fetch_api/using_fetch/index.md
@@ -494,10 +494,9 @@ async function* makeTextFileLineIterator(fileURL) {
   const response = await fetch(fileURL);
   const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
 
-  let { value: chunk, done: readerDone } = await reader.read();
-  chunk = chunk || "";
+  let { value: chunk = "", done: readerDone } = await reader.read();
 
-  const newline = /\r?\n/gm;
+  const newline = /\r?\n/g;
   let startIndex = 0;
 
   while (true) {
diff --git a/files/en-us/web/api/htmltablecellelement/colspan/index.md b/files/en-us/web/api/htmltablecellelement/colspan/index.md
index 433ea6ad5884bc3..d03775cde1a909f 100644
--- a/files/en-us/web/api/htmltablecellelement/colspan/index.md
+++ b/files/en-us/web/api/htmltablecellelement/colspan/index.md
@@ -82,14 +82,14 @@ const increaseButton = document.getElementById("increase");
 const decreaseButton = document.getElementById("decrease");
 
 increaseButton.addEventListener("click", () => {
-  cell.colSpan = cell.colSpan + 1;
+  cell.colSpan += 1;
 
   // Update the display
   output.textContent = cell.colSpan;
 });
 
 decreaseButton.addEventListener("click", () => {
-  cell.colSpan = cell.colSpan - 1;
+  cell.colSpan -= 1;
 
   // Update the display
   output.textContent = cell.colSpan;
diff --git a/files/en-us/web/api/htmltablecellelement/rowspan/index.md b/files/en-us/web/api/htmltablecellelement/rowspan/index.md
index 627933c9a8d9ba5..6eef2be32021287 100644
--- a/files/en-us/web/api/htmltablecellelement/rowspan/index.md
+++ b/files/en-us/web/api/htmltablecellelement/rowspan/index.md
@@ -83,14 +83,14 @@ const increaseButton = document.getElementById("increase");
 const decreaseButton = document.getElementById("decrease");
 
 increaseButton.addEventListener("click", () => {
-  cell.rowSpan = cell.rowSpan + 1;
+  cell.rowSpan += 1;
 
   // Update the display
   output.textContent = cell.rowSpan;
 });
 
 decreaseButton.addEventListener("click", () => {
-  cell.rowSpan = cell.rowSpan - 1;
+  cell.rowSpan -= 1;
 
   // Update the display
   output.textContent = `${cell.rowSpan == 0 ? "all remaining" : cell.rowSpan}`;
diff --git a/files/en-us/web/api/htmltablecolelement/span/index.md b/files/en-us/web/api/htmltablecolelement/span/index.md
index fa6b8893eeab8a0..d3fbd2282d958d7 100644
--- a/files/en-us/web/api/htmltablecolelement/span/index.md
+++ b/files/en-us/web/api/htmltablecolelement/span/index.md
@@ -86,14 +86,14 @@ const increaseButton = document.getElementById("increase");
 const decreaseButton = document.getElementById("decrease");
 
 increaseButton.addEventListener("click", () => {
-  col.span = col.span + 1;
+  col.span += 1;
 
   // Update the display
   output.textContent = col.span;
 });
 
 decreaseButton.addEventListener("click", () => {
-  col.span = col.span - 1;
+  col.span -= 1;
 
   // Update the display
   output.textContent = col.span;
diff --git a/files/en-us/web/api/mutationrecord/addednodes/index.md b/files/en-us/web/api/mutationrecord/addednodes/index.md
index dc94a5ba1a3a9c2..b0a8dcf32f202ae 100644
--- a/files/en-us/web/api/mutationrecord/addednodes/index.md
+++ b/files/en-us/web/api/mutationrecord/addednodes/index.md
@@ -69,7 +69,7 @@ function logNewNodes(records) {
   for (const record of records) {
     // Check if the childlist of the target node has been mutated
     if (record.type === "childList") {
-      totalAddedNodes = totalAddedNodes + record.addedNodes.length;
+      totalAddedNodes += record.addedNodes.length;
       // Log the number of nodes added
       counter.textContent = `Total added nodes: ${totalAddedNodes}`;
     }
diff --git a/files/en-us/web/api/mutationrecord/removednodes/index.md b/files/en-us/web/api/mutationrecord/removednodes/index.md
index 3d7bc2b325de3e1..e68d0cc96a3bafe 100644
--- a/files/en-us/web/api/mutationrecord/removednodes/index.md
+++ b/files/en-us/web/api/mutationrecord/removednodes/index.md
@@ -69,7 +69,7 @@ function logRemovedNodes(records) {
   for (const record of records) {
     // Check if the childlist of the target node has been mutated
     if (record.type === "childList") {
-      totalRemovedNodes = totalRemovedNodes + record.removedNodes.length;
+      totalRemovedNodes += record.removedNodes.length;
       // Log the number of nodes added
       counter.textContent = `Total removed nodes: ${totalRemovedNodes}`;
     }
diff --git a/files/en-us/web/api/web_audio_api/simple_synth/index.md b/files/en-us/web/api/web_audio_api/simple_synth/index.md
index 33a2231dff3155a..5d45adf8ebaca5e 100644
--- a/files/en-us/web/api/web_audio_api/simple_synth/index.md
+++ b/files/en-us/web/api/web_audio_api/simple_synth/index.md
@@ -397,22 +397,6 @@ With this table in place, we can find out the frequency for a given note in a pa
 > [!NOTE]
 > The values in the example table above have been rounded to two decimal places.
 
-```js hidden
-if (!Object.entries) {
-  Object.entries = function entries(O) {
-    return reduce(
-      keys(O),
-      (e, k) =>
-        concat(
-          e,
-          typeof k === "string" && isEnumerable(O, k) ? [[k, O[k]]] : [],
-        ),
-      [],
-    );
-  };
-}
-```
-
 ### Building the keyboard
 
 The `setup()` function is responsible for building the keyboard and preparing the app to play music.
diff --git a/files/en-us/web/api/webgl_api/webgl_best_practices/index.md b/files/en-us/web/api/webgl_api/webgl_best_practices/index.md
index 4fdec9d0a610640..b73bf1fe7962494 100644
--- a/files/en-us/web/api/webgl_api/webgl_best_practices/index.md
+++ b/files/en-us/web/api/webgl_api/webgl_best_practices/index.md
@@ -587,30 +587,28 @@ Demo: [Device pixel presnap](https://kdashg.github.io/misc/webgl/device-pixel-pr
 
 ## ResizeObserver and 'device-pixel-content-box'
 
-On supporting browsers (Chromium?), `ResizeObserver` can be used with `'device-pixel-content-box'` to request a callback that includes the true {{glossary("device pixel")}} size of an element. This can be used to build an async-but-accurate function:
+On [supporting browsers](/en-US/docs/Web/API/ResizeObserverEntry/devicePixelContentBoxSize#browser_compatibility), `ResizeObserver` can be used with `'device-pixel-content-box'` to request a callback that includes the true {{glossary("device pixel")}} size of an element. This can be used to build an async-but-accurate function:
 
 ```js
-window.getDevicePixelSize =
-  window.getDevicePixelSize ||
-  (async (elem) => {
-    await new Promise((resolve) => {
-      const observer = new ResizeObserver(([cur]) => {
-        if (!cur) {
-          throw new Error(
-            `device-pixel-content-box not observed for elem ${elem}`,
-          );
-        }
-        const devSize = cur.devicePixelContentBoxSize;
-        const ret = {
-          width: devSize[0].inlineSize,
-          height: devSize[0].blockSize,
-        };
-        resolve(ret);
-        observer.disconnect();
-      });
-      observer.observe(elem, { box: "device-pixel-content-box" });
+function getDevicePixelSize(elem) {
+  return new Promise((resolve) => {
+    const observer = new ResizeObserver(([cur]) => {
+      if (!cur) {
+        throw new Error(
+          `device-pixel-content-box not observed for elem ${elem}`,
+        );
+      }
+      const devSize = cur.devicePixelContentBoxSize;
+      const ret = {
+        width: devSize[0].inlineSize,
+        height: devSize[0].blockSize,
+      };
+      resolve(ret);
+      observer.disconnect();
     });
+    observer.observe(elem, { box: "device-pixel-content-box" });
   });
+}
 ```
 
 Please refer to [the specification](https://www.w3.org/TR/resize-observer/#resize-observer-interface) for more details.
diff --git a/files/en-us/web/javascript/reference/errors/invalid_array_length/index.md b/files/en-us/web/javascript/reference/errors/invalid_array_length/index.md
index 58795434d79f08c..bba188464bb1aab 100644
--- a/files/en-us/web/javascript/reference/errors/invalid_array_length/index.md
+++ b/files/en-us/web/javascript/reference/errors/invalid_array_length/index.md
@@ -50,10 +50,10 @@ new ArrayBuffer(Math.pow(2, 32)); // 32-bit system
 new ArrayBuffer(-1);
 
 const a = [];
-a.length = a.length - 1; // set the length property to -1
+a.length -= 1; // set the length property to -1
 
 const b = new Array(Math.pow(2, 32) - 1);
-b.length = b.length + 1; // set the length property to 2^32
+b.length += 1; // set the length property to 2^32
 b.length = 2.5; // set the length property to a floating-point number
 
 const c = new Array(2.5); // pass a floating-point number
diff --git a/files/en-us/web/javascript/reference/global_objects/asyncgeneratorfunction/index.md b/files/en-us/web/javascript/reference/global_objects/asyncgeneratorfunction/index.md
index aca6913198a0e92..5c2549aff347870 100644
--- a/files/en-us/web/javascript/reference/global_objects/asyncgeneratorfunction/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/asyncgeneratorfunction/index.md
@@ -32,7 +32,7 @@ let str = "";
 
 async function generate() {
   for await (const val of foo()) {
-    str = str + val;
+    str += val;
   }
   console.log(str);
 }
diff --git a/files/en-us/web/javascript/reference/global_objects/generatorfunction/index.md b/files/en-us/web/javascript/reference/global_objects/generatorfunction/index.md
index e6f7c798005bfa7..b0f79cff330dfd7 100644
--- a/files/en-us/web/javascript/reference/global_objects/generatorfunction/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/generatorfunction/index.md
@@ -30,7 +30,7 @@ const foo = new GeneratorFunction(`
 
 let str = "";
 for (const val of foo()) {
-  str = str + val;
+  str += val;
 }
 
 console.log(str);
diff --git a/files/en-us/web/javascript/reference/global_objects/object/defineproperty/index.md b/files/en-us/web/javascript/reference/global_objects/object/defineproperty/index.md
index 41970038c8d0e8a..e3e4632dc5c87fa 100644
--- a/files/en-us/web/javascript/reference/global_objects/object/defineproperty/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/object/defineproperty/index.md
@@ -101,29 +101,9 @@ Object.defineProperty(obj, "key2", {
   value: "static",
 });
 
-// 3. Recycling same object
-function withValue(value) {
-  const d =
-    withValue.d ||
-    (withValue.d = {
-      enumerable: false,
-      writable: false,
-      configurable: false,
-      value,
-    });
-
-  // avoiding duplicate operation for assigning value
-  if (d.value !== value) d.value = value;
-
-  return d;
-}
-// and
-Object.defineProperty(obj, "key", withValue("static"));
-
-// if freeze is available, prevents adding or
-// removing the object prototype properties
+// 3. Prevents adding or removing the object prototype properties
 // (value, get, set, enumerable, writable, configurable)
-(Object.freeze || Object)(Object.prototype);
+Object.freeze(Object.prototype);
 ```
 
 When the property already exists, `Object.defineProperty()` attempts to modify the property according to the values in the descriptor and the property's current configuration.
diff --git a/files/en-us/web/javascript/reference/operators/async_function_star_/index.md b/files/en-us/web/javascript/reference/operators/async_function_star_/index.md
index 6fccae6eb2c1595..f6a7b4b6b7dc9e1 100644
--- a/files/en-us/web/javascript/reference/operators/async_function_star_/index.md
+++ b/files/en-us/web/javascript/reference/operators/async_function_star_/index.md
@@ -17,7 +17,7 @@ You can also define async generator functions using the [`async function*` decla
 async function joinAll(generator) {
   let str = "";
   for await (const val of generator()) {
-    str = str + val;
+    str += val;
   }
   return str;
 }
diff --git a/files/en-us/web/javascript/reference/operators/function_star_/index.md b/files/en-us/web/javascript/reference/operators/function_star_/index.md
index e7fbdde06a5767d..329c435dfef9079 100644
--- a/files/en-us/web/javascript/reference/operators/function_star_/index.md
+++ b/files/en-us/web/javascript/reference/operators/function_star_/index.md
@@ -22,7 +22,7 @@ const foo = function* () {
 
 let str = "";
 for (const val of foo()) {
-  str = str + val;
+  str += val;
 }
 
 console.log(str);
diff --git a/files/en-us/web/javascript/reference/statements/async_function_star_/index.md b/files/en-us/web/javascript/reference/statements/async_function_star_/index.md
index 961815c93b7fac7..df6bf21c40b8dbb 100644
--- a/files/en-us/web/javascript/reference/statements/async_function_star_/index.md
+++ b/files/en-us/web/javascript/reference/statements/async_function_star_/index.md
@@ -24,7 +24,7 @@ let str = "";
 
 async function generate() {
   for await (const val of foo()) {
-    str = str + val;
+    str += val;
   }
   console.log(str);
 }
diff --git a/files/en-us/web/javascript/reference/statements/break/index.md b/files/en-us/web/javascript/reference/statements/break/index.md
index 00a2b44608542ba..7509905a5740373 100644
--- a/files/en-us/web/javascript/reference/statements/break/index.md
+++ b/files/en-us/web/javascript/reference/statements/break/index.md
@@ -18,7 +18,7 @@ while (i < 6) {
   if (i === 3) {
     break;
   }
-  i = i + 1;
+  i += 1;
 }
 
 console.log(i);
diff --git a/files/en-us/web/javascript/reference/statements/continue/index.md b/files/en-us/web/javascript/reference/statements/continue/index.md
index 94fc80d87e91145..7dc093ff7d777d1 100644
--- a/files/en-us/web/javascript/reference/statements/continue/index.md
+++ b/files/en-us/web/javascript/reference/statements/continue/index.md
@@ -18,7 +18,7 @@ for (let i = 0; i < 10; i++) {
   if (i === 3) {
     continue;
   }
-  text = text + i;
+  text += i;
 }
 
 console.log(text);
diff --git a/files/en-us/web/javascript/reference/statements/do...while/index.md b/files/en-us/web/javascript/reference/statements/do...while/index.md
index 7a32a91b2fd2b93..755828a4c7f075e 100644
--- a/files/en-us/web/javascript/reference/statements/do...while/index.md
+++ b/files/en-us/web/javascript/reference/statements/do...while/index.md
@@ -16,8 +16,8 @@ let result = "";
 let i = 0;
 
 do {
-  i = i + 1;
-  result = result + i;
+  i += 1;
+  result += i;
 } while (i < 5);
 
 console.log(result);
diff --git a/files/en-us/web/javascript/reference/statements/for/index.md b/files/en-us/web/javascript/reference/statements/for/index.md
index 530cd364be950ca..2f88eaddc36be05 100644
--- a/files/en-us/web/javascript/reference/statements/for/index.md
+++ b/files/en-us/web/javascript/reference/statements/for/index.md
@@ -15,7 +15,7 @@ The **`for`** statement creates a loop that consists of three optional expressio
 let str = "";
 
 for (let i = 0; i < 9; i++) {
-  str = str + i;
+  str += i;
 }
 
 console.log(str);
diff --git a/files/en-us/web/javascript/reference/statements/label/index.md b/files/en-us/web/javascript/reference/statements/label/index.md
index 49a315509009531..696cdf778f4ef64 100644
--- a/files/en-us/web/javascript/reference/statements/label/index.md
+++ b/files/en-us/web/javascript/reference/statements/label/index.md
@@ -18,7 +18,7 @@ loop1: for (let i = 0; i < 5; i++) {
   if (i === 1) {
     continue loop1;
   }
-  str = str + i;
+  str += i;
 }
 
 console.log(str);


Reviews:
user: login: bsmth
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-23T11:34:22Z
user: login: bsmth
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-23T11:39:33Z
user: login: Josh-Cena
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-23T11:40:47Z
user: login: bsmth
body: Good to go IMO. I'd be curious about learners seeing `+=` as I can imagine 'thing = thing plus other' is easier to digest, but let's see if there's any comments.
state: APPROVED
author_association: MEMBER
submitted_at: 2025-05-23T11:41:39Z
user: login: Josh-Cena
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-23T11:41:45Z
user: login: bsmth
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-23T11:48:54Z

Review comments:
diff_hunk: @@ -590,27 +590,25 @@ Demo: [Device pixel presnap](https://kdashg.github.io/misc/webgl/device-pixel-pr
 On supporting browsers (Chromium?), `ResizeObserver` can be used with `'device-pixel-content-box'` to request a callback that includes the true {{glossary("device pixel")}} size of an element. This can be used to build an async-but-accurate function:
path: files/en-us/web/api/webgl_api/webgl_best_practices/index.md
user: login: bsmth
body: Link to https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry/devicePixelContentBoxSize#browser_compatibility instead?

```suggestion
On supporting browsers, `ResizeObserver` can be used with `'device-pixel-content-box'` to request a callback that includes the true {{glossary("device pixel")}} size of an element. This can be used to build an async-but-accurate function:
```
created_at: 2025-05-23T11:34:22Z
author_association: MEMBER
diff_hunk: @@ -15,7 +15,7 @@ The **`for`** statement creates a loop that consists of three optional expressio
 let str = "";
 
 for (let i = 0; i < 9; i++) {
-  str = str + i;
path: files/en-us/web/javascript/reference/statements/for/index.md
user: login: bsmth
body: This might be easier for beginners to understand, but I think `+=` is also good to learn. Something to consider.
created_at: 2025-05-23T11:39:32Z
author_association: MEMBER
diff_hunk: @@ -590,27 +590,25 @@ Demo: [Device pixel presnap](https://kdashg.github.io/misc/webgl/device-pixel-pr
 On supporting browsers (Chromium?), `ResizeObserver` can be used with `'device-pixel-content-box'` to request a callback that includes the true {{glossary("device pixel")}} size of an element. This can be used to build an async-but-accurate function:
path: files/en-us/web/api/webgl_api/webgl_best_practices/index.md
user: login: Josh-Cena
body: ```suggestion
On [supporting browsers](/en-US/docs/Web/API/ResizeObserverEntry/devicePixelContentBoxSize#browser_compatibility), `ResizeObserver` can be used with `'device-pixel-content-box'` to request a callback that includes the true {{glossary("device pixel")}} size of an element. This can be used to build an async-but-accurate function:
```
created_at: 2025-05-23T11:40:47Z
author_association: MEMBER
diff_hunk: @@ -15,7 +15,7 @@ The **`for`** statement creates a loop that consists of three optional expressio
 let str = "";
 
 for (let i = 0; i < 9; i++) {
-  str = str + i;
path: files/en-us/web/javascript/reference/statements/for/index.md
user: login: Josh-Cena
body: OK but this is a reference page, so we can assume "no beginners"
created_at: 2025-05-23T11:41:45Z
author_association: MEMBER
diff_hunk: @@ -15,7 +15,7 @@ The **`for`** statement creates a loop that consists of three optional expressio
 let str = "";
 
 for (let i = 0; i < 9; i++) {
-  str = str + i;
path: files/en-us/web/javascript/reference/statements/for/index.md
user: login: bsmth
body: I think I'm 50/50 on that - I can imagine there's people landing here learning JS as a first language not knowing what for loops are. My 2c, but not blocking.
created_at: 2025-05-23T11:48:54Z
author_association: MEMBER

PR comments:
user: login: github-actions[bot]
created_at: 2025-05-23T09:08:15Z
body: <!-- build_hash: 200e25bc94b07977ce08a709c74950cb date: 2025-05-23T11:43:34.574Z -->

<details><summary><b>Preview URLs</b> (22 pages)</summary>

- [`/en-US/docs/Games/Tutorials/2D_Breakout_game_pure_JavaScript/Build_the_brick_field`](https://pr39643.review.mdn.allizom.net/en-US/docs/Games/Tutorials/2D_Breakout_game_pure_JavaScript/Build_the_brick_field)
- [`/en-US/docs/Games/Tutorials/2D_Breakout_game_pure_JavaScript/Collision_detection`](https://pr39643.review.mdn.allizom.net/en-US/docs/Games/Tutorials/2D_Breakout_game_pure_JavaScript/Collision_detection)
- [`/en-US/docs/Web/API/Fetch_API/Using_Fetch`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/API/Fetch_API/Using_Fetch)
- [`/en-US/docs/Web/API/HTMLTableCellElement/colSpan`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/API/HTMLTableCellElement/colSpan)
- [`/en-US/docs/Web/API/HTMLTableCellElement/rowSpan`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/API/HTMLTableCellElement/rowSpan)
- [`/en-US/docs/Web/API/HTMLTableColElement/span`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/API/HTMLTableColElement/span)
- [`/en-US/docs/Web/API/MutationRecord/addedNodes`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/API/MutationRecord/addedNodes)
- [`/en-US/docs/Web/API/MutationRecord/removedNodes`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/API/MutationRecord/removedNodes)
- [`/en-US/docs/Web/API/WebGL_API/WebGL_best_practices`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/API/WebGL_API/WebGL_best_practices)
- [`/en-US/docs/Web/API/Web_Audio_API/Simple_synth`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/API/Web_Audio_API/Simple_synth)
- [`/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length)
- [`/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncGeneratorFunction`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncGeneratorFunction)
- [`/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction)
- [`/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)
- [`/en-US/docs/Web/JavaScript/Reference/Operators/async_function*`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/JavaScript/Reference/Operators/async_function*)
- [`/en-US/docs/Web/JavaScript/Reference/Operators/function*`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/JavaScript/Reference/Operators/function*)
- [`/en-US/docs/Web/JavaScript/Reference/Statements/async_function*`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/JavaScript/Reference/Statements/async_function*)
- [`/en-US/docs/Web/JavaScript/Reference/Statements/break`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/JavaScript/Reference/Statements/break)
- [`/en-US/docs/Web/JavaScript/Reference/Statements/continue`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/JavaScript/Reference/Statements/continue)
- [`/en-US/docs/Web/JavaScript/Reference/Statements/do...while`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/JavaScript/Reference/Statements/do...while)
- [`/en-US/docs/Web/JavaScript/Reference/Statements/for`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/JavaScript/Reference/Statements/for)
- [`/en-US/docs/Web/JavaScript/Reference/Statements/label`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/JavaScript/Reference/Statements/label)

</details>


<details><summary><b>Flaws</b> (9)</summary>

Note! *19 documents with no flaws that don't need to be listed. 🎉*

URL: [`/en-US/docs/Games/Tutorials/2D_Breakout_game_pure_JavaScript/Build_the_brick_field`](https://pr39643.review.mdn.allizom.net/en-US/docs/Games/Tutorials/2D_Breakout_game_pure_JavaScript/Build_the_brick_field)
Title: `Build the brick field`
Flaw count: 4

- **macros**:
  - `Macro produces link /en-US/docs/Games/Workflows/2D_Breakout_game_pure_JavaScript/Game_over which is a redirect`
  - `Macro produces link /en-US/docs/Games/Workflows/2D_Breakout_game_pure_JavaScript/Collision_detection which is a redirect`
  - `Macro produces link /en-US/docs/Games/Workflows/2D_Breakout_game_pure_JavaScript/Game_over which is a redirect`
  - `Macro produces link /en-US/docs/Games/Workflows/2D_Breakout_game_pure_JavaScript/Collision_detection which is a redirect`

---

URL: [`/en-US/docs/Games/Tutorials/2D_Breakout_game_pure_JavaScript/Collision_detection`](https://pr39643.review.mdn.allizom.net/en-US/docs/Games/Tutorials/2D_Breakout_game_pure_JavaScript/Collision_detection)
Title: `Collision detection`
Flaw count: 4

- **macros**:
  - `Macro produces link /en-US/docs/Games/Workflows/2D_Breakout_game_pure_JavaScript/Build_the_brick_field which is a redirect`
  - `Macro produces link /en-US/docs/Games/Workflows/2D_Breakout_game_pure_JavaScript/Track_the_score_and_win which is a redirect`
  - `Macro produces link /en-US/docs/Games/Workflows/2D_Breakout_game_pure_JavaScript/Build_the_brick_field which is a redirect`
  - `Macro produces link /en-US/docs/Games/Workflows/2D_Breakout_game_pure_JavaScript/Track_the_score_and_win which is a redirect`

---

URL: [`/en-US/docs/Web/API/Web_Audio_API/Simple_synth`](https://pr39643.review.mdn.allizom.net/en-US/docs/Web/API/Web_Audio_API/Simple_synth)
Title: `Example and tutorial: Simple synth keyboard`
Flaw count: 1

- **macros**:
  - `Macro produces link /en-US/docs/Web/API/Web_Audio_API/Tools which is a redirect`

</details>

*(comment last updated: 2025-05-23 11:43:34)*
author_association: CONTRIBUTOR
user: login: Josh-Cena
created_at: 2025-05-23T11:43:22Z
body: I'm conscious to avoid changing beginner pages (mostly learning docs and guides), and I believe what I touched here are already technical enough that compound assignment should be basic knowledge.
author_association: MEMBER
user: login: bsmth
created_at: 2025-05-23T11:45:25Z
body: > I'm conscious to avoid changing beginner pages (mostly learning docs and guides), and I believe what I touched here are already technical enough that compound assignment should be basic knowledge.

Agree this is a good balance 👍🏻 
author_association: MEMBER