前端常用方法之“js一些常用的简写方式”

一、JS中箭头函数,return与大括号省略的问题

原: data:this.value.map((item)=>{return item.name}),

简写:this.value.map(item=>item.name)

当箭头函数的函数体只有一个 `return` 语句时,可以省略 `return` 关键字和方法体的花括号

总结一下,如果箭头函数中只有一句return,那么可以同时省略大括号与return;但如果使用了大括号,即使只有一句表达式,也必须有return。

 

二、扩展运算符

对象的扩展运算符(…)用于取出参数对象中的所有可遍历属性,拷贝到当前对象中
在JS中,扩展运算符(spread)是三个点…,剩余运算符(rest)同为三个点(…)
我们可以把…理解为展开运算符
所有能够被迭代的东西,都可以被展开运算符…,进行展开

1.字符串,数组可以展开,展开成逗号分隔的元素集合
 let str = "abc"
 let arr  =  [1,2,3];
 let bb =  [...str] 
  
 console.log(bb);//["a","b","c"]
 console.log(...str);//a b c
 console.log(...arr);//1,2,3

2.所有可以被迭代的东西,都可以用扩展运算符…进行展开
let arr  =  [1,2,3]
 for(const index in arr) {
        console.log(arr[index]);  
    }
打印出
// 1 
// 2 
// 3
数组迭代
let arr  =  [1,2,3];

字符串迭代
let str = "abc"

number不能被迭代
let num = 100
console.log(...num);  //报错

3.展开的内容它可以放在任何它可以存在的地方(精华所在)
数组
let arr  = [1,2,3]
console.log(...arr);  // 1 2 3
console.log([...arr]); // [1, 2, 3]


函数
 let arr  = [1,2,3]
 function add(a,b,c) {
      console.log(a+b+c);
 }
 add(...arr)//6

对象(对象也是可以被遍历的,对象展开是个key和value的形式,也是用逗号隔开)
let lxl =  {
   name:'lxl',
    age:12
 }
console.log(...lxl); //报错,这个...是从语法层面将一个可遍历的东西展开
console.log({...lxl}); // {name: 'lxl', age: 12} 

4.混录
let lxl =  {
      name:'lxl',
        age:12
  }
     console.log({...lxl,...{hobby:'学习'}});
     //{name: 'lxl', age: 12}
     //{name: 'lxl', age: 12, hobby: '学习'}

 
  //混录还有注意的地方:即假如我们几个对象的属性进行混录综合有属性发送重复的情况,我们是以后面的为准
  console.log({...lxl,...{hobby:'学习'},...{age:22}}); // 后面的属性会把前面的属性重叠掉age为22


三、字面量合并

 //二、数组
    let arr = [1,4,2,7,3,9,8]
    let name = "非数组"
    let newarr = [];

    //方法1
    // let ab = arr.slice(0,1)//不会改变原数组
    // let ac = arr.slice(5,6)//下标+下标 = 取2个下标之间   //9

    let ab = arr.splice(0,1)//注意点:会改变原数组
    let ac = arr.splice(4,1)//需要注意:如果2次使用splice,要看第一次处理后的数组值

    //let aa = ab.concat(ac)//不会改变原数组,把2个数组拼合起来
    //console.log('ab',ab,ac,aa)// [1, 9]

    //ES6 数组拼合//字面量合并--支持字符串、数组
     let bb = [...ab,...ac]
     console.log('bb',ab,ac,bb)//常用// 1,9 [1,9]

    //let bb = {...a,...b}
    //console.log('bb',bb)//常用


方法2:
子组件
this.$bus.$emit('updateListData',{isLoading:false,errMsg:'',users:response.data.items})//没有isFirst

this.$bus.$emit('updateListData',{isLoading:true,errMsg:'',users:[],isFirst:false})//有isFirst

父组件
data() {
			return {
				info:{
					errMsg:'',//展示错误信息
					users:[],//展示用户列表
					isFirst:true,//展示欢迎词
					isLoading:false,//展示加载中
				}
			
			}
		},
this.info = {...this.info,...dataObj}//批量替换
				//通过字面量的形式去合并
				//顺序也无所谓,只有你有这个数据
				//...this.info显示全部
				//...dataObj随后dataObj的所有属性也全部显示
				//然后进行合并,重名的属性,已后面为主,也就是dataOb为主,后面没有说的,原来是什么,现在还是什么

四、模板字符串:


const info = `我的名字是:${person.username}, 性别:${person.sex}, 今年${person.age}岁了`;

模板字符串的注意事项:
1.输出多行字符串
const info = '第1行\n第2行';
// console.log(info);
//第一行
//第二行

2.注意空格影响
const info = `第1行 
第2行`;    //这里前边有空格
// console.log(info);
//第一行
//	第二行

