neo-javascript
跨版本 JavaScript 專家技能 (ES6 - ES2025+)。支援現代前端與純 JavaScript 開發模式,涵蓋 Arrow Functions 到 Iterator Helpers 的全方位演進。
Modern JavaScript (ES6+) Expert Skill
Trigger On
- The user asks to write, debug, refactor, or review JavaScript code.
- The project directory contains
*.js,*.mjs, or JavaScript configuration files (e.g.,eslint.config.js,vite.config.js). - HTML files (
*.html) or Razor views (*.cshtml) contain inline<script>blocks or reference external.jsfiles via<script src="...">. - The target runtime is a modern browser (Chrome 80+, Firefox 78+, Safari 14+) or a pure JS environment.
- Code modernization is needed (e.g., converting
vartoconst/let, callbacks toasync/await, legacy scripts to ESM).
Workflow
- Perceive (Environment Awareness):
- Inspect ESLint / Biome configuration to identify the project's
ecmaVersionand coding conventions. - Determine runtime target: browser (check for DOM APIs, bundler config like
vite.config.js,webpack.config.js). - Detect JavaScript embedded in HTML (
*.html) or Razor views (*.cshtml): identify inline<script>blocks and external<script src="...">references. For.cshtmlfiles, note the interplay with Razor syntax (@directives,@section Scripts). - Identify the effective ES version upper limit based on the runtime/transpiler configuration (e.g., Babel targets, TypeScript
target, browserslist). For inline scripts without a build pipeline, default to the browser's native ES support.
- Inspect ESLint / Biome configuration to identify the project's
- Reason (Planning Phase):
- Evaluate the modernization level of the current code to determine the refactoring strategy.
- In environments targeting older runtimes (e.g., IE11 via Babel), avoid using features without polyfill support, but prioritize using
const/let, arrow functions, and template literals. - In modern environments (modern browsers), actively adopt new features to reduce boilerplate code.
- Be aware of browser-specific concerns (DOM manipulation, Web APIs, rendering performance).
- Act (Execution Phase):
- Write high-quality code using modern syntax to improve readability and maintainability.
- Implement immutable data patterns (spread operators,
Object.freeze,structuredClone, immutable array methods). - Utilize
async/awaitandPromisecomposition for asynchronous operations. - Prefer ESM (
import/export) as the standard module system.
- Validate (Standard Validation):
- Validate strict equality (
===) usage and absence ofvardeclarations. - Check if asynchronous operations correctly handle errors (
try/catcharoundawait,.catch()on Promises). - Ensure code avoids common security pitfalls (no
eval(), no prototype pollution, noinnerHTMLwith unsanitized input). - Verify naming conventions follow community standards (camelCase for variables/functions, PascalCase for classes).
- Validate strict equality (
Feature Roadmap (ES6 - ES2025+)
ES6 & ES2016-ES2019 (Origin)
- Arrow Functions:
(a, b) => a + bconcise function syntax with lexicalthisbinding. let/const: Block-scoped variable declarations replacingvar.- Template Literals:
`Hello, ${name}!`for string interpolation and multi-line strings. - Destructuring:
const { id, name } = user;extract values from objects and arrays. - Default / Rest / Spread: Default parameters,
...restparameters, and...spreadfor arrays/objects. - Classes:
classsyntax for prototype-based inheritance withconstructor,extends, andsuper. - Promises:
new Promise((resolve, reject) => ...)for asynchronous flow control. - Modules:
import/exportfor modular code organization (ES Modules). - Symbol / Map / Set: New primitive type and collection data structures.
- String Methods (ES6):
includes(),startsWith(),endsWith()for easier string searching. - Array Methods (ES6):
Array.from(),Array.of(),find(),findIndex()for enhanced array manipulation. - Number/Math Methods (ES6):
Number.isInteger(),Number.isNaN(),Math.trunc(),Math.sign(). - Generators & Iterators:
function*andfor...offor lazy iteration. async/await(ES2017): Syntactic sugar for Promise-based asynchronous code.- Object.values / Object.entries (ES2017): Iterate over object values and key-value pairs.
- Rest / Spread Properties (ES2018):
{ ...obj }for object shallow cloning and rest extraction. Promise.finally(ES2018): Execute cleanup logic regardless of fulfillment or rejection.- Async Iteration (ES2018):
for await...offor consuming async iterables. Array.flat/flatMap(ES2019): Flatten nested arrays and map-then-flatten in one step.Object.fromEntries(ES2019): Convert key-value pairs back into an object.- Optional Catch Binding (ES2019):
catch { }without requiring the error parameter.
ES2020 & ES2021 (Foundation)
- Optional Chaining (
?.): Safely access deeply nested properties without manual null checks. - Nullish Coalescing (
??): Provide defaults only fornull/undefined, unlike||which also catches0,"",false. BigInt: Arbitrary-precision integer arithmetic via123nliteral syntax.Promise.allSettled(): Wait for all promises to complete regardless of rejection.globalThis: Universal reference to the global object across all environments.- Dynamic
import(): Load modules conditionally or lazily at runtime. - Logical Assignment (
&&=,||=,??=): Combine logical operators with assignment for concise state updates. String.prototype.replaceAll(): Replace all occurrences without regex.Promise.any(): Resolve with the first fulfilled promise, reject only if all reject.- Numeric Separators:
1_000_000for readable large numbers.
ES2022 & ES2023 (Productivity)
- Top-level
await: Useawaitdirectly in ESM modules without wrapping in an async function. - Error Cause (
{ cause }): Chain errors to preserve root cause context. Array.at(): Negative indexing for arrays, e.g.,arr.at(-1)for the last element.Object.hasOwn(): Safer, prototype-independent property check replacinghasOwnProperty.- Class Fields: Public and private (
#field) instance fields and methods. - RegExp Match Indices (
/dflag): Get start/end positions of captured groups. - Immutable Array Methods:
toSorted(),toReversed(),toSpliced(),with()— return new arrays without mutation. Array.findLast()/findLastIndex(): Search arrays from the end.
ES2024 & ES2025+ (Cutting Edge)
Promise.withResolvers(): Destructure{ promise, resolve, reject }for cleaner deferred patterns.Object.groupBy()/Map.groupBy(): Group array elements by a classifier function.- Set Methods:
union(),intersection(),difference(),symmetricDifference(),isSubsetOf(),isSupersetOf(),isDisjointFrom(). - Iterator Helpers:
.map(),.filter(),.take(),.drop(),.flatMap(),.toArray()on iterators. RegExp.escape(): Safely escape special characters for use in RegExp construction.- Import Attributes:
import data from './data.json' with { type: 'json' }. - Decorators (Stage 3): Class and method decorators for cross-cutting concerns.
Promise.try(): Safely start a promise chain from a synchronous or asynchronous function.- Well-formed Unicode Strings:
String.prototype.isWellFormed()andtoWellFormed(). - Temporal API (Stage 3): A modern replacement for the
Dateobject, providing robust date/time arithmetic. - Explicit Resource Management (Stage 3):
usingkeyword withSymbol.disposefor deterministic cleanup.
Coding Standards
- Variable Declarations: Always use
constby default; useletonly when reassignment is necessary. Never usevar. - Modules: Use ESM (
import/export) as the default module system. Useimport()for dynamic/lazy loading. - Immutability: Prefer non-mutating array methods (
toSorted,toReversed,with), spread operators, andstructuredClonefor deep copies. - Async Safety: Always wrap
awaitintry/catchor chain.catch(). Never leave Promises unhandled. UseAbortControllerfor cancellable operations.
Deliver
- Runtime-Optimized Code: Provide the most appropriate modern syntax code based on the target runtime and ES version.
- Modernization Insights: Provide specific refactoring suggestions for upgrading from older JavaScript syntax to new features (e.g., from callbacks to
async/await, fromvartoconst/let). - Syntax Explanations: Clearly explain the design intent and advantages behind the modern JavaScript features used.
Validate
- Ensure the provided code complies with the syntax specifications of the target ES version and runtime.
- Validate whether the code follows JavaScript best practices for error handling, null safety, and immutability.
- Confirm the code has good readability and modern conventions (e.g., proper use of destructuring, template literals, ESM).