# 为元素添加on方法
Element.prototype.on = Element.prototype.addEventListener;
NodeList.prototype.on = function(event, fn) {
[]['forEach'].call(this, function(el) {
el.on(event, fn);
})
return this;
}
# 为元素添加trigger方法
Element.prototype.trigger = function(type, data) {
var event = document.createEvennt('HTMLEvents');
event.initEvent(type, true, true);
event.data = data || {};
event.eventName = type;
event.target = this;
this.dispatchEvent(event);
return this;
}
NodeList.prototype.trigger = function(event) {
[]['forEach'].call(this, function(e) {
el['trigger'](event);
})
return this;
}
# 打乱数组顺序
let arr = ['😁', 67, true, false, '55'];
arr = arr.sort(() => 0.5 - Math.random());
console.log(arr);
# 去除数字之外的所有字符
var str = 'xieyezi 234234 is 9889 so hansome 234';
console.log(str.replace(/\D/g, ''));
# 反转字符串或者单词
const sentence = 'xieyezi is so handsome,lol.';
const reverseSentence = reverseBySeparator(sentence, '');
console.log(reverseSentence); // .lol,emosdnah os si izeyeix
const reverseEachWord = reverseBySeparator(reverseSentence, ' ')
console.log(reverseEachWord); // izeyeix si os .lol,emosdnah
function reverseBySeparator(string, separator) {
return string.split(separator).reverse().join(separator);
}
# 将十进制转换为二进制或十六进制
let num = 43;
const binaryNum = num.toString(2);
const hexadecimalNum = num.toString(16);
console.log(binaryNum); // 101011
console.log(hexadecimalNum); // 2b
# 合并多个对象
const city = [
name: 'chongqing',
population: '20000'
]
const location = {
loingitude: '106.55',
latitude: '29.23'
}
const fullCity = {...city, ...location};
console.log(fullCity)
# == 和=== 区别
// == ->类型转换(浅比较)
// ==== -> 无类型转换(严格比较)
0 == false; // true
0 === false // false;
1 == '1' // true
1 === '1' // false
null == undefined; // true
null === undefined; // false
# 解构赋值
const forest = {
location: 'Sweden',
animals: 3
animalsTypes: ['Lions', 'Tigers', 'Bears']
}
const {location, animals, animalsTypes} = forest
const [lions, tigers, bears] = animalsTypes;
console.log(location); // Sweden
console.log(animals); // 3
# 交换变量的值
let bears = 'bears';
let tigers = 'tigers';
[bears, tigers] = [tigers, bears];
console.log(bears); // tigers;
console.log(tigers); // bears
# 判断回文字符串
const isReverse = (str1, str2) => {
const normalize = str => {
str.toLowerCase().normalize('NFD').split('').reverse().join('') // normalize?? 其实可以去掉这里
}
return normalize(str1) === str2
}
console.log(isReverse('anagram', 'margana'))
js中string.normalize方法 (opens new window)
# 判断两个字符数是否为互相排列
判断两个字符串是否为互相排列: 给定两个字符串,一个是否是另一个的排列
const isAnagram = (str1, str2) => {
const normalize = str => str.toLowerCase().normalize('NFD').split('').sort().join('');
return normalize(str1) === str2
}
console.log(isAnagram('anagram', 'nagaram') true)
# 可选链操作符
const player = {
name: 'xieyezi',
rating: 1000,
click: () => {
return 'click'
},
pass: (teammate) => {
return `Pass to ${template}`
}
}
console.log(player?.name); // xieyezi
MDN: 可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined
demo
if (res && res.data && res.data.success) {}
// 相当于
if(res?.data?.success) {}
# 三目运算符
const oxygen = 10;
const diver = oxygen < 10 ? 'Low oxygen' : 'High oxygen';
console.log(diver);
# 从数组随机选择一个值
const elements = [24, 'You', 777, 'beaking', 99, 'full'];
const random = arr => arr[Math.floor(Math.random() * arr.length)]
console.log(random(elements));
# 冻结对接
const octopus = {
tentacles: 8,
color: 'blue'
}
Object.freeze(octopus);
octopus.tentacles = 10; // Error 不会改变
console.log(octopus); // { tentacles: 8, color: 'blue'}
# 删除数组中重复的元素
var arr = [1,2,3, 2,3]
const unique = arr => [...new Set(arr)]
console.log(unique(arr))
# 保留指定小数
const num = 0.1231243254
console.log(num.toFixed(2)); // 0.12
console.log(num.toFixed(3)); // 0.123
# 清空数组
const numbers = [1,2,3,4,5,6,7,8,8]
nums.length = 0;
console.log(numbers); // []
# 从RGB转换为HEX
const rgbToHex = (r, g, b) => {
const toHex = num => {
const hex = num.toString(16);
return hex.length === 1 ? `0${hex}` : hex
}
return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
}
console.log(rgbToHex(46,32,67)); // #2e2043
# 数组最大最小值
const num = [1,2,3,3,5, 88, 0,12];
console.log(Math.max.apply(null, num))
console.log(Math.min(...nums))
# 空值合并运算符
MDN: 空值合并操作符(??)是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。
const nullVal = null;
const emptyString = '';
const someNum = 13;
const a = nullVal ?? 'A default';
const b = emptyString ?? 'B default';
const c = someNum ?? 'c default';
console.log(a) // A default
console.log(b) // ''
console.log(c) // 13
# 过滤数组中值为false的值
const nums = [1,0, undefined, null, false];
const truthyNums = nums.filter(Boolean)
// const truthyNums = nums.filter(item => !!item) // 也可以
console.log(truthyNums); // [1]
# 赋值到剪贴板
const copyToClipboard = text => {
navigator.clipboard?.writeText && navigator.clipboard.writeText(text);
}
// 测试
copyToClipboard('Hello World!')
注意:根据caniuse,该方法对93.08%的全球用户有效。所以必须检查用户的浏览器是否支持该API。为了支持所有用户,你可以使用一个输入并复制其内容。
# 检测黑暗模式
const isDarkMode = () => {
wiindow.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
}
console.log(isDarkMode())
# 滚动到顶部
初学者经常发现自己在正确滚动元素的过程中遇到困难。最简单的滚动元素的方法是使用scrollIntoView方法。添加行为。"smooth "来实现平滑的滚动动画。
const scrollTop = element => element.scrollIntoView({ behavior: 'smooth', block: 'start'});
# 滚动到底部
const scrollToBottom = (element) =>
element.scrollIntoView({ behavior: "smooth", block: "end" })。
# 资料
← 前端 水印 多个平铺 无限视差滚动 →