本周学习总结(原生+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 的异同
相同点
都是改变this的指向
都可以只传递一个参数
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值被指定为
null
和undefined
时,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:{//正常的模式
width: 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:{//正常的模式
width: 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',
]
本周学习总结(原生+Echarts地图)的更多相关文章
- angular2.0学习笔记7.echarts 地图(type:'map')slice undifined 出错问题
在 项目\node_modules\echarts\lib\chart\map.js文件头部 ... ... require("../coord/geo/geoCreator"); ...
- Windows phone 8 学习笔记(8) 定位地图导航
原文:Windows phone 8 学习笔记(8) 定位地图导航 Windows phone 8 已经不使用自家的bing地图,新地图控件可以指定制图模式.视图等.bing地图的定位误差比较大,在模 ...
- Echarts 地图添加自定义区域
使用 Echarts 生成地图时,如果需要添加一些自定义区域,该怎么做呢?请看下面示例. 生成原始地图 index.hmtl 引入 Jquery 和 Echart <!DOCTYPE html& ...
- Echarts 地图上显示数值
Echarts 地图上展示数值,效果如下: 上代码:关键代码用红色 series: [ { //name: '香港18区人口密度', type: 'map', mapType: 'jiangsu', ...
- echarts地图扩展文件使用geoJson格式。
echarts地图扩展文件使用geoJson格式. 1.在线生成 http://ecomfe.github.io/echarts-map-tool/ 这里可以生成省市区的json,但是最多生成到”区 ...
- react使用echarts地图实现中国地图大区展示
日常项目中经常会用到百度地图或者echarts图标展示,今天给大家展示的是如何在react开发项目中使用百度echars的地图展示,把中国地图分为东北大区.华东大区.华南大区.华西大区.华中大区以及华 ...
- Echarts 地图(map)插件之 鼠标HOVER和tooltip自定义数据
在项目开发中,有需要用到地图的地方,百度的echarts地图插件就是个不错的选择, 这里总结一下地图自定义鼠标HOVER时的事件和自定义tooltip数据: 一.鼠标HOVER时的事件: 参照官方文档 ...
- 工作中遇到的有关echarts地图和百度地图的问题
工作中遇到的有关echarts地图和百度地图的问题 *** 前言:在做项目中需要制作一个场景是左边是柱状图,右边是地图,地图上悬浮一个按钮可以切换echarts地图和百度地图.*** 功能: 在点击左 ...
- echarts 地图 动态 展示 结合css+js
echarts地图展示功能非常强大,官网上静态展示的样例非常多了,动态的资料少.研究了下.我眼下实现的通过ajax从server获取数据动态展示地图. 另外,我们有时候希望在地图之上做些自己定义的东西 ...
随机推荐
- 微信测试号:config:invalid url domain
今天调试微信分享的时候,配置参数时一直提示config:invalid url domain,网上找了一下,都说是appId和域名没有绑定.仔细看了下,有绑定没错.又猜测是不是二级域名的问题,因为是测 ...
- tf.reduce_sum() and tf.where()的用法
import tensorflow as tfimport numpy as npsess=tf.Session()a=np.ones((5,6))c=tf.cast(tf.reduce_sum(a, ...
- 高强度学习训练第四天总结:JVM+Redis
JVM 复习了JVM堆内存的几个模块. 复习了JVM的几个控制工具. 复习了JVM发展历史 Redis 复习了Redis的事务控制.
- Java执行shell脚本并返回结果两种方法的完整代码
Java执行shell脚本并返回结果两种方法的完整代码 简单的是直接传入String字符串,这种不能执行echo 或者需要调用其他进程的命令(比如调用postfix发送邮件命令就不起作用) 执行复杂的 ...
- <转>WPF 中的绑定
在WPF应用的开发过程中Binding是一个非常重要的部分. 在实际开发过程中Binding的不同种写法达到的效果相同但事实是存在很大区别的. 这里将实际中碰到过的问题做下汇总记录和理解. 1. so ...
- RHEL7.5 静默安装(silent mode)oracle11gr2数据库软件
如果没有图形界面多可怕,或者图形界面安装总报些奇怪的错误多可怕,静默安装数据库软件了解一下 修改主机名.关闭selinux [root@localhost ~]$ sed -i '3,$d' /etc ...
- centos7 apache 配置ssl
因为小程序后台服务器需要是https的,所以这两天赶紧百度了一波什么是https以及怎么将服务器升级为https.虽然网上教程很多但因具体环境可能有差异导致一路遇坑,摸爬滚打了两天终于弄好了.遂记下一 ...
- JS高阶---事件循环模式(事件轮询)
大纲: 相关知识点: 主体: (1)模型原理 JS部分:初始化代码执行 WebAPIS:执行上下文对象(不是一个真的对象,而是一个抽象的虚拟对象,可以看做栈里的一个区域,包含很多对象) setTime ...
- JS高阶---执行上下文栈
大纲: 主体: 注意:*******函数调用时才会产生上下文栈,声明时不会产生********** 顺序: 概念图: 执行上下文栈的顺序---→后进先出 其他概念图: 当前执行的上下文总是在顶部 全局 ...
- 代码审计-md5()函数
<?php error_reporting(0); $flag = 'flag{test}'; if (isset($_GET['username']) and isset($_GET['pas ...