Bootstrap

开发过程中的”骚“操作

在我们日常开发的过程中,总会有一些可以加快开发速度的便捷写法,这时候我们就需要知道了~可以让你提前下班~~

场景一 :将一个数字变成字符串

一般写法:

let str = '2'
console.log(Number(str))   //2

骚操作一:

let str = '2'
console.log(~~str)    //2

详细了解:

~~的作用是去掉小数部分,针对于正数,向下取整;对于负数,向上取整;与Math.floor()不同的是,它只是单纯的去掉小数部分,不论正负都不会改变整数部分。

~~null;      // => 0
~~undefined; // => 0
--NaN;       // => 0
~~0;         // => 0
~~{};        // => 0
~~[];        // => 0
~~(1/0);     // => 0
~~false;     // => 0
~~true;      // => 1
~~1.9;       // => 1
~~-1.9;      // => -1

骚操作二:

let str = '2'
console.log(+str)    //2

场景二 :数组扁平化

骚操作:

let arr = [1, [2, [3, 4]]]; 
console.log(arr.flat(Infinity)); // [1, 2, 3, 4,5]

场景三 :扩展运算符

  1. 数组去重

let arr = [3, 5, 2, 2, 5, 5]; 
let setArr = new Set(arr)            // 返回set数据结构Set(3) {3, 5, 2} 
//方法一 es6的...解构 
let unique1 = [...setArr ];          //去重转数组后 [3,5,2] 
//方法二 Array.from()解析类数组为数组 
let unique2 = Array.from(setArr )    //去重转数组后 [3,5,2]
  1. 字符串去重

let str = "352255"; 
let unique = [...new Set(str)].join(""); // 352

3.实现并集、交集、差集

let a = new Set([1, 2, 3]); 
let b = new Set([4, 3, 2]); 
// 并集 
let union = new Set([...a, ...b]); // Set {1, 2, 3, 4} 
// 交集 
let intersect = new Set([...a].filter(x => b.has(x))); // set {2, 3} 
// (a 相对于 b 的)差集 
let difference = new Set([...a].filter(x => !b.has(x))); // Set {1}

4.数组排序

const sortNumbers = (...numbers) => numbers.sort();

javaScript空值合并操作符(??)

只有当左侧为null和undefined时,才会返回右侧的数

const nullValue = null;
const emptyText = ""; // 空字符串,是一个假值,Boolean("") === false
const someNumber = 42;

const valA = nullValue ?? "valA 的默认值";
const valB = emptyText ?? "valB 的默认值";
const valC = someNumber ?? 0;

console.log(valA); // "valA 的默认值"
console.log(valB); // ""(空字符串虽然是假值,但不是 null 或者 undefined)
console.log(valC); // 42
;