20个简洁的js代码片段
转自:https://mp.weixin.qq.com/s/w7_ATf5PzHqjQ0OdKc5xBw
<!-- https://mp.weixin.qq.com/s/l1isGENvKOQOUUjJssI1nA -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>20个简洁的 JS 代码片段</title>
<script type="text/javascript">
// 1.单行IF-ELSE
const age = 12;
let ageGroup;
// LONG FORM
if (age > 18) {
ageGroup = "An adult";
} else {
ageGroup = "A child";
}
// SHORTHAND
ageGroup = age > 18 ? "An adult" : "A child";
// 2.从数组中删除重复项
// 在 JavaScript 中,Set 是一个集合,它允许你仅存储唯一值。这意味着删除任何重复的值。
// 因此,要从数组中删除重复项,你可以将其转换为集合,然后再转换回数组。
const numbers = [1, 1, 20, 3, 3, 3, 9, 9];
const uniqueNumbers = [...new Set(numbers)]; // -> [1, 20, 3, 9]
// 1)、new Set(numbers)从数字列表中创建一个集合。创建集合会自动删除所有重复值。
// 2)、展开运算符...将任何可迭代对象转换为数组。这意味着将集合转换回数组。[...new Set(numbers)]
// 3.较短的 If-Else 的空合并
let maybeSomething;
// LONG FORM
if(maybeSomething){
console.log(maybeSomething)
} else {
console.log("Nothing found")
}
//SHORTHAND
console.log(maybeSomething ?? "Nothing found")
// 4.防止崩溃的可选链
//如果访问未定义的属性,则会产生错误。这就是可选链的用武之地。
// 在未定义属性时使用可选链运算符,undefined将返回而不是错误。这可以防止你的代码崩溃。
const student ={
name: "Matt",
age:27,
address:{
state: "New York"
},
};
// LONG FORM
console.log(student && student.address && student.address.ZIPCode);// 不存在则返回undefined
// SHORTHAND
console.log(student?.address?.ZIPCode);// 不存在返回undefined
//5.在没有第三个变量的情况下交换两个变量
// 在javascript中,可以使用解构从数组中拆分值。这可以应用于交换两个变量而无需第三个
let x=1;
let y =2;
// LONGER FORM
let temp =x;
x=y;
y = temp;
//SHORTHAND
[x,y] = [y,x];// 可以使用解构交换两个变量的值
// 6.将任何值转换为布尔值:使用!!在JS中将任何内容转换为布尔值
!!true // true
!!2 // true
!![] // true
!!"Test" // true
!!false // false
!!undefined // false
!!0 // false
!!"" // false
// 7.扩展运算符
// 使用扩展运算符组合两个数组
const nums1 = [1,2,3];
const nums2 = [4,5,6];
// LONG FORM
let newArray = nums1.concat(nums2);
// SHORTHAND
newArray = [...nums1,...nums2]
//也可使用此语法代替将值推送到数组
let numbers = [1,2,3];
// LONGER FORM
numbers.push(4);
numbers.push(5);
// SHORTHAND
numbers = [...numbers,4,5]
// 8.传播解构
// 使用扩展运算符将剩余元素分配给变量
const student ={
name: "Matt",
age: 23,
city: "ShangHai",
state: "Finland",
};
// LONGER FORM
const name = student.name;
const age = student.age;
const address = {city:student.city,state: student.state};
// SHORTHAND
const {name,age, ...address } = student;
// 9.使用&& 进行短路评估:不必使用if语句检查某事是否为真,可以使用&& 运算符
var isReady = true;
function doSomething(){
console.log("Yay!");
}
// LONGER FORM
if(isReady){
doSomething();
}
// SHORTHAND
isReady && doSomething();
// 10.类固醇的字符串
const age = 41;
const sentence = `I'm ${age} years old`;
// result: I'm 41 years old
// 11.从数组中查找特定元素: 使用find()方法查找匹配特定条件的元素
const fruits = [
{ type: "Banana", color: "Yellow" },
{ type: "Apple", color: "Green" }
];
// LONGER FORM
let yellowFruit;
for (let i = 0; i < fruits.length; ++i) {
if (fruits[i].color === "Yellow") {
yellowFruit = fruits[i];
}
}
// SHORTHAND
yellowFruit = fruits.find((fruit) => fruit.color === "Yellow");
// 12.对象属性赋值:你是否希望对象键与值具有相同的名称?你可以省略对象文字来执行此操作:
const name = "Luis", city = "Paris", age = 43, favoriteFood = "Spaghetti";
// LONGER FORM
const person = {
name: name,
city: city,
age: age,
favoriteFood: favoriteFood
};
// SHORTHAND
const person = { name, city, age, favoriteFood };
//13.压缩for循环:使用内置forEach()方法通过一行代码循环遍历数组:
const numbers = [1, 2, 3, 4, 5];
// LONGER FORM
for(let i = 0; i < numbers.length; i++){
console.log(numbers[i]);
}
// SHORTHAND
numbers.forEach(number => console.log(number));
// 14.默认功能参数:可以为函数参数提供默认值:
// LONG FORM
function pickUp(fruit) {
if(fruit === undefined){
console.log("I picked up a Banana");
} else {
console.log(`I picked up a ${fruit}`);
}
}
// SHORTHAND
function pickUp(fruit = "Banana") {
console.log(`I picked up a ${fruit}`)
}
pickUp("Mango"); // -> I picked up a Mango
pickUp(); // -> I picked up a Banana
// 15.将对象的值收集到数组中:用于Object.values()将对象的所有值收集到一个新数组中
const info = { name:"Matt",country:"Finland",age:35};
// LONGER FORM
let data = [];
for(let key in info){
data.push(info[key]);
}
// SHORTHAND
const data = Object.values(info);//将对象的所有值收集到一个新数组中
// 16.检查一个项目是否存在于数组中
// 你可以使用 includes() 方法,而不是使用 indexOf() 方法来检查元素是否在数组中。这使你的意图非常明确:
let numbers = [1,2,3];
// LONGER FORM
const hasNumber1 = numbers.indexOf(1) >-1;// true
// SHORTHAND
const hasNumber1 = numbers.includes(1);// true
// 17.压缩多个条件:避免使用长|| 检查多个条件链
const num = 1;
// LONGER FORM
if(num == 1 || num == 2 || num == 3){
console.log("Yay");
}
// SHORTHAND
if([1,2,3].includes(num)){
console.log("Yay");
}
// 18.指数运算符:你Math.pow()习惯把一个数字提高到一个幂吗?你知道你也可以使用**运算符吗?
// LONGER FORM
Math.pow(4,2);// 16
Math.pow(2,3);// 8
//SHORTHAND
4**2 ;// 16
2**3;// 8
// 19.Math.floor()简写:四舍五入Math.floor()并不是什么新鲜事。但是你知道你也可以使用~~运算符吗?
// LONG FROM
Math.floor(5.25); // 5.0
// SHORTHAND
~~5.25; // 5.0
// 20.用一行代码分配多个值: 使用解构语法在一行中分配多个值
let num1,num2;
//LONGER FORM
num1 = 10;
num2 = 100;
//SHORTHAND
[num1,num2] = [10,100];
// 这也适用于使用JS对象
student ={
name: "Matt",
age: 29,
};
// LONGER FORM
let name = student.name;
let age =student.age;
// SHORTHAND
let {name,age} = student;
</script>
</head>
<body>
</body>
</html>
“fool me once,shame on you. fool me twice, shame on me.”,翻译过来的意思是“愚弄我一次,是你坏;愚弄我两次,是我蠢”。