3.输出 ` 和 \ 等特殊字符
const info = `\`\\`;    //需要转义
console.log(info);     //`\

一般字符:不需要转义
const info = `'`;   
console.log(info);   //'

4.模板字符串的注入
const username = 'alex';
const person = { age: 18, sex: 'male' };
const getSex = function (sex) {
  return sex === 'male' ? '男' : '女';
};

const info = `${username}, ${person.age},${getSex(person.sex)}`;
console.log(info);

五、三元运算符?:、链判断运算符?.、非空运算符??

1.三元运算符
应用场景1
function checkCharge(charge) {
    return (charge > 0) ? '可用' : '需充值' 
}
console.log(checkCharge(20)) // => 可用
console.log(checkCharge(0)) // => 需充值

2.?? 非空运算符
如果第一个参数不是 null/undefined(译者注:这里只有两个假值,但是 JS 中假值包含:未定义 undefined、空对象 null、数值 0、空数字 NaN、布尔 false,空字符串'',不要搞混了),将返回第一个参数,否则返回第二个参数。比如

null ?? 5 // => 5//第一个参数是 null/undefined其中的一个所以为5
3 ?? 5 // => 3  //第一个参数是3所以 返回的是3




2.链判断运算符?. 允许开发人员读取深度嵌套在对象链中的属性值,而不必验证每个引用。当引用为空时,表达式停止计算并返回 undefined。


let travelPlans = {
  destination: 'DC',
  monday: {
    location: 'National Mall',
    budget: 200,
    host: null
  }
}
let res = travelPlans?.tuesday?.location ?? "locahost"; // => locahost//如果
//travelPlans?.tuesday?.location 是null/undefined就返回 "locahost" ,否则就返回本身
let res2 = travelPlans?.host; // => undefined

七、解构

解构应用场景
1.不变的操作
方式1:数组
const numbers = [1, 2, 3];
const [, ...fooNumbers] = numbers;

fooNumbers//[2,3]
numbers//[1,2,3]

方式2:对象
data(){
    return {
        default:{
           w:100
           h:100
        }
    }
}
// default只有w和h,所以可以使用解构
list:[
    ...this.default,等同于

// w:this.default.w,//盒子初始值宽
// h:w:this.default.h,,
]


2.交换变量
原来是这样交换变量
let a = 1;
let b = 2;
let temp;

temp = a;
a = b;
b = temp;

a; // => 2
b; // => 1

现在:
let a = 1;
let b = 2;
[b a] = [a b]

a; // => 2
b; // => 1


3.访问数组项
如果对于一个不确定的数组或其他结构类型数据,我们要获得它的某个元素,如果不存在就赋予变量默认值,通常的做法是根据该数组(结构)的.length来进行判断。

const colors = [];//空数组的length去判断存不存在

let firstColor = 'white';//如果不存在就给默认
if (colors.length > 0) {//存在就
 firstColor = colors[0];//取值
}

firstColor; // => 'white'

解构:
const colors = [];
const [firstColor = 'white'] = colors;
//const [firstColor =‘white’] = colors 解构将 colors 数组的第一个元素分配给firstColor 变量
如果数组在索引 0 处没有任何元素,则将分配默认值 white 。如果你只想访问第二个元素,也可以这样
const [, secondColor = 'black'] = colors;
secondColor; // => 'black'
firstColor; // => 'white'



4.解构可迭代对象
在前面,我们将解构应用于数组。但是你可以解构实现了可迭代协议的任何对象。许多原生原始类型和对象都是可迭代的:数组、字符串、类型化数组、集合和映射。例如,你可以将字符串分解为字符:
const str = 'cheese';
const [...first] = str;
const [seconde] = str;
console.log(first);//['c', 'h', 'e', 'e', 's', 'e']
console.log(seconde);//c
不仅限于原生类型,也可以通过实现可迭代协议来自定义解构逻辑。
const movies = {
  list: [
    { title: 'Heat' }, 
    { title: 'Interstellar' }
  ],
  [Symbol.iterator]() {
    let index = 0;
    return {
      next: () => {
        if (index < this.list.length) {
          const value = this.list[index++].title;
          return { value, done: false };
        }
        return { done: true };
      }
    };
  }
};
const [firstMovieTitle] = movies;
console.log(firstMovieTitle); // => 'Heat'
movies 对象通过定义 Symbol.iterator 方法来实现可迭代的协议。迭代器遍历电影的标题。遵循可迭代协议,可以将 movies 对象结构为标题,特别是通过读取第一部电影的标题:const [firstMovieTitle] = movies。


5.解构动态属性
通过属性对对象进行解构比对数组进行解构更为常见。





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值