• 本周学习总结(原生+Echarts地图)


    本周主要想完成工作中大屏地图相关的知识,所以学习的时间不是很长

    dsa.js(数据结构)

    拖了两个星期还没看,等啥时候继续研究算法和数据结构再看源码
    

    GoJS

    有时间要好好研究下
    https://github.com/NorthwoodsSoftware/GoJS
    

    sketchjs 画图

    http://soulwire.github.io/sketch.js/
    

    发现一个api直接看怎么实现的

    https://collect.js.org/api
    

    JavaScript 语言精髓

    https://lxchuan12.github.io/js-book/#array
    

    对象

    属性名可以是包括空字符串在内的所有字符串

    属性值可以是除了undefined值之外的任意值

    检索.[]

    推荐点`.`表示法,尝试从undefined的成员属性中取值将会导致TypeError异常
    `更新` 如果属性名已经存在对象里,那么属性的值会被替换,如果之前没有这个属性名,就会将该属性将被扩展到对象里
    `引用` 对象通过引用来传递,他们永远不会被复制
    `原型` 所有通过对象字面量创建的对象都链接到`Object.prototype` 创建新对象时,可以选择某个对象作为它的原型
    原型连接只有在检索值得时候才被用到,如果尝试去获取对象某个属性值,但对象没有此属性名,那么就会从原型中获取属性值,如果那么原型对象也没有该原型中寻找,只要最后达到Object.prototype,
    如果想要得属性完全不存在原型链中,那么结果就是`undefined`值,这个过程称为委托
    

    underscore源码解读

    https://github.com/lessfish/underscore-analysis
    
    https://yoyoyohamapi.gitbooks.io/undersercore-analysis/content/base/%E7%BB%93%E6%9E%84.html
    

    void 0 代替undefined

    1.   低版本IE中能被重写,但是undefined在ES5已经是全局对象的一个只读属性了,他不能被重写,但是在局部作用域中,还是可以被重写的
        const add=()=>{
          let undefined=3;
          console.log(undefined)
        }
        add();//3
    
    2. void运算符能对给定的表达式求值,然后返回undefined,
        也就是void后面随便跟上一个表达式,返回的都是undefined
    其中   void 0 最短
    void 1      //undefined
    void (1+1)   //undefined
    void (new Date())  //undefined
    为了节省字段,很多代码压缩工具,正是将undefined用 void 0 替换
    
     
    0.._    你也可以用这个(这个更短)    其实的意思就是 0['_']
    
    使用 == 还是有一定的风险
    console.log(undefined == null) //true
    console.log(undefined !== null) //true
    

    call 和apply 的异同

    相同点

    1. 都是改变this的指向

    2. 都可以只传递一个参数

      function doSth(){
        console.log(this);
      }
      console.log(doSth.apply('0'))//[String: '0']
      console.log(doSth.call(true))//[Boolean: true]
      

    不同点

    apply只接收两个参数,第二个参数可以是数组也可以是类数组,其实也可以是对象,后序参数忽略不计

    function doSth(a,b){
      console.log(this);
      console.log([a, b])
    }
    console.log(doSth.apply('0',[1,2]))
    // [String: '0']  [1,2]
    console.log(doSth.call(true,1,2))
    //[Boolean: true]  [1,2]
    

    函数的第一个参数 thisArg值被指定为nullundefined 时,this 值会自动替换为指定全局对象,原始值则会自动包装,也就是new Object()

    判断对象

    把类型为function 和Object 变量都算做对象,而且去除掉null
    
    const isObject = obj => {
      let val = typeof obj;
      return val === 'function' || val === 'object' && !!val
    }
    //简写
    const isObject = obj =>
      (val => val === 'function' || val === 'object'&&!!val)(typeof obj)
    

    判断其他类型

    'Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error' 这些类型的判断

    const _ = {};
    ['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'].forEach(val => {
      _['is' + val] = obj => Object.prototype.toString.call(obj) === '[object ' + val + ']'
    })
    

    判断NaN

    const isNaNs=val=>typeof val==='number'&&val!==val;
    

    判断元素是否是DOM元素

    const isElement = type => !!(type && type.nodeType === 1)
    

    判断两个数是否相等

    const eq = (a, b) => a === b && (a !== 0 || 1 / a === 1 / b)
    

    位运算

    num & 1   相当于  num%2
    

    js-base64

    https://github.com/dankogai/js-base64/blob/master/base64.js
    
    打印编码表
    var b64chars
      = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    //b64tab 是编码好的一个对象
    var b64tab = function(bin) {
      var t = {};
      for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
      return t;
    }(b64chars);
    
    //简化
    let b64 = (()=>
        'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.
        split('').reduce((acc, val,index) => {
            acc[val]=index;
            return acc
        },{})
    )()
    

    原生技巧

    const isInt=x=>x%1===0;
    const isObject=obj=>Object.prototype.toString.apply(obj)==='[object Object]';
    
    查某个字符在字符串的重复次数
    const count = (str, substr) => {
      let count = 0;
      let pos = str.indexOf(substr)
      while (pos >= 0) {
        count++
        pos = str.indexOf(substr, pos + 1)
      }
      return count
    }
    
    
    let jStat = {}
    
    function extend(obj) {
        let i, j
        if (arguments.length === 1) {
            for (j in obj) {
                jStat[j] = obj[j]
            }
            return this
        }
        for (i = 1; i < arguments.length; i++) {
            for (j in arguments[i]) {
                obj[j] = arguments[i][j]
            }
        }
        return obj
    }
    extend({name:'age',age:'xxx',aa:'vvv'})
    console.log(jStat)
    //{ name: 'age', age: 'xxx', aa: 'vvv' }
    
    //简化
    const extend = (...obj) => {
        obj.forEach(val => {
            Object.keys(val).forEach(item => {
                jStat[item] = val[item]
            })
        })
        return jStat
    }
    
    
    console.log(extend({name: 'age'},{age:'xxx'}))
    //{ name: 'age', age: 'xxx' }
    
    const min = arr => {
      let i = 0,
        low = arr[0];
      while (++i < arr.length) {
        if (arr[i] < low) {// max   arr[i]>low
          low = arr[i]
        }
      }
      return low
    }
    
    const sum = arr => {
      let sum = 0;
      let i = arr.length;
      while (--i >= 0) {
        sum += arr[i]
      }
      return sum
    }
    
    中位数
    先排序
    偶数  8    4,5位数的和除以2
    奇数  就是中间的那个数
    

    互斥

    xor(true, true);   // false
    xor(true, false);  // true
    xor(false, true);  // true
    xor(false, false); // false
    
    const xor = (...args) => args.reduce((a, b) => !(a && b) && !(!a && !b));
    

    解构

    let o = {
      name: 'aaa',
      age: 'bbb',
      xxx:'ccc'
    };
    let {name, age} = o;
    console.log(name, age);
    //'aaa'   'bbb'
    
    for (let item in o) {
      console.log(item);//name age
    }
    
    let {name,...args}=o;
    console.log(name); //aaa
    console.log(args);//{ age: 'bbb', xxx: 'ccc' }
    

    一道有趣的面试题

    let a={name:'xxx'}
    let c={key:'xxx'}
    let b={};
    b[a]=123;// 属性的a 从对象转成字符串 [object Object]
    b[c]=345;// c 同上
    console.log(b)//{ '[object Object]': 345 }
    

    模板字符串(标签模板)

    它可以紧跟在函数后面,该函数将调用来处理这个模板字符串,称为"标签模板"
    //也就是第一个参数是字符串切割的数组,第二个参数是一个迭代的类数组,也就是变量
    const template=(strings,...keys)=>{
        console.log(strings) //[ 'wo shi', 'yige sha ', '' ]
        console.log(keys) //[ '我', '傻' ]
        return keys  //可以用return 返回自己需要的
    }
    let a='我'
    let b='傻'
    let c=template`wo shi${a}yige sha ${b}`
    console.log(c) //[ '我', '傻' ]
    

    angular8的时候你发现使用@ViewChild编辑器报错

    父组件拿到子组件的ID
      @ViewChild('unable',{static:true}) whose!: ElementRef;
    

    Echarts 地图相关知识

     let seriesA=[
                        {
                            type:'lines', //攻击线的球
                            zlevel:2,  //Canvas 分层,大的在小的上面
                            effect:{ // 线特效的配置
                                show:true,//显示特效
                                period:2,//箭头指向速度,值越小速度越快
                                trailLength: 0.01, //特效尾迹长度[0,1]值越大,尾迹越长重
                                symbol: 'arrow', //箭头图标
                                symbolSize: 5, //图标大小
                            },
                            lineStyle:{
                                normal:{//正常的模式
                                     1, //尾迹线条宽度
                                    opacity: 1, //尾迹线条透明度
                                    curveness: .3 //尾迹线条曲直度
                                    color:'颜色'
                                }
                            },
                             data:[
                                [
                                    {coord:[127.9688,45.368],value:0.88}, //起点
                                    {coord:[126.9688,45.868]}//终点
                                ],
                                 ...
                            ]
                        },
                       // 涟漪
                        {
                            type: 'effectScatter', //涟漪特效,就是地址的波纹
                            coordinateSystem: 'geo',//坐标系:使用地理坐标系
                            zlevel: 2,// 分层,小的图新会被大的图形覆盖
                            rippleEffect: { //涟漪特效
                                period: 4, //动画时间,值越小速度越快
                                brushType: 'stroke', //波纹绘制方式两种 stroke, fill
                                scale: 4 //波纹圆环最大限制,值越大波纹越大,就是半径
                            },
                            label: {//图形的标签
                                normal: {//默认模式
                                    show: true,//显示标签(文字)
                                    position: 'right', //显示位置
                                    offset: [5, 0], //偏移设置,[x,y]
                                    formatter: function(params) { //圆环显示文字;标签内容格式器
                                        return params.data.name;
                                    },
                                    fontSize: 13
                                },
                                // emphasis: {// 高亮的标签和图形样式,就是鼠标附上去,标签的变化
                                //     show: true
                                // },
         				   },
                            symbol: 'circle',//起点:标记的图形
                            // symbolSize:8,  默认为10
         			       data:[
                                  {name:'黑龙江',value:[127.9688,45.368,0.88]},
                                    ...
                                ]
                        },
                            //被攻击点 ,跟攻击点的属性类似
                            //type:'scatter' //气泡图
                            //symbol: 'pin',
                    ]
    
     let seriesA=[
                        {
                            type:'lines', //攻击线的球
                            zlevel:2,  //Canvas 分层,大的在小的上面
                            effect:{ // 线特效的配置
                                show:true,//显示特效
                                period:2,//箭头指向速度,值越小速度越快
                                trailLength: 0.01, //特效尾迹长度[0,1]值越大,尾迹越长重
                                symbol: 'arrow', //箭头图标
                                symbolSize: 5, //图标大小
                            },
                            lineStyle:{
                                normal:{//正常的模式
                                     1, //尾迹线条宽度
                                    opacity: 1, //尾迹线条透明度
                                    curveness: .3 //尾迹线条曲直度
                                    color:'颜色'
                                }
                            },
                             data:[
                                [
                                    {coord:[127.9688,45.368],value:0.88}, //起点
                                    {coord:[126.9688,45.868]}//终点
                                ],
                                 ...
                            ]
                        },
                       // 涟漪
                        {
                            type: 'effectScatter', //涟漪特效,就是地址的波纹
                            coordinateSystem: 'geo',//坐标系:使用地理坐标系
                            zlevel: 2,// 分层,小的图新会被大的图形覆盖
                            rippleEffect: { //涟漪特效
                                period: 4, //动画时间,值越小速度越快
                                brushType: 'stroke', //波纹绘制方式两种 stroke, fill
                                scale: 4 //波纹圆环最大限制,值越大波纹越大,就是半径
                            },
                            label: {//图形的标签
                                normal: {//默认模式
                                    show: true,//显示标签(文字)
                                    position: 'right', //显示位置
                                    offset: [5, 0], //偏移设置,[x,y]
                                    formatter: function(params) { //圆环显示文字;标签内容格式器
                                        return params.data.name;
                                    },
                                    fontSize: 13
                                },
                                // emphasis: {// 高亮的标签和图形样式,就是鼠标附上去,标签的变化
                                //     show: true
                                // },
         				   },
                            symbol: 'circle',//起点:标记的图形
                            // symbolSize:8,  默认为10
         			       data:[
                                  {name:'黑龙江',value:[127.9688,45.368,0.88]},
                                    ...
                                ]
                        },
                            //被攻击点 ,跟攻击点的属性类似
                            //type:'scatter' //气泡图
                            //symbol: 'pin',
                    ]
    
  • 相关阅读:
    HDU4348To the moon主席树,区间修改
    不修改的主席(HJT)树-HDU2665,POJ-2104;
    斐波那契数列性质
    HDU-2795Billboard+对宽度建立线段树
    BZOJ-3343教主的魔法+分块(大块排序二分)
    BZOJ4034 [HAOI2015]树上操作+DFS序+线段树
    ECfinal-D-Ice Cream Tower-二分+贪心
    codeforce617E-XOR and Favorite Number莫队+异或前缀和
    BZOJ1878[SDOI2009]HH的项链+莫队算法模板
    POJ-1222EXTENDED LIGHTS OUT-位运算枚举模板
  • 原文地址:https://www.cnblogs.com/fangdongdemao/p/11408701.html
Copyright © 2020-2023  润新知