Monthly Archives: July 2017

Mac软件推荐-Mounty

前言

在Mac上面访问NTFS格式的移动设备或者分区很简单,但是如果你要对NTFS进行写操作,就得使用其他的方式,比如打开Mac自身支持NTFS的读写 、购买付费软件NTFS For Mac 、Paragon NTFS等,还或者通过免费软件,比如下面要介绍的一款Mounty
通过终端工具等系统命令操作很麻烦,特别是对不懂命令行的人来说更加头疼。如果是付费软件那么你就得支持一笔费用,此费用还不小,每当Macos或者付费软件版本大更新的时候就会进行一次更新,那这次更新当然不是免费的,你还得付费这次的升级费用。
我找了很多个免费的NTFS读写工具,终于找到了一款非常满意的NTFS读写工具并且支持中文,但是存在一些小问题,可能不该叫它工具,该叫App。如果你觉得好用,我非常赞同你支持开发者捐赠费用,通过下图所标记的地方进行捐赠
捐赠
Continue reading

ES6-Class类

书籍参考:《ECMAScript 6入门》 作者:阮一峰
文档参考:MDN

概念

ES6提供了Class语句用于更的理解语义以及更接近传统的编程语言的写法。Class可以当作ES5构造函数的一个语法糖。
传统的构造函数以及继承方法如下面这样来写的:

function Getname() {
    this.name = 'wyz';
    this.age = '29';
}
// 如果我们需要定义一个给所有基于Getname构造函数使用的方法
// 那么我们必须通过prototype对象上定义
Getname.prototype.getName = function(){
    return (`Name: {this.name}, Age:{this.age}`);
}
let gname = new Getname();
gname.getName(); //"Name: wyz, Age: 29"

Continue reading

ES7-async函数

参考文档:MDN

概念

ES7提供了一个异步解决方案async函数容易,它的作用非常简单,几个异步操作并且这几个是有依赖的,如果按照我们往常的使用方法有几种,下面是一个读取文件的例子,需要读取文件1-3.txt,首先看看callback的写法:

readFile('1.txt', (err, data) => {
    if(err) {return err}
    let data1 = data;
    readFile('2.txt', (err, data) => {
        if(err) {return err }
        let data2 = data;
        readFile('3.txt', (err, data) => {
            if(err) {return err}
            let data3 = data;
            return dataAll = data1.toString() + data2.toString() + data3.toString();
        });
    });
});

Continue reading

es6-promise

书籍参考:《ECMAScript 6入门》 作者:阮一峰
文档参考:MDN

概念

Promise最初在社区提出的一个异步解决的方案,最后ES6将它加入了正式的标准,并规定了统一的写法。
在使用Promise之前,你需要注意下面几个点:
1.Promise有三个状态:Pending(进行中)Resolved(已完成)Rejected(已失败),这三个状态我们无法去改变,并且在一个Promise中只有两个可能,一种是从PendingResolved,另一种是PendingRejected。当结果发生后,这个状态就凝固了,也就是说我们无法去改变Promise对象的任何状态,如果再次调用这个Promise对象,返回的将是凝固状态的结果。
2.Promise在执行的过程中无法取消,并且我们也无法知道它执行到哪一步,我们只能知道返回的是已完成还是已失败。
3.Promise实例创建后会立即执行
下面的代码部署了一个Promise对象异步加载图片的例子,可以看到用Promise对象来编写异步代码是非常的清晰。
Continue reading

ES6-Generator函数

书籍参考:《ECMAScript 6入门》 作者:阮一峰
文档参考:MDN

概念

ES6提供了一种Generator函数,用来解决异步编程的方案,可以通过yield命令来控制函数内部执行与暂停,它与传统的函数声明非常相似,但是有一点是,是函数声明关键字后面跟了一个星号*,而且在函数内部通过yield命令来控制函数的行为,在外面使用next方法来执行函数内部的代码,直至下一个yield命令。
先看看普通函数是怎么声明

function g(){
    let value = '这是普通函数';
    console.log(value);
}
g();    // '这是普通函数'

