JS经常使用小技巧

一、数组去重

let arr = [1,2,2,3,3,4,5,6]
let newArr = [...new Set(arr)] // [1,2,3,4,5,6]
//或者 Array.from(new Set(arr))
复制代码

二、String强制转换为Number

'123' * 1            // 123
'china' * 1            // NaN
null * 1            // 0
undefined * 1    // NaN

复制代码
+ '666'            // 666
+ ''                    // 0
+ null              // 0
+ 'china'               // NaN
+ undefined    // NaN

复制代码

+ 解释为链接操做符,而非加法操做符,可使用两个 ~~ 替换。对整数来讲 ~~ 运算结果与 Math.floor( ) 运算结果相同(一个波浪号 ~ ,被称为“按位取反运算符”,等价于 - n - 1。因此~15 = -16.)数组


三、includes

let arr = [1,2,3,4,5]
console.log(arr.includes(1) == arr.indexOf(1)!=-1)//true
复制代码

判断字符串或数组中是否存在某个元素,使用includes代替indexOfbash


四、URLSearchParams

基本用法

let url = new URLSearchParams(location.search.slice(1));
复制代码

使用URL构造

let location = 'http://www.baidu.com?id=2'
 let _url = (new URL(location)).searchParams;
 console.log(_url.get("id")) //2
复制代码

获取/设置参数

  • get(key):获取参数
  • set(key):设置参数
  • append(key,value):

五、对象去重合并

Object.assign

var obj1 = { a : 1 };

var obj2 = { b : 2 };

var obj3 = { c : 3 };

console.log(Object.assign(obj1, obj2, obj3))//{ a : 1, b : 2, c:3 }
复制代码

扩展运算符

let obj1 = { a : 1, b : 2 };
let obj2 = { a : 2, c : 3, d : 4 };
let newObj = { ...obj1,...obj2 };
console.log(newObj) //{a: 2, b: 2, c: 3, d: 4}
复制代码

六、平铺多维数组

var arr1 = [1, 2, [3, 4]];
arr1.flat(); 
// [1, 2, 3, 4]

var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]

var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]

//使用 Infinity 做为深度,展开任意深度的嵌套数组
arr3.flat(Infinity); 
// [1, 2, 3, 4, 5, 6]
复制代码

flat() 方法会移除数组中的空项:app

var arr4 = [1, 2, , 4, 5];
arr4.flat();
// [1, 2, 4, 5]
复制代码

七、Boolean过滤数组中的全部假值

let arr = [ 1 , null , false , 2 , 3 , NaN , '' ]
console.log(a.filter(Boolean)) //[1,2,3]
复制代码

八、取整

对一个数字| 0能够取整,负数也一样适用,num | 0ui

1.3 | 0 // 1
-1.9 | 0 // -1
复制代码

九、|| 和 && 的妙用

// 场景 1
function b(a) {
  if (a) {
    return a
  } else {
    return ''
  }
}
// 场景 2
function b(a) {
  return a || ''
}
复制代码

上面是 || 的用法,也叫作短路处理。常见于 if 条件中,可是他其实也能够直接用于语句中。当第一个参数为 true 就会取第一个参数的值,当第一个参数不为 true 就会取第二个参数的值。&& 正好与 || 相反。第一个参数 为 true 会取第二个参数的值,常见用&&代替if-else,例如:url

if(a >=5){ 
 alert("你好"); 
} 
//a >= 5 && alert("你好"); 
复制代码

十、用对象代替 switch / if

公共内容:
let a = 'VIP'

场景 1
if (a === 'VIP') {
  return 1
} else if (a === 'SVIP') {
  return 2
}

场景 2
switch(a) {
  case 'VIP'
    return 1
    break
  case 'SVIP'
    return 2
    break
}

场景 3
let obj = {
  VIP: 1,
  SVIP: 2
}
复制代码

可用这种方法把状态映射中文含义,例如支付状态一般获取的是 1, 2,3,4 这种值,可是列表要求显示相应的中文状态 未支付 | 支付中 | 已退款等等spa

十一、用解构赋值过滤对象属性

// 过滤掉对象中 inner 和 outer 属性
const { inner, outer, ...restProps } = {
  inner: 'This is inner',
  outer: 'This is outer',
  v1: '1',
  v2: '2',
  v4: '3'
};
console.log(restProps);
// {v1: "1", v2: "2", v4: "3"}
复制代码

十二、数字金额千分位格式化

let num = 123455678;
let num1 = 123455678.12345;

let formatNum = num.toLocaleString('en-US');
let formatNum1 = num1.toLocaleString('en-US');

console.log(formatNum); // 123,455,678
console.log(formatNum1); // 123,455,678.123
复制代码
相关文章
相关标签/搜索