Java Script

BigInt 数据类型:BigInt 是 ES2020 中新增的数据类型,用于表示任意精度的整数。它可以处理大于 Number.MAX_SAFE_INTEGER 的整数值。
const num = BigInt(9007199254740991)
console.log(num) // 9007199254740991n
Nullish 合并运算符:Nullish 合并运算符(??)用于检查变量是否为 nullundefined,如果是,则返回默认值。
const value = null
const result = value ?? 'Default Value'
console.log(result) // "Default Value"
可选链操作符:可选链操作符(?.)可以在访问对象的属性或调用方法时,避免出现 TypeError 错误,如果属性不存在或方法未定义,则返回 undefined
const obj = {
  prop: {
    value: 'Hello World',
  },
}
const result = obj.prop?.value
console.log(result) // "Hello World"
Promise.allSettled():Promise.allSettled() 方法返回一个 Promise,只有在所有给定的 Promise 都已经 fulfilled 或 rejected 后,它才会被 resolved,并返回包含每个 Promise 结果的数组。
const promise1 = new Promise((resolve, reject) => reject('Error'))
const promise2 = new Promise((resolve) => resolve('Success'))
Promise.allSettled([promise1, promise2]).then((results) => console.log(results))
// [{status: "rejected", reason: "Error"}, {status: "fulfilled", value: "Success"}]
Optional Chaining in Object Destructuring:在对象解构中使用可选链操作符。
const obj = {
  prop: {
    value: 'Hello World',
  },
}
const { prop: { value } = {} } = obj
console.log(value) // "Hello World"
Proxy 对象可以包装另一个对象并拦截对它的各种操作,例如属性访问、函数调用等。
const obj = {
  name: 'Alice',
  age: 25,
}

const proxyObj = new Proxy(obj, {
  get(target, prop) {
    console.log(`Getting ${prop}`)
    return target[prop]
  },
  set(target, prop, value) {
    console.log(`Setting ${prop} to ${value}`)
    target[prop] = value
  },
})

console.log(proxyObj.name) // 输出:Getting name   Alice
proxyObj.age = 30 // 输出:Setting age to 30
Reflect(反射): Reflect 是一个内置对象,提供了可用于操作 JavaScript 的低级别方法。
// 使用 Reflect 调用函数,可以实现更灵活的函数调用方式
function greet(name) {
  console.log(`Hello, ${name}!`)
}

Reflect.apply(greet, null, ['Alice']) // 输出:Hello, Alice!
Generator(生成器): Generator 函数是一种特殊的函数,可以通过迭代器协议来控制函数的执行过程。
function* generatorFunc() {
  yield 'Hello'
  yield 'World'
  yield '!'
}

const generator = generatorFunc()

console.log(generator.next().value) // 输出:Hello
console.log(generator.next().value) // 输出:World
console.log(generator.next().value) // 输出:!
Symbol(符号): Symbol 是一种原始数据类型,表示唯一的标识符。它可以用作对象属性的键。
const sym = Symbol('mySymbol')
const obj = {
  [sym]: 'Hello',
}

console.log(obj[sym]) // 输出:Hello

HTML

** 自定义数据属性(data attributes)** 可以通过 data-* 属性为 HTML 元素添加自定义数据,以便在 JavaScript 中进行访问。
<div data-id="123" data-name="Alice"></div>
const div = document.querySelector('div')
console.log(div.dataset.id) // 输出:123
console.log(div.dataset.name) // 输出:Alice
** contenteditable 属性** 将 contenteditable 属性设置为 true 可以使元素可编辑,就像一个富文本编辑器一样。
<p contenteditable="true">可编辑的内容</p>
** 隐藏元素** 使用 hidden 属性或 CSS 的 display: nonevisibility: hidden 将元素隐藏起来。
<p hidden>隐藏的文本</p>
富文本格式化 通过 <pre> 标签可以保留文本中的空格、换行符等格式。
<pre>
  多行文本
  格式被保留
