码迷,mamicode.com
首页 > Web开发 > 详细

nodejs的第四天学习

时间:2016-11-19 23:34:49      阅读:362      评论:0      收藏:0      [点我收藏+]

标签:1.0   目的   需要   读取文件   const   回调函数   推出   rip   color   

一、 ECMAScript6(es2015)es6语法

es6/es2015,在es5的基础上扩展了很多新的功能,我们要学习仅仅是es6中的部分常用新功能,这些功能在使用的时候一定要慎重,因为他们之中有一部分js代码在部分浏览器是不能兼容,但是所有写在服务器端的代码基本都支持es6的写法。

1.0开启严格模式:

如果需要在函数中开启,在函数的第一行加上这段字符串“use strict”,如果需要在js代码中开启,在js第一行加上这个短字符“use strict”。

这是es5中的一个特性,设立“严格模式”的目的,主要有以下几个:

1)消除JavaScript语法的一些不合理、不严谨之处,减少一些怪异行为;

2)消除代码运行的一些不安全之处,保证代码运行的安全;

3)提高编译器效率,增加运行速度;

4)为未来新版本的JavaScript做好铺垫。

注意:

1)正常模式下可以使用直接未声明的变量,但是严格模式下不行

2)正常模式下可以在一个函数中传入两个同名参数,但是严格模式下不行

1.1   定义变量:let (类似于var)

在JavaScript一直有一个bug的取值在var

    1)var声明的变量会有变更量的提升

    2)var没有块级作用域

    3)var可以多次重复定义一个变量

而这些声明在后台开发语言中是绝对不被允许的,为了规范变量的声明es6推出新的关键字let代替var声明变量,let的特点:

    1)let声明的变量不会有变量提升

    2)let 存在块级作用域

    3)let 不能多次重复定义变量

 

注意:使用let关键字要加上“use strict”

1.2   定义变量 const

作用:一旦声明一个常量:

  1)值不能再改变

  2)常量具有块级作用域

  3)不要在块中声明常量

  4)没有变量提升,先声明后使用

  5)不可以声明同名的常量

  6)一定要赋初始值,否则报错

  7)如果声明的是对象,对象的地址不能改变,但是可以改变其内部的属性。

   1.3 字符串的扩展

        如果要判断字符串“hello world”中是否存在“world”,用字符串中的方法只有indexOf,在es6中又为我们提供了其它的方法:

       includes()  :返回布尔值,表示找到了参数字符串

       startsWith(str[,num])  :返回布尔值,表示是否在原字符串开头找到了参数字符串

       endsWith(str[,num])  :返回布尔值,表示参数字符串是否在原字符串的结束位置

       repeat(num) : 将调用的字符串重复num次

注意:num可以是正整数,正小数(小数会四舍五入),甚至是字符串类型的数字,如果是负数或者非数字字符串会报错。

 

1.4模板语法:`模板字符串`

结构:`模板内容${code}`;

注意:code可以是变量,可以是方法名,也可以是js表达式。

   1.5 箭头函数: ()=>{}

js 中使用匿名函数的位置太多了,固定结构为function(){},为了方便书写,es6规定了一种新的写法来简化匿名函数:去掉function改为 => ,结构为()=>{}

      演变过程:

        过程一:去掉function关键字

              arr.each(function(m,n){

         conosle.log(n);

     });

得到:

arr.each((m,n)=>{ console.log(n);});

        过程二:如果只有一句代码可以去掉大括号和return关键字

              arr.each((m,n)=>console.log(n));

        过程三:如果参数只有一个,可以将参数中的小括号去掉

              arr.each(n=console.log(n));

        总结:

        参数特点:

          1)参数只有一个,可以去掉()

           2)参数多个,不能去掉

           3)参数没有,不能去掉

        方法体特点:

          1)方法体只有一句,可以省略{}

           2)方法体只有一句,如果有return,也可以省略return

           3)如果有多句代码,不能省略

箭头函数没有固定的写法,它是根据当前方法的参数和方法的返回值的。

      使用注意点:

         1)箭头函数中的this指向问题:

