
Object Control in JavaScript: defineProperties()
Object.defineProperties() gives you fine‑grained control over JavaScript objects. This guide covers descriptors, defaults, and practical use cases.
Articles
When I started in web development (twenty‑three years ago), cross‑browser compatibility was a hot topic. Many days and hours were lost cursing Microsoft for interpreting the specs differently to other browsers, and a lot of money could be made if you were fluent in these issues. Nowadays, these issues tend to stem more from differing levels of compatibility with new JavaScript features (with iOS Safari being a prime suspect), rather than with CSS.
Below you will find a subset of articles from my blog specifically about Cross‑Browser Compatibility. This is an area that I have worked with for many years, and have managed to write about quite a few times. There are twenty‑three collected together for you below.

defineProperties()Object.defineProperties() gives you fine‑grained control over JavaScript objects. This guide covers descriptors, defaults, and practical use cases.

call() Method in JavaScriptUncover the capabilities of JavaScript's `call()` for invoking functions with a custom context, a key technique for effective function and method management.

instanceofUncover the differences between JavaScript's `instanceof` and `typeof` for type checking, with practical examples and insights on when to use each operator.

.then() in Modern JavaScript.then() still matters in modern JavaScript. This guide explains promise chaining, return values, and why Promise.prototype.then() remains useful.

vh and vwCreate custom viewport units with CSS variables and JavaScript to avoid mobile 100vh bugs caused by browser chrome, keyboards, and visible height changes.

setInterval()A discussion about using JavaScript's setInterval for repetitive tasks. Manage intervals effectively and understand best practices for time‑bound executions.

prototype.apply() in JavaScriptUnderstand Function.prototype.apply() in JavaScript, including this binding, array‑like arguments, call() differences, dynamic invocation, and modern use cases.

hasOwnProperty() MethodDiscover JavaScript's `hasOwnProperty()` for checking an object's own properties, an essential method for accurate and reliable object property iteration.

Prototype.bind()Explore JavaScript's `Prototype.bind()` method to master function contexts and argument handling, enhancing your code's flexibility and reliability.

defineProperty()Unlock the capabilities of JavaScript's `Object.defineProperty()` for precise property control on objects, enhancing security and data integrity in your code.

setTimeout() in JavaScriptAn exploration of JavaScript's `setTimeout` function. Understand its nuances in component lifecycles, and learn effective timing strategies using it.
Progressive enhancement in web development is often misunderstood: it allows us to take advantage of more modern browsers, without penalising the older ones.

Now used as almost trivial marketing buzz words, there really are significant differences between responsive and adaptive design and development techniques.

p Tags from Contentful List ItemsOne of the quirks of rendering Rich Text from Contentful is that list items come wrapped in paragraph <p> tags. Fortunately, this is a simple one to resolve.

Keep CSS focus styles accessible without showing outlines after every mouse click, using keyboard‑only patterns, :focus‑visible thinking, and UX trade‑offs.

User‑select makes stopping visitors from selecting items on‑page easy, and can be combined with ::selection to capture the browsers where user‑select is absent.

Conditional comments were once the standard way to target Internet Explorer. This guide shows how the non‑IE pattern works and where it catches people out.

The JavaScript event loop manages asynchronous tasks in a single‑threaded environment. I explore how it works with the call stack, task queue, and microtasks.