变量的解构

老实讲,刚刚接触ES6时,我对变量的解构是抗拒的,因为总是很难理解,不管是数组、字符串、对象都觉得很别扭。

直到发现解构在实际开发中还是有一席之地的。

数组的解构

在ES5之前,我们声明数组一般都是这样

1
2
3
4
var arr = ['a','b','c']
console.log(arr[0]) //a
console.log(arr[1]) //b
console.log(arr[2]) //c

而有了变量解构后

1
2
3
4
let [a, b, c] = ['a', 'b', 'c'];
console.log(a) //a
console.log(b) //b
console.log(c) //c

Read More

深入ES6 (八) Generator与async

Generator

Generator函数算是一个状态机,或者说他是一个具有Iterator接口特性的函数。

1
2
3
4
5
6
7
function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}
var hw = helloWorldGenerator();

Generator函数与普通函数之间的区别有两点:

1:函数名前有个*

2:yield表达式

Read More

谈谈js的继承

JS的继承

前一阵时间一个去面试的朋友问我js的继承一共有多少种?分别怎么实现的?我脑子一蒙,想了想说三四种吧,原型链、构造函数。。还有混合的怎么实现来着?于是乎我意识到了,我需要稳固一下基础知识了,哈哈。

1、原型链继承

这种继承应该很容易理解,通过原型链的赋值,从而实现继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function animal(name) {
this.name = name || "未知"
}
animal.prototype.eat = function(food) {
console.log(this.name + '正在吃:' + food);
};
function dog(){
}
dog.prototype = new animal();
这种继承方式的特点是当父级发生改变时,子集随之也改变

Read More

深入ES6 (七) Promise

Promise

Promise是异步的一种解决方案,比传统的回调函数更加合理并且强大。

ES6中,Promise是一个对象,这个对象中,有三个状态:1进行中(pending)、2已成功(fulfilled)、3已失败(rejected)。

Promise可以算是一次性容器,Promise这个对象一旦改变状态,该容器即生命周期结束。
也就是说Promise只能发生一次状态改变,只有两种可能:
1、从进行中转为已成功
2、从进行中转为已失败

正是因为这样的特性,导致这Promise有一些局限性,让Promise只能有短暂的生命周期,如果不改变状态,Promise会一直存在,消耗缓存。

Read More

微信浏览器中title的赋值问题

微信浏览器中的title

在qq浏览器中,浏览器内核属于腾讯自己研发的X5浏览器内核(其实就是从chrome内核魔改了一下),而在微信浏览器中,在X5这个本来就是阉割版的内核中,又做了阉割。。。

其中一个比较恶心的问题在于一个网页在微信浏览器中打开时,不管我们给页面设置多少次title,微信浏览器只会抓取一次页面对title的赋值。

1
<title>我是标题</title>
1
document.title = "我也是标题"

如上两段代码同时放在一个页面中,微信浏览器只会做一次赋值,事实上我们正常使用的话也就是显示

1
2
3
4
5
```javascript
document.title = "标题1"
console.log(document.title)//标题1

Read More

深入ES6 (六) Proxy

Proxy

Proxy在英文中的意思是代理的意思,而在ES6中的意义可不像是代理,而像是拦截:”intercept”。

Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。

Read More

深入ES6 (五) class

前言

今天来简单的聊一聊ES6中的class。我们都知道javascript这们语言能火起来,无非是ajax的兴起,而javascript中的面相对象,甚是让人难以理解,与传统语言的面向对象有很大差别,在ES6中,ECMAscript标准也看到了js中面向对象的不便,所以就有了今天的class。


正文从这里开始,ES6中的class从用法上可以理解是和传统语言的面向对象一样的思想,但是实际上class的面向对象思想还是javascript中的原型链思想,所以可以理解为ES6中的class就是一个语法糖,除了方便我们使用,大部分功能ES5都有。


class的用法

1
2
3
4
5
6
7
8
9
10
11
//定义类
class test {
constructor(x, y) {
this.x = x;
this.y = y;
}
tezmlName(){
console.log("黄兆楠")
}
}

Read More

深入ES6 (四) Module中的export与import

前言

历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他语言都有这项功能,比如 Ruby 的require、Python 的import,甚至就连 CSS 都有@import,但是 JavaScript 任何这方面的支持都没有,这对开发大型的、复杂的项目形成了巨大障碍。

今天来聊聊ES6中比较重要且使用的东西,也就是Module(模块),终于在ES6时,Javascript也具有模块化的功能,ES6中的Module具备着AMD和CMD的双重特性,也就是说,从ES6时代,我们可以告别SeaJs和requireJs了。

Read More

深入ES6 (三) for...of

for…of

在我学习for..of之前,我一会以为被吹捧的for…of有多么多么吊。。。在学习了之后,我感觉for…of相比较forEach、for来讲,不过尔尔。其实不过是像C++、Java、C# 和 Python 语言一样。

前言

Iterator(遍历器概念)

在讲for…of之前,简单介绍一个概念:Iterator。

Iterator的概念其实并不复杂,它其实像是一个javascript语法中的一个接口,或者说方法,如果想使用遍历功能,就需要调用Iterator遍历器功能。


Read More