箭头函数没有自己的this,函数体内部写的this,会顺着作用域去找最近真实存在的this

 

    2)箭头函数内部的this是定义是所在的对象,而不是使用时所在的对象,并且不会改变

 

    3)箭头函数不能作为构造函数:

 

    4)箭头函数中不存在arguments,箭头函数中的arguments指向的是外层的arguments

 

 

二、文件读写核心模块 File System(fs)

   2.1 Buffer 对象:

作用:所有的数据在计算机世界中都是以二进制的形式存在的;不管是我们看到的图片、文字或者浏览器传给服务器和请求以及服务器发给浏览器的响应。所以nodejs为了能够接受和存储这些数据,必须要有能够操作二进制数据的功能,Buffer对象的作用就是用来存储这些二进制数据的。

      使用buffer对象

     1)创建:

        var buffer = new Buffer(5);

      2)清空:

        buffer.fill(0);

      3)写入内容

        buffer.write(‘我就是ABC’);

注意:在buffer中,一个汉字占三个字节,一个英文占一个字节。由于数组的长度是固定死的,将来如果向对象中存储的内容过多可能会造成数据丢失

      4)将数组转为字符串

        buffer.toString();

      5)按需分配数组的长度

        let buf = new Buffer(‘hello world’);

        console.log(buf.toString(););

      Buffer常用操作:

       -new Buffer(参数):创建一个buffer对象

        -buf.write(): 写入内容

        -buf.length:  获取buffer对象中数据的长度

        -buf.slice:   用来获取指定位置的指定长度数据

-buf.toString(编码): 将二进制数据转换成指定编码的字符串,默认是utf-8

-Buffer.isEncoding(编码):判断当前编码格式在nodejs中是否支持。

 

Buffer支持的编码:ascil,utf8node的默认编码,utf16le,ucs2,base64,hex,binary

如果遇到希望nodejs支持中文件gb2312,需要使用第三方包iconv-lite

总结:buffer的学习了解一下三点:

1)明白将来在文件的读写操作中都是在操作buffer对象

    2)了解buffer只支持的几点编码格式

     3)如果遇到不支持的情况可以去找第三方包

2.2 操作目录

操作目录一般分为两种情况:一种是同步操作,一种是异步操作。

  什么是同步:

     做一件事件的时候

  什么是异步:

    做一件事件的时候,做完一部分以后就可以去做其他的事情,当第一件事完毕以后,以后处理后续的事情。

   总结:异步的效率要高很多。

 

a.创建文件夹:mkdir

  步骤:1)引用核心模块

      const fs = require(“fs”);

     2)创建文件夹

      fs.mkdirSync(“./abc”);//不建议用这个方法,同步效率太低

      fs.mkdir(“./abc/a”,function(err){

          判断

      })

  注意:如果不存在abc,没有办法创建a

b.删除文件夹:rmdir

  与上面一致。

  注意点:rmdir只能移除空文件夹

c.判断一个目录是否存在

  fs.exists(path,(exists)=>{})

 

2.3操作文件

  a.写文件(writeFile appendFile

    fs.writeFile(file,data,[,opionts],(err)=>{}) // 覆盖文件内容

    注意:

      1)这个方法如果路径上的文件不存在会创建文件再写入文件,如果目录不存在是不会创建的

      2)每次写入都会将当前文件中的内容覆盖

        fs.appendFile(path,data,(err)=>{});//追加文件

  b.读文件(readFile

    fs.readFile(path,(err,content)=>{})

  c.文件重命名(改)rename

    fs.rename(path,path,(err)=>{});

  d.删除文件(unlink

    fs.unlink(path,(err)=>{})

  f.监控文件watchFile

    fs.watchFile(fileName,{persistent:true,intrval:50},(curr,prev){})

    curr:表示的是最新文件的版本

    prev:表示的是上一次修改之前的版本

    callback: 文件发生修改时候会执行回调函数。

  注意:如果要读取文件以后做其它的事情一定不能把代码放到回调函数之外,不然还没有读完操作就完成了

nodejs的第四天学习

标签:1.0   目的   需要   读取文件   const   回调函数   推出   rip   color   

原文地址:http://www.cnblogs.com/bingo10/p/6081618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!