Node.js基本语法

概要:

数据类型、模板字符串、严格模式、变量的作用域、循环结构、

函数、对象、 全局对象、模块对象、包和NPM

1.数据类型:

  • 原始类型  String\number\boolean....直接赋值即可
  • 引用类型  ES原生对象、Node.js对象、自定义对象...常需要new关键字  
var empObj = new Object();
function Myjob(name,age) {
	this.name = name;
	this.age = age;
}
var ls = new Myjob('hahah',18);
console.log(ls.age);

2.模板字符串(ES6中使用的一个新的字符串的形式)

  • 使用模板方式定义字符串,数据可以实现换行(类似html中的<pre>标签)
  • 可以使用${}拼接变量,并且可以执行运算
var info=`
  用户名:哈哈哈
  密码:123
`;
console.log(info);

 

3、严格模式(ES5中新增的比普通模式更为严格的js运行模式)

  • 在整个脚本文件中使用严格模式,开头"use strict";常用于新项目
  • 在单个函数内启用严格模式,function(){"use strict",....};常用于老项目维护
  • 严格模式下的规则:修改常量的值是非法的(会报错),不允许对未声明的变量赋值、匿名函数的this不再指向全局

4、变量的作用域(全局、局部、ES6中新增块级作用域)

  • 块级作用域:只在当前代码块中使用的作用域
  • 代码块:任何一个{}都是一个代码块:if\for\while...
  • 代码块中使用‘let’声明块级作用域变量,出了代码块便不能使用(可以避免变量冲突,因为出了就没用了)

5、循环结构

  • for...in循环由于遍历对象的成员名
  •  
  • for...of...(ES6):遍历数组的元素值
  • var arr=[1,2,3];
    for(let i of arr){
      console.log(i);
    }

6、函数

  • 匿名函数的自调
  • 
    //匿名函数自调的两种语法
    (function (i) {
      console.log(i)
    })(11111111111111);
    
    +function (i) {
      console.log(i);
    }(11);
  • 箭头函数 (省略了function关键字)  ((i,j参数)=>{....})();等同于(function (i,j参数){...})();!!!箭头函数只适用于匿名函数,若想变成一般函数的话就写成var f1 = (a)=>{};   注意:箭头函数中没有arguements对象,若参数只有一个则(i)可写成 i
  • 关于闭包:闭包实际上就是在一个函数体内部嵌套一个函数,使变量的值保存
  • 
    //时钟
    for(var i=0;i<4;i++){
      setTimeout((num=>{
        return ()=>{console.log(num);}
      })(i),1000);
    }

    7.对象

创建对象的方式:

(1)对象直接量方式:var a = {name:"hahha"}

(2)构造函数方式 function a(b){...}  var a1 = new a(...)

(3)原型继承方式:var parent = new Object();  var child = Object.create(parent);

(4)ES6新增方式:class方式:描述一类事物统一的属性和功能的程序结构(类:相似对象属性和功能的抽象集合)


//使用class时必须启用严格模式
"use strict";
//创建自定义对象
class Emp {
  //构造函数仅用于属性
  constructor(ename,salary){//声明一个构造函数
    this.ename=ename;
    this.salary=salary;
  }
  work(){
    return `${this.ename} is working.`;
  }
  sal(){
    return `${this.ename}'s salary is ${this.salary}.`;
  }
}
//实例化
var e1 = new Emp("tom",8000);

//实现继承
class Programer extends Emp{
  constructor(ename,salary,skills){
    super(ename,salary);
    this.skills=skills;
  }
  work(){
    return super.work()+'skills are'+this.skills;
  }
}
var p1 = new Programer("Jack",1000,"前端");
console.log(p1.ename);
console.log(p1.work());
console.log(p1.skills);

 8.全局对象

 

Node.js中的全局对象是global

  • Global对象的成员属性和成员方法
        1.console 用于向stdout(标准输出)和stderr(标准错误)输出信息。   
        console.log()    //向stdout输出日志信息
        console.info()    //同上
        console.error()    //向stderr输出错误信息
        console.warn()    //同上
        console.trace()    //向stderr输出栈轨迹信息
        console.dir()    //向stdout输出指定对象的字符串表示
        console.assert()    //断言,为真的断言,错误信息不会输出;为假的断言,抛出错误对象,输出错误信息,并且终止脚本的运行,可以自定义错误信息。
        console.time()  console.timeEnd()//测试代码的执时间                                                                                                            注意:console中的成员方法是异步的,输出顺序和书写顺序不一定完全一致。

  • 2.process 进程  

    process.arch    //获取CPU架构类型
    process.platform    //获取操作系统类型
    process.env    //获取操作系统环境变量
    process.cwd()    //获取当前文件所在工作目录
    process.execPath    //获取Node.js解释器所在目录
    process.versions    //获取Node.js版本信息
    process.uptime()    //获取Node.js进程运行时间(s)
    process.memoryUsage()//获取Node.js进程内存使用信息
    process.pid    //获取进程ID号
    process.kill( pid )    //向指定进程ID号发送退出信号

  • 3.定时器   (异步的)

    global.setTimeout()//一次性定时器

    global.setInterval()//周期定时器

    global.setImmediate()//在下次事件循环开始之前立即执行的定时器

    global.nextTick()//本次事件循环结束之后立即执行的定时器

