• 容易被忽略的知识点2


    1.日期 

     let date = new Date();
        let date1 = Date();
    
        console.log(date, date1);
        /* 日期!!!
         date date1 其实不一样!
         date =>object   date*1就返回unix时间戳 小技巧!!!还有几种方式
         Number(date)/date.valueOf()/date.getTime() 都可以获得unix时间戳!
         unix时间戳=>标准iso格式 new Date(unix时间戳);
    
         date1 =>string  date1*1 => NaN
          */
        console.log(date * 1, date1 * 1);
        
        /*  console.log(date.now(), date1.now()); 会报错 要直接Date.now() 返回unix时间戳 */
        console.log(Date.now());
        /* 显示脚本执行时间两种方式
        1. const begin = Date.now(){
           for(){}
           const end = Date.now();
           console.log(end - begin /1000 +"秒"); 就可以得到for循环执行了多少秒
        2. console.time('for');
            for(){}
            console.timeEnd('for');//同样得到for循环执行时间!!!单位ms    
        }
        */

      
     /* 一个日期格式化函数   通过字符串替换实现*/
        function dateformat(date, format = "YYYY-MM-DD HH:mm:ss") {
            const Config = {
                YYYY: date.getFullYear(),
                MM: date.getMonth() + 1,
                DD: date.getDate(),
                HH: date.getHours(),
                mm: date.getMinutes(),
                ss: date.getSeconds(),
            }

            for (const key in Config) {
                format = format.replace(key, Config[key]); 
            }
            return format;
        }
        console.log(dateformat(new Date(), "YYYY/DD/MM HH:mm:ss"));
        // moment.js  优秀的专门的时间处理js库
     

    2. 数组

     //const 定义引用类型【array/object】,可以修改,只要内存地址不变
        /* 
        let array = [1,2,3];
        array[6] = 5;//array只有三个元素,index 0 1 2,当直接设置index 6 的值为5时
        系统默认会用undefined来填充 3 4 5 这个几个位置!!!    
    
     //两中 数组构造方法创建的区别
    
        let array = new Array(1, 2, 3);
        let array1 = Array.of(1, 2, 3);
        console.log(array);
        console.log(array1);
        /* 但是new Array 创建只有一个参数的数组时 */
        let array2 = new Array(6); //这里本意事项创建一个只有一个元素6的数组
        //但其实时创建了一个长度为六,每个元素都是undefined的数组
        console.log(array2.length, array2[2]); //=> 6 undefined
        let array3 = Array.of(6); //创建一个只有一个元素6的数组,使用Array.of()可以解决构造方法创建一个数组时的问题
        console.log(array3);
      
      两个实用的函数:
       .join(',/./?'),将数组元素以逗号、句号、?等符号连接成字符串
        .toString() 将数组每个元素以逗号连接成字符串 / String([1,2,3]) => '1,2,3';!!!     

      Array.from();//转数组方法, 只要这个元素有.length 属性,不管是自带的【string,array 等都可以用length获取长度】,还是对象中加上的length属性【{length:3}】,
    如果是对象,对象的key必须是数字类型索引,不然得到的数组中的元素全部是undefined!!!
        let obj = {
            0: 'a',
            1: 18,
            length: 3
                //第三个元素为undefined 并且length值就是转数组后数组的元素个数!,索引小于length,不够的用undefined填充!!!
        }
        console.log(Array.from(obj));-》 ['a',18,undefined]
     
     /* Array.from(el, function(item){
            //可以接函数-会遍历转换后数组,并对每一项进行后续操作!!!!!! 打印item 为转换后的数组的每一项!
        })  */


       /* 数据操作 
        Array
        .push(el) 尾追加元素 返回数组长度  ==| Array[array.length] = el; ==| array=array[...array,el];
        .pop(el) 尾移除元素 返回弹出元素
        .unshift() 首添加元素
        .shift() 首移除元素 返回弹出元素
        .fill(el, start , end) 从start 到 end 之间用 el 填充【替换】 包括 start end
        .slice(start, end) 【不传参数默认从头截到尾】  起始截取数组 返回截取到的元素  不改变原数组
        .splice(start, num, replacestr1, replacestr2 ...) 从start位置开始截取num个字符 返回截取到的元素数组,改变原数组,如果传递了replacestr 就会把截取走的字符用这个传递的字符替换掉
        .splice(start ,0 ,replacestr1) 从某个位置开始 追加  replacestr1 字符!!!因为删除0个元素么
        */
     
     /* 小例子 移动 数组元素到 指定位置 */
        let aaa = [1, 2, 3, 4, 5, 6];

        function move(arr, from, to) { 
            let newarr = [...arr]; //不希望改变原数组,这里新建一个数组
            let item = newarr.splice(from, 1); //这里返回数组
            console.log(item);
            /* 展开语法小技巧 如果 ... 位于表达式左边,一般表示收集到一个变量里面,位于右边表示以逗号展开数组 */
            newarr.splice(to, 0, ...item); //这里不写展开语法 就要用 item[0]
            return newarr;
        }

        // console.table(move(aaa, 1, 3)); 把数组 aaa的索引1指向的元素移到第index 3
     
        /* 

    清空数组n种方式

        直接赋值[];【
        let hd = [1,2,3,4,5];
        let arr = hd;
        hd = [];直接赋值如果有上面这种赋值操作  
        hd是为空了【其实是开辟一块值为空数组的内存空间,让hd指向它】,arr不会为空
        】
        arr.length = 0;
        【  let hd = [1,2,3,4,5];
            let arr = hd; arr hd 都指向一个内存空间
            arr.length = 0; 这样 hd和arr都会清空,因为都指向一个内存空间,并且内存空间为空
        】
        arr.splice(0);//
        循环弹出元素 pop() shift()
         */
     
     
    /* 补 数组操作
        Array
        .concat(arr1,arr2 ...) 把arr1,arr2 合并到 array中
        .copyWithin(target,start,end) 把 start 和 end 间的元素 复制【替换目标往后对应位数的元素】到 target位置,
        .indexOf(target,begin) 指定从begin位置开始查找,默认begin ==0
        .lastindexOf(target,begin) //右边开始查找 返回索引 找不到返回-1 严格类型匹配  查9的话 '9'不会被匹配到     
        .includes(),返回boolean 找到立即终止查找循环,
         
        //高效查找
        .find() 返回arr中你要查找的值 找到立即终止查找循环,【引申
        引用类型【arr/obj】的比较,其实是比较内存地址
        let b = []/{};
        let a = []/{};
        let c = a;
        console.log( a == b )=>false
        console.log( a == bc)=>true 地址一样!!
        】

        .findIndex() 返回索引  找到立即终止查找循环,
         */
        let aarr = [1, 2, 3, 4, 5, 6];
        // console.table(aarr.copyWithin(3,1,3));
        /* 模拟find()方法 */
        function find(arr, callback) {
            for (const value of arr) {
                if (callback(value)) return value;
            }
            return undefined;
        }
        let arra = [1, 2, 3, 4, 5, 6];
        console.log(find(arra, function(item) {
            return item == 2
        }));




        /* 排序
       Array =  Array.sort(function(a, b){
            return a-b/b-a;
            //a-b<0 从小到大 表示 a b 位置不变,大的在后面
            //b-a>0 从大到小 表示 a b 位置改变 大的在前面
        })

        排序不仅限于纯数字数组!

          */

        let arrr = [100, 1, 4, 44, 2, 101, 99, 1000, 55];
        arrr = arrr.sort((a, b) => {
            return b - a;
        })
        console.table(arrr);

        let aaarr = [{
            name: 'pc',
            price: 8888
        }, {
            name: 'mobilephone',
            price: 6666
        }, {
            name: 'bike',
            price: 3344
        }];
        /*  排序不仅限于纯数字数组! */
        aaarr = aaarr.sort((a, b) => { //这里的 a,b其实是aaarr的两个item
            return a.price - b.price;
        })
        console.table(aaarr);
        /* 模拟.sort()方法 */

        function sort(arr, callback) {
            for (const n in arr) {
                for (const m in arr) {
                    if (callback(arr[n], arr[m]) < 0) {
                        let temp = arr[n];
                        arr[n] = arr[m]; //大的
                        arr[m] = temp;
                    }
                }
            }
            return arr;
        }
        console.table(sort(arrr, (a, b) => {
            return b - a;
        }))

    3 展开语法

     /* 展开语法 */
        let array4 = ['a', 'b'];
        let array5 = ['c', 'd'];
        array4 = [...array4, ...array5];
        console.log(array4); //其实就把array5的每个元素都压入到array4中去了
        /* 函数内应用 */
        function sum(...args) {
            //使用展开语法把参数都交给args这一个变量接收!!!这里实现多个数相加求和
            return args.reduce((s, v) => {
                return (s += v);
            }, 0)
        }
        console.log(sum(1, 4, 6, 8, 9)); //=> 28
    
        /* DOM节点应用 */
        let divs = document.querySelectorAll('div');
        console.log(divs);
        /*  divs.map(function(item){ //dom节点数组Nodelist 没办法使用map等方法 ,原型链上没有
             console.log(item); 
         }) */
        /* 展开语法 处理 dom节点数组Nodelist 后 就可以使用map方法便利数组啦   */
        [...divs].map(item => {
                console.log(item);
            })
            /* Array.from(divs).map() ok!
            Array.prototype.map.call(divs, function(){})  ok!
            三种方式都可,但是展开语法简单!!! 
             */
  • 相关阅读:
    数学
    数学
    Computer Science
    数学
    Computer Science
    元学习
    数学
    数学
    数学
    数学
  • 原文地址:https://www.cnblogs.com/Hijacku/p/14790336.html
Copyright © 2020-2023  润新知