1. 使用
||
操作符为变量设置默认值。,2. 使用&&
操作符进行短路求值。,3. 使用模板字符串(`)进行字符串拼接。,4. 使用解构赋值简化对象和数组的访问。,5. 使用扩展运算符(...)复制数组或对象。,6. 使用箭头函数简化函数定义。,7. 使用
map()、
filter()和
reduce()方法处理数组。,8. 使用
Array.isArray()检查一个变量是否为数组。,9. 使用
Object.keys()获取对象的所有属性名。,10. 使用
Object.values()获取对象的所有属性值。,11. 使用
Object.entries()获取对象的键值对数组。,12. 使用
Promise进行异步编程。,13. 使用
async/await语法简化异步代码。,14. 使用
try/catch捕获异常。,15. 使用
typeof操作符检查数据类型。,16. 使用
instanceof操作符检查构造函数的原型链。,17. 使用
bind()方法创建绑定特定上下文的新函数。,18. 使用
call()和
apply()方法调用函数并指定上下文。,19. 使用
Math.max()和
Math.min()获取数组中的最大值和最小值。,20. 使用
parseInt()和
parseFloat()将字符串转换为数字。,21. 使用
isNaN()检查一个值是否是非数字。,22. 使用
encodeURIComponent()和
decodeURIComponent()对URI进行编码和解码。,23. 使用
escape()和
unescape()对字符串进行编码和解码(已废弃,建议使用encodeURIComponent和decodeURIComponent)。,24. 使用
JSON.stringify()将对象转换为JSON字符串。,25. 使用
JSON.parse()将JSON字符串转换为对象。,26. 使用正则表达式进行字符串匹配和替换。,27. 使用
String.prototype.trim()去除字符串两端的空白字符。,28. 使用
String.prototype.split()将字符串分割成数组。,29. 使用
String.prototype.join()将数组连接成字符串。,30. 使用
String.prototype.replace()进行字符串替换。,31. 使用
String.prototype.match()进行正则匹配。,32. 使用
String.prototype.search()搜索字符串中的子串位置。,33. 使用
String.prototype.substring()提取字符串的一部分。,34. 使用
String.prototype.slice()提取字符串的一部分并返回一个新字符串。,35. 使用
Number.prototype.toFixed()将数字四舍五入为指定的小数位数。,36. 使用
Number.prototype.toPrecision()将数字四舍五入为指定的有效数字位数。,37. 使用
Math.round()、
Math.floor()和
Math.ceil()对数字进行四舍五入、向下取整和向上取整。,38. 使用
Math.random()生成随机数。,39. 使用
Date对象获取当前日期和时间。,40. 使用
Date.prototype.getTime()获取自1970年1月1日以来的毫秒数。,41. 使用
Date.prototype.toISOString()将日期转换为ISO格式的字符串。,42. 使用
Date.prototype.toLocaleString()`将日期转换为本地格式的字符串。,43. 使用自定义排序函数对数组进行排序。,44. 使用递归函数解决分治类型的问题。,45. 使用闭包封装私有变量和方法。,46. 使用立即执行函数表达式(IIFE)创建一个独立的作用域。,47. 使用模块模式组织代码。,48. 使用AMD(Asynchronous Module Definition)或CommonJS模块规范加载模块。,49. 使用ES6模块语法导入和导出模块。,50. 使用Babel等工具将ES6代码转换为兼容旧浏览器的ES5代码。,51. 使用Polyfill填补浏览器对新特性的支持不足。,52. 使用TypeScript为JavaScript添加静态类型检查。,53. 使用JSHint或ESLint进行代码质量检查。,54. 使用Mocha或Jest进行单元测试。,55. 使用Webpack或Browserify打包JavaScript代码。在JavaScript的世界里,掌握一些经典的小技巧可以帮助开发者更高效地编写代码、提升性能和增强用户体验,以下是55个经典且实用的JavaScript小技巧,涵盖了各种场景,从基本语法到高级特性,希望能对您的编程之旅有所帮助。
1.立即执行函数表达式 (IIFE)
!function() { // Your code here }();
用于创建一个独立的作用域,避免污染全局命名空间。
**严格模式
'use strict';
帮助检测潜在的错误并防止某些不安全的操作。
**短路求值
逻辑与 (&&):a && b
如果a
为假值,则返回a
;否则返回b
。
逻辑或 (||):a || b
如果a
为真值,则返回a
;否则返回b
。
**三元运算符
const age = 18; const canVote = age >= 18 ? 'Yes' : 'No';
简化条件判断语句。
**数组去重
const uniqueArray = [...new Set(array)];
使用Set
对象自动去重。
**数组扁平化
const flatArray = array.flat();
将嵌套数组展平为一维数组。
**数组乱序
const shuffledArray = array.sort(() => Math.random() 0.5);
随机打乱数组元素顺序。
**检查是否为空对象
const isEmptyObject = Object.keys(obj).length === 0;
**深拷贝对象
const deepCopy = JSON.parse(JSON.stringify(obj));
注意:此方法不适用于包含函数、undefined
、循环引用等复杂对象。
**合并对象
const mergedObject = Object.assign({}, obj1, obj2);
或使用扩展运算符...
。
**对象属性遍历
for (let key in obj) { if (obj.hasOwnProperty(key)) { // Your code here } }
**对象解构赋值
const { a, b } = { a: 1, b: 2 };
简洁地从对象中提取属性值。
**默认参数值
function greet(name = 'Guest') {
console.log(Hello, ${name}!
);
}
**模板字符串
const message =Hello, ${name}!
;
支持多行和内嵌变量。
**箭头函数
const add = (a, b) => a + b;
更简洁的函数定义方式,不绑定自己的this
。
**Promise
const promise = new Promise((resolve, reject) => { // Your async code here });
处理异步操作。
**async/await
async function fetchData() { try { const response = await fetch('https://api.example.com/data'); const data = await response.json(); console.log(data); } catch (error) { console.error('Error fetching data:', error); } }
使异步代码看起来更像同步代码。
**防抖函数
function debounce(func, wait) { let timeout; return function(...args) { clearTimeout(timeout); timeout = setTimeout(() => func.apply(this, args), wait); }; }
限制函数调用频率。
**节流函数
function throttle(func, limit) { let lastFunc; let lastRan; return function(...args) { const context = this; if (!lastRan) lastRan = Date.now(); if (Date.now() lastRan >= limit) { func.apply(context, args); lastRan = Date.now(); } else { clearTimeout(lastFunc); lastFunc = setTimeout(function() { func.apply(context, args); }, limit (Date.now() lastRan)); } }; }
限制函数执行次数。
**事件委托
document.body.addEventListener('click', function(e) { if (e.target && e.target.matches('.button')) { // Handle click } });
提高性能,减少事件监听器数量。
**动态添加/删除CSS类
element.classList.add('active'); element.classList.remove('active'); element.classList.toggle('active');
**获取/设置元素的样式
const style = window.getComputedStyle(element); element.style.property = 'value';
**滚动到视图顶部
window.scrollTo(0, 0);
**滚动到指定元素
element.scrollIntoView();
**获取浏览器视口大小
const width = window.innerWidth; const height = window.innerHeight;
**获取文档高度
const docHeight = document.documentElement.scrollHeight;
**创建唯一ID
const uniqueId = () => '_' + Math.random().toString(36).substr(2, 9);
**获取当前时间戳
const timestamp = Date.now();
**深比较两个对象
const deepEqual = (obj1, obj2) => JSON.stringify(obj1) === JSON.stringify(obj2);
**数组最大/最小值
const max = Math.max(...array); const min = Math.min(...array);
**数组反转
const reversedArray = array.reverse();
**数组填充
const filledArray = array.fill(value, start, end);
**数组映射
const mappedArray = array.map(item => item * 2);
**数组过滤
const filteredArray = array.filter(item => item > 10);
**数组归约
const sum = array.reduce((acc, val) => acc + val, 0);
**数组查找
const foundIndex = array.findIndex(item => item === target);
**数组排序
const sortedArray = array.sort((a, b) => a b);
**数组切片
const slicedArray = array.slice(start, end);
**数组拼接
const combinedArray = array1.concat(array2);
**数组去重(保留顺序)
const uniqueArray = [...new Set(array)];
**数组扁平化(保留顺序)
const flatArray = array.flat();
**数组乱序(保留顺序)
const shuffledArray = array.sort(() => Math.random() 0.5);
**检查数组是否包含某元素
const contains = array.includes(element);
**数组迭代
array.forEach(item => { // Your code here });
**数组索引
const index = array.indexOf(element);
**数组最后一个元素
const lastElement = array[array.length 1];
**数组第一个元素
const firstElement = array[0];
**数组长度
const length = array.length;
**数组清空
array.length = 0; // or array.splice(0, array.length);
**数组插入元素
array.splice(index, 0, newElement); // 在指定位置插入新元素
**数组删除元素
array.splice(index, count); // 从指定位置删除count个元素