下面是一个Generator函数的声明使用

function* g(){
    yield '这是Generator函数';
}
let gen = g();
gen.next(); // {value: "这是Generator函数", done: false}
gen.next(); //{value: undefined, done: true}

Continue reading

ES6-iterator遍历接口

书籍参考:《ECMAScript 6入门》 作者:阮一峰

Iterator概念

ES6发布后Javascript的数据集合对象有ArrayObjectMapSet四种,我们同时知道在Array中,我们可以放对象,Object中我们一样可以放Array,四种数据集合对象都可以相互交叉使用。
那么问题来了,如果在一个数据集合对象中含有多个不同数据集合对象的类型,那么这时候就需要一种接口的机制,来处理不同的数据集合了。
Iterator有三个作用:

  1. 为各种数据接口提供一个统一的访问接口
  2. 使数据接口的成员能够按照某种次序排序
  3. ES6新遍历名利 for…of循环

按照《ECMAScript 6入门》这本书中的4个步骤就能很好的解释Iterator遍历过程

  1. 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
  2. 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。

  3. 第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。

  4. 不断调用指针对象的next方法,直到它指向数据结构的结束位置。

用一个代码段来实现上面的4个点,也就是来实现一个Iterator遍历器
Continue reading

ES6新特性-Map和WeakMap

参考文档:MDN

Map结构

在Javascript中,对象是以键值对的方式存在的,其中的键名是以字符串或者数值以及ES6提出的新的数据类型Symbol方式存在的,比如下面:

let m = {
    k: 1,
    2: 4
}
m.k; // 1
m[2]; //4

但是无法使用引用类型数据作为键名:

const body = document.getElementsByTagName('body')[0];
let m = {};
m.k = 1;
m[body] = 4;
m; // {k: 1, [object HTMLBodyElement]: 4}
m['[object HTMLBodyElement]']; // 4
/*
    从这里看出来其实当我们用DOM对象作为m属性的时候,
    实际上并没有把DOM对象作为键名,而是通过把DOM对象
    toString()方法的返回字符串值当作了键名。
*/

Continue reading

es6新特性:Set和WeakSet

书籍参考:《ECMAScript 6入门》 作者:阮一峰
文档参考:MDN
ES6提供了两个新的数据结构:Set和WeakSet数据结构,两个结构很相识,但是有一点区别。

Set数据结构

Set数据结构是一个类数组数据结构,但是它和数组有一点区别不同的是,Set数据结构的值是唯一的,也就是说没有重复值,Set数据结构内部判断两个值是否相等类似于我们使用的精确等运算符(===),所以"1" 不等于 1但是区别在于NaN相等。Set的参数接受一个数组或类似数组的对象,它将所有元素添加进新的Set中:

var c = new Set([1,2,3,4,4]); //注意这里添加了两个4
c;  // {1,2,3,4}  只添加了一个4,这也就说明了Set数据结构的值唯一性。

Continue reading

es6新数据类型-Symbol

参考:《ES6标准入门教程》 作者:阮一峰

Symbol原始类型

Javascript一共有6种原始数据类型,分别为:

  1. undefined
  2. null
  3. Boolean
  4. Object
  5. String
  6. Array

ES6新增加了一种原始数据类型,也就是说从ES6开始,Javascript一共有7种原始数据类型,全新的数据类型是Symbol类型,Symbol用来声明一个独一无二的值。因为Symbol类型返回的是一个原始类型值,不是返回的对象,也不能添加属性,所以在Symbol函数前不能使用new命令。
Continue reading

ES6箭头函数

参考:《ES6标准入门教程》 作者:阮一峰
在ES6中允许了一种新函数方式“箭头函数”,它大概的如下:

var a = (x) => x;
等同
var a = function(x){
    return x;
}

如果不需要参数,使用一个空括号代表就可以了

var a = () => 1;
等同
var a = function() {
    return 1;
}

如果箭头函数需要在返回之前进行一些逻辑操作,那么需要添加大括号{},并显示的声明return语句,如果没有return语句那么返回的是一个undefined:
Continue reading