Nodejs初识

什么是Nodejs

生活的理想,就是为了理想的生活。——张闻天

在这里插入图片描述

nodejs文件是以 .js 结尾的文件,下面是我编写的第一个nodejs代码

console.log("hello world"); -> hello world

服务器端js和浏览器端js

  • 过去我们说,js都是运行在浏览器端的.

    • ECMAScript: js语法(变量,数据类型,表达式,代码结构(顺序,循环,分支)…)
    • BOM: 浏览器对象模型,用js去操作浏览器窗口
    • DOM: 文档对象模型,用js去操作页面上的DOM树
  • 今天我们说,有了node.js也可以运行在服务器端的.

    • 在node.js中 不能写DOM语法和BOM语法

    • 正常的符合js语法的代码是不会报错的.

    var name = "千里666";
    console.log(name); // 千里666
    

    因为node.js中是不能执行BOM和DOM的,下面的代码会报错

    console.log(document); // 报错
    
    var age = 39;
    alert(age); // 报错
    

let关键字

  • var 声明变量

    • a. 有变量的提升

    • b. 没有块级作用域,是函数作用域

    • c. 可以重复声明

    • d. 可以重新赋值

  • let声明变量

    • a. 没有变量提升
    console.log(age);
    // var age = 38; // undefined
    // let age = 38; // Cannot access 'age' before initialization
    
    • b. 有块级作用域
    for (var i = 0; i < 10; i++) {}
    // console.log(i); // 10
    
    for (let i = 0; i < 10; i++) {}
    // console.log(i); // i is not defined
    
    • c. 不能重复声明
    var num = 10;
    var num = 20;
    console.log(num); // 20
    
    let num = 10;
    let num = 20;
    console.log(num); // Identifier 'num' has already been declared
    
    • d. 可以重新赋值
    var num = 10;
    num = 20;
    console.log(num); // 20
    
    let num = 10;
    num = 20;
    console.log(num); // 20
    

const关键字

  • const关键字声明常量的(一旦声明就无法更改)

    • a. 没有变量提升
    console.log(age);
    const age = 18; // Cannot access 'age' before initialization
    
    • b. 有块级作用域
    {
       const num = 200;
    }
    console.log(num); // num is not defined
    
    • c. 不能重复声明
    const num = 300;
    const num = 400;
    console.log(num); // Identifier 'num' has already been declared
    
    • d. 声明必须要初始化值
    const num;
    console.log(num); // Missing initializer in const declaration
    
    • e. 不能重新赋值
    const num = 10;
    num = 20;
    console.log(num); // Assignment to constant variable.
    
  • 使用场景:

    • a. 一些不会变化的值,比如圆周率PI

    • b. 大事件项目中,保存基地址的就可以用常量

对象的解构赋值

取对象中属性的值,赋值给变量

声明一个对象

let obj = {
  name: "波波",
  age: 38,
  gender: "男",
  score: 100,
};

es5:

let name1 = obj.name;
let age1 = obj.age;
let gender1 = obj.gender;
let score1 = obj.score;
console.log(name1, age1, gender1, score1); // 波波 38 男 100

es6:

// a.
let { name: name1, age: age1, gender: gender1, score: score1 } = obj;
console.log(name1, age1, gender1, score1); // 波波 38 男 100

// --> 如果变量名和对象名一致

// b.
let { name: name, age: age, gender: gender, score: score } = obj;
console.log(name, age, gender, score); // 波波 38 男 100

// --> 简化

// c.
let { name, age, gender, score } = obj;
console.log(name, age, gender, score); // 波波 38 男 100

// d. 思考题
let { name, age, gender, fenshu } = obj;
console.log(name, age, gender, fenshu); // 波波 38 男 undefined
// obj中没有fenshu这个属性,所以这个fenshu变量就是声明了没有赋值,就是undefined

// e. 现在希望fenshu这个变量的值是obj对象中score属性的值
let { name, age, gender, score: fenshu } = obj;
console.log(name, age, gender, fenshu); // 波波 38 男 100

// f. 给height变量默认值
let { name, age, gender, score: fenshu, height = 180 } = obj;
console.log(name, age, gender, fenshu, height); // 波波 38 男 100 180

// g. 相当于是用obj对象里面的age属性的值,对age变量重新赋值,所以age变量的值最后是38
let { name, age = 18, gender, score: fenshu, height = 180 } = obj;
console.log(name, age, gender, fenshu, height); // 波波 38 男 100 180

作业题:

