# JavaScript 待整理
# cdn-content delivery network 内容分发网络
- CDN 是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,
使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率 - 静态资源 js css 图片等,cdn加载后支持缓存
- 第三方资源 vue vue-router vuex lodash echarts element-ui等
需修改 webpack 配置
<html>
<head>
<link href="https://cdn.bootcss.com/element-ui/2.4.4/theme-chalk/index.css" rel="stylesheet">
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
<script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script>
<script src="https://cdn.bootcss.com/vuex/3.0.1/vuex.min.js"></script>
<script src="https://cdn.bootcss.com/three.js/100/three.min.js"></script>
<script src="https://cdn.bootcss.com/echarts/4.1.0/echarts.min.js"></script>
<script src="https://cdn.bootcss.com/axios/0.17.1/axios.min.js"></script>
<script src="https://cdn.bootcss.com/element-ui/2.4.4/index.js"></script>
<script src="https://cdn.bootcss.com/babel-polyfill/6.26.0/polyfill.min.js"></script>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
module.exports = {
externals: {
'vue': 'Vue',
'vue-router': 'VueRouter',
'vuex': 'Vuex',
'three': 'THREE',
'echarts': 'echarts',
'axios': 'axios',
'element-ui': 'ElementUI',
'babel-polyfill': '_babelPolyfill'
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# async/await
- 链接 (opens new window)
- await 命令后面的 Promise 对象,运行结果可能是 rejected,所以最好把 await 命令放在 try...catch 代码块中。
async function myFunction() {
try {
await somethingThatReturnsAPromise();
} catch (err) {
console.log(err);
}
}
// 另一种写法
async function myFunction() {
await somethingThatReturnsAPromise().catch(function (err){
console.log(err);
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 几种继承的方法
- 链接 (opens new window)
- 原型链继承
function parent2() {
this.name = 'lee'
this.age = 10
this.arr = [1, 2]
}
parent2.prototype.say = function() {
console.log('say hello')
}
function child2() {
this.addr = 'hz'
}
child2.prototype = new parent2()
var c1 = new child2()
var c2 = new child2()
console.log(c1.name, '原型链继承') // lee
console.log(c2.age, '原型链继承') // 10
// 可以继承父类中的方法
console.log(c1.say(), '原型链继承') // say hello
c1.arr.push(3)
console.log(c2.arr, '原型链继承') // [1, 2, 3]
console.log(c1.addr, 'addr')
c1.addr = 'nj'
console.log(c1.addr, 'addr')
console.log(c2.addr, 'addr')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
- 构造函数继承
子类构造函数向父类构造函数传参
function parent1() {
this.name = 'ben'
this.age = 10
}
parent1.prototype.say = function() {
console.log('say hello')
}
function child1(addr) {
// 通过call()方法改变child1的this指向使子类的函数体内执行父级的构造函数从而实现继承效果
parent1.call(this)
this.addr = addr || 'qu'
}
// 可以传参
var inherit1 = new child1('hang')
console.log(inherit1.addr, 'addr')
console.log(inherit1.name, 'name')
console.log(inherit1.age, 'age')
// 无法继承 say() 方法
// console.log(inherit1.say(), 'say()') // Uncaught TypeError: inherit1.say is not a function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# JavaScript 运行机制详解
- http://www.ruanyifeng.com/blog/2014/10/event-loop.html
# 数组对象
# Array.from()
- Array.from(object, mapFunction, thisValue)
- from() 方法用于通过拥有 length 属性的对象或可迭代的对象来返回一个数组
Array.from('123', (el) => el + 'a') // ["1a", "2a", "3a"]
Array.from([1, 2, 3]) // [1, 2, 3]
1
2
2
# forEach()
- 只能遍历数组,不能中断,没有返回值(或认为返回值是 undefined )
# 置换元素和非置换元素
- 置换元素
浏览器根据元素的标签和属性,来决定元素的具体显示内容
例如:浏览器根据<img>
标签的src属性显示图片。根据标签的type属性决定显示输入框还是按钮。
<img><input><textarea><select><object>
- 非置换元素
浏览器中的大多数元素都是不可置换元素,即其内容直接展示给浏览器。
例如<label>
标签,<p>
标签里的内容会被浏览器直接显示给用户。
# DOM 事件流
- 事件捕获阶段
- 处于目标阶段
- 事件冒泡阶段
# css 可继承元素
- 所有元素可继承:visibility和cursor。
- 内联元素可继承:
letter-spacing、word-spacing、white-space、line-height、color、font、font-family、
font-size、font-style、font-variant、font-weight、text-decoration、text-transform、direction。 - 终端块状元素可继承:text-indent和text-align。
- 列表元素可继承:list-style、list-style-type、list-style-position、list-style-image
# clientWidth
- ele.clientWidth = 宽度 + padding
- ele.offsetWidth = 宽度 + padding + border
#
- 定义嵌入的内容,比如插件
- 必须有 src 属性
# JSON.stringify(value, replacer[, space])
- 将一个 JavaScript 对象或者数组 转换为一个 JSON 字符串
如果指定 replacer 是一个函数,则可以选择性地替换值,或者 replacer 是一个数组,
则可以选择性的包含数组指定的属性
space 指定缩进用的空白格,数字代表多少个空格,少于10.如果是字符串,将该字符串作为空白(length大于10,则取前10) - 实例参考 js/instance.js
# 根据分辨率设置字体大小方法
let scale = Math.max(document.body.offsetWidth / 1200, 1) // 倍数
// font-size: 14px * scale
1
2
2
# Object.keys()
- 返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致
# Object.is()
- 判断两个值是否是相等的值
# 禁用右键
<div class="main" oncontextmenu="return false"></div>
1