//一个简单的一次性定时器
var counter = 0;
var timer = setTimeout(function () {
  counter++;
  console.log('%d hello',counter);
  clearTimeout(timer);
},1000)

//周期性定时器,输出1,2,3,4,5
var counter2=0;
var timer2=setInterval(function () {
  counter2++;
  console.log(counter2);
  if(counter2>=5){
    clearInterval(timer2);
  }
},1000)

//使用一次性定时器模拟周期性定时器的效果
var counter3=0;
var timer3=setTimeout(function () {
  counter3++;
  if(counter3<=5){
    console.log(counter3);
    setTimeout(arguments.callee,1000)
  }else{
    clearTimeout(timer3);
  }
},1000)

9.模块对象

Node.js中使用Model(模块)来规划不同的 功能对象

模块的分类:
(1)核心分类——Node.js的内置模块

(2)第三方模块

(3)自定义模块

每一个被加载的js文件对应一个模块对象,包含响应的功能和函数

模块中声明的变量或函数的作用域叫做“模块作用域”,这些变量和函数都不是global的成员,默认只能在当前的js文件(当前模块)中使用。
    Node.js启动时运行的第一个模块叫做“主模块”——main module,也是自身模块。
    获取主模块对象:
    process.mainModule
    require.main

    除主模块之外的其他模块都称为子模块。
    默认情况下,某一个模块不能直接使用其他模块中封装的数据,但是每个模块可以导出(exports)自己内部的对象供其他模块使  用,也可用引入(require)并使用其他模块导出的对象。
    每一个模块内部都可以使用一个变量:module,指向当前模块自己。
    //判断当前模块是否主模块
    console.log(require.main===module);
    模块的引入:require()
    (在交互模式下,Node.js自带的模块无需引入,直接使用)  

    导出模块中的属性和方法供其他模块使用:exports

    预定义的模块作用域成员:
    __dirname    //当前模块文件所在的目录
    __filename   //当前模块文件所在的目录以及文件名
    module        //指向当前模块的引用
    module.exports   //指向当前模块中待导出的供其他模块使用的对象
    exports        //指向module.exports对象的引用
    require //引入其他模块,使用其他模块的module.exports对象

--------circle.js-------

//求圆的面积和周长
const PI = 3.14;
var size = function (r) {
  return PI*r*r;
}
var peri = function(r){
  return PI*2*r;
}
exports.s=size;
exports.p=peri;


----------1.js-------------

var c=require('./circle.js');
console.log(c.s(5));
console.log(c.p(5));
//求圆的面积和周长
const PI = 3.14;
function Circle(r) {
  this.size=function () {
    return PI*r*r;
  };
  this.peri=function () {
    return PI*2*r;
  }
}
//零散的输出可以使用exports,但是若是构造函数就得使用module.exports
module.exports=Circle;
---------------导入的js-----------------
var c=require('./circle.js');
//构造函数必须得实例化
var circle=new c(5);
console.log(circle.size());
console.log(circle.peri());

自定义模块:
(1)文件模块

        没有后缀的文件模块,被作为js文件加载
        .js后缀的文件模块,被作为js文件加载
        .json后缀的文件模块,被作为JSON字符串加载,会自动解析为对象
        .node后缀的文件模块,被作为C/C++二进制加载(写不出来)

(2)目录模块-----目录模块引用时只需引用目录名即可

包含一个package.json文件的目录模块

package.json:

"main": "hello.js"  指向该模块的文件

包含index.js文件的目录模块
包含index.json文件的目录模块
包含index.node文件的目录模块

放到node_modules目录下的模板,引入的时候不用写路径,直接写模块名称即可

模块查找的顺序:

      (1)文件/目录模块的缓存

       (2)原生模块的缓存

       (3)原生模块

       (4)文件/目录模块

10、包(package)和NPM(node package manager)

包是根据CommonJS规范,对模块进行的标准封装

包规范:

            ----包是一个目录

           -----目录中包含一个package.json包说明文件,存放于包顶级目录下

           -----目录中包含js文件,如有index.js,可以放到包顶级目录下

           ----其他js文件,放到lib目录下

           ---二进制文件放到bin目录下

           ---文档应放到doc目录下

           ---单元测试文件放到test目录下

CommonJS规范要求,包应该位于当前目录或者父目录下的node_modules文件夹下,require函数由近及远依次查找。

参考链接:http://javascript.ruanyifeng.com/nodejs/packagejson.html#toc0

NPM包管理器
    npm官网:www.npmjs.com
    npm是Node.js的包管理工具,用于下载、安装、升级、删除包,或者发布并维护包。
    Node.js的安装文件中,已经集成了npm。


    下载第三方包
    (1)安装在当前项目目录下
        npm install 包名
        会安装到指定目录的node_modules文件夹下
        查看目标路径:npm root
    (2)安装到全局
        npm install 包名 -g
        会安装到npm目录下
        查看目标路径:npm root -g
    列出已经安装的包:npm ls
    更新已经安装的包:npm update 包名
    卸载已经安装的包:npm uninstall 包名  
    生成包:
    使用npm init命令,可以在当前目录下生成一个package.json文件

    发布包:
    (1)在http://www.npmjs.com上注册用户(此步可以省略)
    (2)使用npm adduser命令注册账号或登录已有账号
    (3)进入配置完成的包目录,使用npm publish命令发布包
    (4)到npmjs.com上搜索已发布的包

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值