nodejs笔记
web服务器和服务端js的区别
1.js都是运行在浏览器的
ECMAScript:js语法
bom:浏览器对象模型,用js去操作浏览器窗口
Dom:文档对象模型,用js去操作dom树
2.nodejs 让js在服务器运行
ECMAscript
3.在node.js中不能写dom树和bom语法
//正常不会报错
let关键字
/**
*
* var 声明变量
* a 有变量提升
* b没有块级作用域,是函数作用域
* c可以重复声明
* d可以重新赋值
*
*
* let声明变量
*
* a 没有变量提升
* b有块级作用域
*
* c不能重复声明
* d 可以重新赋值
*
*/
a 没有变量提升
console.log(age);//报错
let age=18;
//b有块级作用域
for(let i=0;i<10;i++){
}
console.log(i);//报错
//c不能重复声明
let num=10;
let num=20;//报错
console.log(num);
//d可以重新赋值
var num1=10;
num1=20;
console.log(num1);
const关键字声明常量(一旦声明不可修改)
/**
*
* const关键字声明常量(一旦声明不可修改)
* a 没有变量提升
* b有块级作用域
*
* c不能重复声明
* d声明必须赋初始值
* e不可以重新赋值
*
* 使用场景
* 一些不需要变化的值
* 大项目中一些基地
*
*/
//a 没有变量提升
// console.log(num);//报错
// const num=100;
//b有块级作用域
// {
// const num=200;
// }
// console.log(num);//报错
// c不能重复声明
// const num=300;
// const num=400;//报错
// console.log(num);
//d (声明必须赋初始值)
// const num;//报错
// console.log(num);
//e不可以重新赋值
// const num=10;
// num=20;//报错
// console.log(num);
数组的结构赋值
/**
* 数组结构赋值
* 就是吧数组中每一个袁术的值一次赋值给变量
*
*/
//声明了一个数组
let arr = [10,20,30,40,50];
//es5
// let num1=arr[0];
// let num2=arr[1];
// let num3=arr[2];
// let num4=arr[3];
// let num5=arr[4];
// console.log(num1,num2,num3,num4,num5);
// es6
//a.
// let [num1,num2,num3,num4,num5]=arr;
// console.log(num1,num2,num3,num4,num5);
// b.
// let [num1,num2,num3,num4,num5,num6]=arr;
// console.log(num1,num2,num3,num4,num5,num6);
//c
// let [num1,num2,num3,num4,num5,num6=60]=arr;
// console.log(num1,num2,num3,num4,num5,num6);、
//d
let [num1=100,num2,num3,num4,num5,num6=60]=arr;
console.log(num1,num2,num3,num4,num5,num6);//10 ,20,30,40,50,60,
结构赋值结合函数声明
/**
*
* 结构赋值结合函数声明
*
*
*/
//es5
//声明一个函数,形参有多个
// function test1(name,age,gender){
// console.log(name,age,gender);
// }
// test1("波波",28,"男");
//如果形参有多个,最好写成一个对象
// function test1(obj){
// console.log(obj.name,obj.age,obj.gender);
// }
// test1({
// name:"波波",
// age:38,
// gender:"男"
// });
//es6
//声明一个函数,形参有多个
// function test2({name, age, gender}) {
// console.log(name, age, gender);
// }
// test2({
// name: "波波",
// age: 38,
// gender: '男'
// });
箭头函数
/**
* 箭头函数
* 说白了就是密名函数的简写‘
*
*
* 简写规则
* a.function 改成=>可以读成goesto
* b.如果只有一个形参,哪就可以省略形参小括号
* c.如果不是一个形参,0个或多个形参那就不能省略这个小括号了
* d.如果函数体只有一句话那就可以省略大括号
* e如果函数体只有一句话,并且这一句话是return返回值 ,哪return也要省略
* f.若果函数体不是一句话那就不能省略大括号
*
*/
//------------------------------------------------------------------
//普通密名函数
// let fn=function(name){
// console.log(name);
// }
// fn("波波");
// 箭头函数
// let fn=name=>console.log(name);
// fn("波波")
//----------------------------------------
// let fn1=function(name){
// return name+"你好吗?";
// }
// let fn1=name=>name+"你好吗";
// console.log(fn1("哲凯"));
//------------------------------------
// 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;
}
console.log(fn2(1, 2));
//=============================================
// setTimeout(function(){
// },100);
// setTimeout(()=>{
// },100);
展开对象
/**
* 展开运算符
* 对象展开
*
*
*
*/
//声明对象
let chinese={
skin:"黄皮肤",
hair:"黑头发",
sayHi(){
console.log('你吃了吗')
}
}
//声明对象
let zhuBo={
skill:"唱 跳 rap篮球",
song:"唱大碗宽面"
}
//声明对象
let linge={
// skin:"黄皮肤",
// hair:"黑头发",
// sayHi(){
// console.log('你吃了吗')
// },
// skill:"唱 跳 rap篮球",
// song:"唱大碗宽面"
//展开语法
...chinese,
...zhuBo,
gender:"男",
hair:"白发"
}
console.log(linge)
数组展开
/**
* 数组展开符 ...
* 数组展开
*/
//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,55,23]
let max2=Math.max(...arr1);
console.log(max2);
数据类型set
/**
* 数组展开符 ...
* 数组展开
*/
//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,55,23]
let max2=Math.max(...arr1);
console.log(max2);
对象成员简写
/**
* 对象成员简写
*
*
*/
//声明了一些变量
let name="千里";
let age=18;
let gender="男";
let score=100;
//现在声明了一个对象
//对象里有这些属性
//希望属性的值是上面对应变量的值
//es5
// var 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: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)
//es6
//a.
// let{name:name1,age:age1,gender:gender1,score:score1}=obj;
// console.log(name1,age1,gender1,score1)
//b.
// let{name:name,age:age,gender:gender,score:score}=obj;
// console.log(name,age,gender,score);
//c.如果声明的变量名和对象属性名一致,那就可以简写
// let{name,age,gender,score}=obj;
// console.log(name,age,gender,score);
//d思考题1
// let{name,age,gender,score,fenshu}=obj;
// console.log(name,age,gender,score,fenshu);
//因为对象类没有分数这个值所以这个fenshu变量就是声明了没有赋值就是undefined
//e .现在就是希望分数这个变量的值 是obj对象中score属性的值 ,怎么写
// let{name,age,gender,score:fenshu}=obj;
// console.log(name,age,gender,fenshu);
//f希望height不是unfettered 希望他有一个默认值
// let{name,age,gender,score:fenshu,height=160}=obj;
// console.log(name,age,gender,fenshu,height);
//g相当于对age重新赋值
// let{name,age=16,gender,score:fenshu,height=160}=obj;
// console.log(name,age,gender,fenshu,height);