最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 每天学习 10 个实用Javascript代码片段(六)

    正文概述 掘金(天行无忌)   2021-08-25   367

    【这是我参与8月更文挑战的第 25 天,活动详情查看:8月更文挑战】

    每天学习10个实用JavaScript代码片段,加深对 Javascript 语法的理解,积累代码优化经验,第天来了,本文代码片段包括生成随机数、数字加密、四舍五入、文件扩展名、变量数字转换。如果觉得内容能够带来点帮助,可以查看专栏《碎片时间学习Javascript代码》其他内容,又或者有用到的需求片段,不妨在留言区留言。

    1. Randoms

    在下面的代码片段,将展示了两种生成随机数或从数组中获取随机元素的方法。

    生成指定范围的随机数:

    const getRandoms = (min, max) => {
        return Math.round(Math.random() * (max - min) + min);
    };
    console.log(getRandoms(10, 100));
    

    随机获取数组中的一项元素:

    const arrayCities = ["北京", "上海", "广州", "深圳", "天津", "重庆"];
    const getRadmonItem = (array) =>
        array[Math.floor(Math.random() * array.length)];
    console.log("随机城市:", getRadmonItem(arrayCities));
    

    2. 数字加密

    下面代码片段展示了使用数字作为密钥对数字进行加密解密操作,使用异或运算 XOR(^) 来实现,展示一个简单的加密解密过程。

    function Encrypt(secretNumber) {
        const _secretNumber = secretNumber;
        const encrypted = (encryptNumber) => encryptNumber ^ _secretNumber;
        const decrypted = (encryptedContent) => encryptedContent ^ _secretNumber;
        return {
            encrypted,
            decrypted,
        };
    }
    
    const encryptHelper = new Encrypt(202108);
    const encryptNumber = 20210901;
    
    // 加密
    const encrypted = encryptHelper.encrypted(encryptNumber);
    console.log(encrypted); // 20410793
    // 解密
    const decrypted = encryptHelper.decrypted(encrypted);
    console.log(decrypted); // 20210901
    

    3. 设置必选参数

    通常定义的一个函数的时候,对于可预期的参数可以使用默认值,而对于必要参数希望给出友好的提示,下面代码片段展示一个必填参数的定义:

    const mandatory = (name) => {
        throw new Error(`调用错误,必须传递参数:${name}`);
    };
    
    const printTitle = (title = mandatory("标题")) => {
        console.log(`打印文章标题:${title}`);
    };
    
    printTitle("JavaScript"); // 打印文章标题:JavaScript
    printTitle(); // Error: 调用错误,必须传递参数:标题
    

    4. 动态创建函数

    动态创建函数是一种基于字符串动态生成函数的动态机制,通常用于动态表单的规则验证中,第一个形参是用逗号分隔的实参列表,最后一个形参是函数体的逻辑代码:

    const multiplyFn = new Function(
        "num1",
        "num2",
        "num3",
        "return num1*num2*num3"
    );
    console.log(multiplyFn(1, 2, 3)); // 6
    // ES6
    const multiply = new Function(
        "...numbers",
        "return numbers.reduce((acc,current) => acc * current, 1)"
    );
    console.log(multiply(1, 2, 3)); // 6
    

    5. 清空数组

    简单的数组清空方式是改变其 length ,如下代码片段:

    const arrayCities = ["北京", "上海", "广州", "深圳", "天津", "重庆"];
    console.log(arrayCities); // [ '北京', '上海', '广州', '深圳', '天津', '重庆' ]
    // 清空
    arrayCities.length = 0;
    console.log(arrayCities); // []
    

    6. 四舍五入

    小数点的处理,是数字常见的操作,主要涉及的方法是 toFixedMath ,下面代码片段展示常用的方法。

    由于 JavaScript 精度原因导致小数点相加的时候与预期有偏差,下面代码片段展示了四舍五入常见的方法和小数相加的处理:

    const pi = 3.14159265359;
    console.log(pi.toFixed(3)); // 3.142
    
    const sumFloat = 0.1 + 0.2;
    console.log(sumFloat); // 0.30000000000000004
    console.log(sumFloat.toFixed(1)); // 0.3
    

    Math 方法中常见用于取整的包括:Math.round() 舍入到最接近的整数, Math.floor() 向下舍入, Math.ceil() 向上舍入。最接近数学意义上四舍五入的方法就只有 toFixed ,如下代码片段所示:

    const pi = 3.14159265359;
    console.log(pi.toFixed(0)); // 3
    console.log(Math.floor(pi)); // 3
    console.log(Math.ceil(pi)); // 4
    console.log(Math.round(pi)); // 3
    
    const num2 = 3.5;
    console.log(num2.toFixed(0)); // 4
    console.log(Math.floor(num2)); // 3
    console.log(Math.ceil(num2)); // 4
    console.log(Math.round(num2)); // 4
    

    7. 数组项的对象解构

    数组项的对象解构在解析 CSV 格式的数据非常实用,请看下面的代码片段:

    const csvAddressDetail = "广东省,深圳市,南山区,科技园北区科技园大厦";
    
    const arrayAddress = csvAddressDetail.split(",");
    const { 0: province, 1: city, 2: district, 3: address } = arrayAddress;
    
    console.log(province, city, district, address);  // 广东省 深圳市 南山区 科技园北区科技园大厦
    

    当然还可以跳过一些索引,如下:

    const arrayAddress = csvAddressDetail.split(",");
    const { 1: city, 3: address } = arrayAddress;
    
    console.log(city, address); // 深圳市 科技园北区科技园大厦
    

    8. 变量数字转换

    将值转换为数字,特别是将字符串转换为数字,是经常会用到的,有许多方法可以进行转换,这里展示一些常见的方式:

    console.log(+"15"); // 15
    console.log(+true); // 1
    console.log(+false); // 0
    console.log(+null); // 0
    console.log(Number("15")); // 15
    console.log(parseInt("15", 10)); // 15
    console.log(parseFloat("15.42")); // 15.42
    

    9. 获取文件扩展名

    下面的代码片段展示了通过一个完整路径或者文件名称获取文件相应的扩展名称方法:

    const arrayFiles = [
        "/attach/pics/logo.png",
        "logo.svg",
        "template.xlsx",
        "template.doc",
    ];
    const getExtName = (fullpath) => {
        const root = fullpath.split(/[\\/]/).pop();
        const pos = root.lastIndexOf(".");
        return root === "" || pos < 1 ? "" : root.slice(pos + 1);
    };
    
    const arrayExtNames = arrayFiles.map((item) => getExtName(item));
    console.log(arrayExtNames); // [ 'png', 'svg', 'xlsx', 'doc' ]
    

    10. 普通函数定义

    假设需要定义一个函数,给定一些参数和函数,然后使用这些参数执行这个函数,代码片段展示一个计算器的功能及扩展运算符的使用,如下代码:

    const calculator = (operation, ...numbers) => {
        return operation(...numbers);
    };
    function add(...numbers) {
        return numbers.reduce((acc, num) => acc + num, 0);
    }
    function subtract(...numbers) {
        return numbers.reduce((acc, num) => acc - num, 0);
    }
    function multiply(...numbers) {
        return numbers.reduce((acc, num) => acc * num, 1);
    }
    console.log(calculator(add, 1, 2, 3, 4, 5)); // 15
    console.log(calculator(subtract, 20, 12, 1)); // -33
    console.log(calculator(multiply, 1, 2, 3, 4)); // 24
    
    // 打印JSON数据的 title 属性
    function printTitle({ title }) {
        console.log(title);
    }
    const article = {
        title: "JavaScript 函数定义",
        description: "函数定义方式",
    };
    printTitle(article); // JavaScript 函数定义
    

    下载网 » 每天学习 10 个实用Javascript代码片段(六)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元