</pre>
** 自动聚焦** 使用 autofocus 属性在页面加载完成后自动将焦点设置到指定的表单元素上。
<input type="text" autofocus />
** 自定义右键菜单** 通过 JavaScript 监听 contextmenu 事件,并取消默认菜单,可以创建自定义的右键菜单。
<div oncontextmenu="showCustomMenu(event)">右键点击我</div>
function showCustomMenu(event) {
  event.preventDefault()
  // 自定义菜单的逻辑
}
自定义光标样式 可以使用 CSS 的 cursor 属性自定义鼠标悬停在元素上时的光标样式。
<style>
  .custom-cursor {
    cursor: url('custom-cursor.png'), auto;
  }
</style>

<div class="custom-cursor">鼠标悬停时会显示自定义光标</div>
响应式图像 使用 srcset 属性可以根据设备的像素密度加载不同分辨率的图像。
<img
  src="low-res.jpg"
  srcset="high-res.jpg 2x, extra-high-res.jpg 3x"
  alt="响应式图像"
/>
** 自动播放音频/视频** 使用 autoplay 属性可以使音频或视频在页面加载完成后自动播放。
<audio src="music.mp3" autoplay></audio>

<video src="video.mp4" autoplay></video>
禁止表单自动填充 通过设置 autocomplete 属性为 "off" 可以阻止浏览器自动填充表单字段。
<form autocomplete="off">
  <!-- 表单字段 -->
</form>
长按提示 使用 title 属性可以为元素添加长按提示文本,当用户长按该元素时会显示提示。
<button title="长按操作">长按我</button>
##CSS
伪元素 ::first-letter 可以用 ::first-letter 选择器来选择文本块的首字母,并对其应用特定的样式。
p::first-letter {
  font-size: 2em;
  color: red;
}
选择器 :focus-within 使用 :focus-within 选择器可以选择包含有焦点元素的父级元素。
.container:focus-within {
  background-color: yellow;
}
变量(Variable) 使用 CSS 变量可以定义和重用值,使样式更易于维护和修改。
:root {
  --primary-color: blue;
}

h1 {
  color: var(--primary-color);
}
** Flexbox 布局** Flexbox 是一种强大的布局模型,可以方便地在一维空间中对齐、分布和重新排序元素。
.container {
  display: flex;
  justify-content: center;
  align-items: center;
}
** 动画 @keyframes** 使用 @keyframes 关键帧规则可以创建动画效果并控制其过渡和延迟。
@keyframes slide-in {
  from {
    transform: translateX(-100%);
  }
  to {
    transform: translateX(0);
  }
}

.box {
  animation: slide-in 1s ease-in-out;
}
** 滚动渐变(Scrolling Gradient)** 使用渐变和背景图像属性结合,可以在滚动时创建渐变效果。
body {
  background: linear-gradient(to right, red, yellow) fixed;
  background-image: url('gradient-mask.png');
  background-size: cover;
  background-blend-mode: multiply;
}
通过使用 content 属性和属性值 "attr()" 结合,可以将元素的属性值自动复制到元素的内容中。
a::after {
  content: attr(href);
}

<input type="text" value="默认值" oninput="this.setAttribute('value', this.value)">
** 滤镜(Filter)** 使用 CSS 滤镜属性可以对元素应用各种视觉效果,如模糊、饱和度、对比度等。
img {
  filter: blur(5px);
}
多列文本布局 通过使用 column-countcolumn-gap 属性,可以将文本分为多列进行布局。
.container {
  column-count: 3;
  column-gap: 20px;
}
** 粘性(Sticky)定位** 使用 position: sticky; 可以创建一个在特定位置固定的元素,当用户滚动时会保持固定位置。
.nav {
  position: sticky;
  top: 0;
}

本文同步我的技术文档

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

作者: 吃个甘蔗嚼一年 发表日期:2023 年 7 月 10 日