4. 在对象的结构赋值中,var{a,b,c} = {"c":10, "b":9, "a":8} 结果中,a、b、c的值分别为(BA. 10 9 8
B. 8 9 10
C. undefined 9 undefined
D. null 9 null

数组的解构赋值

就是把数组中每一个元素的值依次的赋值给变量

声明了一个数组

let arr = [10, 20, 30, 40];

es5:

let num1 = arr[0];
let num2 = arr[1];
let num3 = arr[2];
let num4 = arr[3];
console.log(num1, num2, num3, num4); // 10 20 30 40

es6:

// a.
let [num1, num2, num3, num4] = arr;
console.log(num1, num2, num3, num4); // 10 20 30 40

// b.
let [num1, num2, num3, num4, num5] = arr;
console.log(num1, num2, num3, num4, num5); // 10 20 30 40 undefined

// c. 默认值
let [num1, num2, num3, num4, num5 = 50] = arr;
console.log(num1, num2, num3, num4, num5); // 10 20 30 40 50

// d.
let [num1 = 100, num2, num3, num4, num5 = 50] = arr;
console.log(num1, num2, num3, num4, num5);

// e. 可以用逗号留空取后面的值
let [num1, , , num4] = arr;
console.log(num1, num4); // 10 40

解构赋值结合函数声明

es5:

// 声明一个函数,形参有多个
function test1(name, age, gander) {
  console.log(name, age, gander);
}
test1("波波", 18, "男");

// 如果形参有多个,最好把形参写成一个对象
function test1(obj) {
  console.log(obj.name, obj.age, obj.gander); // 波波 18 男
}
test1({
  name: "波波",
  age: 18,
  gander: "男",
});

es6:

// 声明一个函数,形参有多个
function test2({ name, age, gander }) {
  console.log(name, age, gander); // 波波 18 男
}
test2({
  name: "波波",
  age: 18,
  gander: "男",
});

作业题:

function sb([a, b, c, d = 5]) {
  console.log(a + b + c + d);
}
sb([10, 20, 30]); // 65

function sb2([a, b, c, d]) {
  console.log(a + b + c + d);
}
sb2([10, 20, 30]); // NaN

箭头函数

说白了就是 匿名函数的 一个简写

  • 简写规则:

    • a. function 改成=> =>可以读成goesto

    • b. 如果只有一个形参,那就可以省略形参小括号.

    • c. 如果不是一个形参,0个或者多个形参,那就不能省略这个形参小括号了

    • d. 如果函数体只有一句话,那就可以省略函数体的大括号

    • e. 如果函数体只有一句话,并且这一句话是return 返回值,那return也要省略.

    • f. 如果函数体不是一句话,那就不能省略这个大括号. |

    箭头函数的 this 和以前说的函数的this有些不一样

// 普通的匿名函数
let fn = function (name) {
  console.log("我的名字是" + name);
};
fn("波波");
// 箭头函数
let fn = (name) => console.log("我的名字是" + name);
fn("波波");

let fn = (name) => false;

let fn2 = function (num1, num2) {
  console.log(num1 + num2);
  return num1 + num2 + 30;
};

let fn2 = (num1, num2) => {
  console.log(num1 + num2);
  return num1 + num2 + 30;
};
let res = fn2(100, 200);
console.log(res);

对象成员简写

let name = "波波";
let age = 18;
let gender = "男";
let score = 100;

es5:

let obj = {
  name: name,
  age: age,
  gender: gender,
  score: score,
  sayHi: function () {
    console.log("哈哈,雷猴啊");
  },
};
console.log(obj);
obj.sayHi();

es6:

let obj = {
  name,
  age,
  gender,
  score,
  sayHi() {
    console.log("哈哈,雷猴啊");
  },
};
console.log(obj);
obj.sayHi();

let obj = {
  name,
  age,
  gender,
  score,
  fenshu, // fenshu is not defined
  sayHi() {
    console.log("哈哈,雷猴啊");
  },
};
console.log(obj);
obj.sayHi();

let obj = {
  name,
  age,
  gender,
  score,
  fenshu: score,
  sayHi() {
    console.log("哈哈,雷猴啊");
  },
};
console.log(obj);
obj.sayHi();

对象展开

// 声明一个对象
let chinese = {
  skin: "黄色皮肤",
  hair: "黑色头发",
  sayHi() {
    console.log("你好,你吃了吗???");
  },
};

// 声明一个对象
let zhuBo = {
  skill: "唱跳rap打篮球,老铁双击666",
  song: "唱大碗宽面",
};

// 声明一个对象
let linge = {
  //   skin: "黄色皮肤",
  //   hair: "黑色头发",
  //   sayHi() {
  //     console.log("你好,你吃了吗???");
  //   },
  //   skill: "唱跳rap打篮球,老铁双击666",
  //   song: "唱大碗宽面",

  // 展开语法
  ...chinese,
  ...zhuBo,
  gender: "男",
  hair: "白发苍苍", // 重新给hair这个属性赋值,会覆盖以前的值
};
console.log(linge);

数组展开

使用场景:

  • a. 数组拼接

  • b. 利用Math.max()/Math.min()来求数组中的最大值/最小值

eg01

let arr1 = [10, 20, 30];
let arr2 = [...arr1, 40, 50];
console.log(arr1); // [ 10, 20, 30 ]
console.log(arr2); // [ 10, 20, 30, 40, 50 ]

eg02

let arr1 = [10, 20, 30];
let arr2 = [40, 50, 60];
let arrNew = [...arr1, ...arr2];
console.log(arrNew); // [ 10, 20, 30, 40, 50, 60 ]

eg03

// 求数组中的最大值
let arr1 = [10, 8, 7, 66, 65, 34];
console.log(Math.max(...arr1));
console.log(Math.max.apply(this, arr1));

eg01

let arr1 = [10, 20, 30];
let arr2 = [...arr1, 40, 50];
console.log(arr1); // [ 10, 20, 30 ]
console.log(arr2); // [ 10, 20, 30, 40, 50 ]

eg02

let arr1 = [10, 20, 30];
let arr2 = [40, 50, 60];
let arrNew = [...arr1, ...arr2];
console.log(arrNew); // [ 10, 20, 30, 40, 50, 60 ]

eg03

// 求数组中的最大值
let arr1 = [10, 8, 7, 66, 65, 34];
console.log(Math.max(...arr1));
console.log(Math.max.apply(this, arr1));
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码小余の博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值