美文网首页
coding小技巧

coding小技巧

作者: 米诺zuo | 来源:发表于2023-03-21 15:02 被阅读0次

    应用场景
    场景一:将一个字符串变成数字
    常规操作
    let str = '2'
    console.log(Number(str)) //2
    复制代码
    骚操作一
    let str = '2'
    console.log(str) //2
    复制代码
    解析:
    js中有~是按位取反运算,
    用来作双非按位取反运算
    ~~ 的作用是去掉小数部分,对于正数,向下取整;对于负数,向上取整;与Math.floor()不同的是,它只是单纯的去掉小数部分,不论正负都不会改变整数部分
    非数字取值为0,它具体为
    ~~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
    复制代码
    解析:
    JS中的 '+' 号
    当用作单目操作符的时候,+操作符不会对Number类型产生影响。但如果应用在字符串类型上,会将其转换为数字:
    let a = 25;
    a =+ a;
    console.log(a); //25
    let b = '50';
    console.log(typeof b); //String
    b=+b;
    console.log(typeof b); //Number
    复制代码
    通常使用+操作符可以快速地将字符串转换为数字。但是如果字符串字面量无法转化为数字的话,结果会出人意料:
    let a = 'kangkang';
    a =+ a;
    console.log(a) //NaN
    console.log(typeof a); //Number
    let b = '';
    b=+b;
    console.log(b); //0
    console.log(typeof b); //Number
    复制代码
    场景二:数组扁平化
    常规操作
    let arr = [1, [2, [3, 4,5]]];
    function flatten(arr) {
    while (arr.some(item => Array.isArray(item))) {
    arr = [].concat(...arr);
    }
    return arr;
    }
    console.log(flatten(arr))// [1, 2, 3, 4,5]
    复制代码
    骚操作
    let arr = [1, [2, [3, 4]]];
    console.log(arr.flat(Infinity)); // [1, 2, 3, 4,5]
    复制代码
    解析
    ES6中的flat
    我们还可以直接调用 ES6 中的flat方法来实现数组扁平化。flat 方法的语法:arr.flat ( [depth] )
    其中depth是flat的参数,depth 是可以传递数组的展开深度(默认不填、数值是 1),即展开一层数组。如果层数不确定,参数可以传进 Infinity,代表不论多少层都要展开:
    场景三:扩展运算符的应用
    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]
    复制代码
    2.字符串去重
    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.将伪数组转化为数组
    //伪数组转换为数组
    var nodeList = document.querySelectorAll('div');
    console.log([...nodeList]); // [div, div, div ... ]
    复制代码
    5.配合rest 运算符应用
    function sumRest (...m) {
    var total = 0;
    for(var i of m){
    total += i;
    }
    return total;
    }
    console.log(sumRest(1,2,3));//6
    复制代码
    6.数组排序
    const sortNumbers = (...numbers) => numbers.sort();
    复制代码
    场景四:网站置灰
    CSS滤镜 -webkit-filter
    一行代码足以
    html.gray-mode { filter: grayscale(.95); -webkit-filter: grayscale(.95); }
    复制代码
    blur 模糊-webkit-filter:blur(2px);

    brightness 亮度-webkit-filter:brightness(25%);

    contrast 对比度-webkit-filter: contrast(50%);

    drop-shadow 阴影-webkit-filter: drop-shadow(5px 5px 5px rgba(0, 0, 0, 0.5));

    opacity 透明度-webkit-filter: opacity(50%);

    grayscale 灰度-webkit-filter: grayscale(80%);

    sepia 褐色-webkit-filter: sepia(100%);

    invert 反色-webkit-filter: invert(100%);

    hue-rotate 色相旋转-webkit-filter:hue-rotate(180deg);

    saturate 饱和度-webkit-filter: saturate(1000%);
    复制代码
    场景五:如何写出好函数
    1.默认参数-在你的函数中使用默认参数
    避免在你的函数中使用短路或条件来保持更清洁。 更重要的是,请记住,你的函数只会为未定义的参数提供值, 默认值不会替换任何其他虚假值。
    // BAD
    function createMicrobrewery(name) {
    const breweryName = name || "KangKang";
    // ...
    }
    // GOOD
    function createMicrobrewery(name = "KangKang") {
    // ...
    }
    复制代码
    2.参数不宜过多-明智地使用函数参数
    尽量将函数参数的数量限制在2个或最多 3 个。如果它需要这么多参数,则可能是你的函数做的太多了。 但是,如果仍然需要它,请使用 JavaScript 对象作为参数。 为了使函数期望的属性变得明显,可以使用ES6解构语法。
    // BAD
    function createMenu(title, body, buttonText, cancellable) {
    // ...
    }
    createMenu("Foo", "Bar", "Baz", true);
    // GOOD
    function createMenu({ title, body, buttonText, cancellable }) {
    // ...
    }
    createMenu({ title: "Foo", body: "Bar", buttonText: "Baz", cancellable: true});
    复制代码
    3.单一职责原则-函数应该做一件事
    不要忘记函数的作用——为你的代码添加模块化。 每个只执行一项任务的较小函数将确保你的代码易于编写、测试和理解。 永远不要为单个功能设置多个目标。
    // BAD
    function emailClients(clients) {
    clients.forEach(client => { const clientRecord = database.lookup(client);
    if (clientRecord.isActive()) { email(client); } });
    }
    // GOOD
    function emailActiveClients(clients) {
    clients.filter(isActiveClient).forEach(email);
    }
    function isActiveClient(client) {
    const clientRecord = database.lookup(client); return clientRecord.isActive();
    }

    原链接:https://juejin.cn/post/7172088772257906725

    相关文章

      网友评论

          本文标题:coding小技巧

          本文链接:https://www.haomeiwen.com/subject/lcymrdtx.html