生活的理想,就是为了理想的生活。——张闻天
nodejs文件是以 .js 结尾的文件,下面是我编写的第一个nodejs代码
console.log("hello world"); -> hello world过去我们说,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); // 报错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); // 20const关键字声明常量的(一旦声明就无法更改)
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 男 100es6:
// 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的值分别为(B) A. 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 40es6:
// 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 40es5:
// 声明一个函数,形参有多个 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);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();使用场景:
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));