nodejs入门学习第一天

    技术2022-07-11  85

    nodejs入门

    1.1-什么是nodejs

    Node是一个构建于Chrome V8引擎上的一个JavaScript运行环境 Node是一个运行环境,作用是让js拥有开发服务端的功能 Node使用事件驱动,非阻塞IO模型(异步读写)使得它非常轻量级和高效 Node中绝大多数API都是异步(类似于Ajax),目的是提高性能 Node中的NPM是世界上最大的开源库生态系统(类似于gitHub)

    1.2-Node.js环境安装

    1.2.1-如何判断自己当前电脑是否已经安装了Node环境

    打开终端,输入node - v如果能看到版本号则说明当前电脑已经安装Node环境一旦安装了node,则会自动一并安装npm

    1.3-如果运行Node.js程序

    REPL:交互解释器 Node运行环境的另一种叫法,作业是解析执行js代码(不推荐)用法: 第一种方式:直接双击打开node.exe然后写js代码第二种方式: 先在终端先执行node,进入node环境然后写js代码 使用终端命令node[js文件路径]开始运行js文件 其实当我们在终端执行Node命令时,并不是我们终端去编译解释js代码,而是电脑会自动打开Node安装包中Node.exe应用程序来打开js文件 Node.exe是一个类似于终端的应用程序,没有界面Node.exe工作环境称之为REPL环境,也就是交互式解释器 REPL才是珍重解释执行我们js代码的解释器

    1.4- 服务器端js和浏览器端js

    1.js都是运行在浏览器端的

    ECMScript:js语法 Bom:浏览器对象模型,用js去操作浏览器窗口 Dom:文档对象模型,用js去操作页面上的Dom树

    学了node.js之后, 服务端也可以运行ECMScript

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

    /** * 1.js都是运行在浏览器端的 * ECMScript:js语法 * Bom:浏览器对象模型,用js去操作浏览器窗口 * Dom:文档对象模型,用js去操作页面上的Dom树 * 2. 学了node.js之后, 服务端也可以运行ECMScript * 3. 在node.js中不能写BOM和Dom语法 */ // 正常的符合js语法的代码都是没问题的 var name = "aaa" console.log(name) //但是不能执行Bom和Dom语法 // console.log(document)//报错 alert(name) //报错

    ES6新语法

    1-let关键字和const关键字

    var 关键字声明变量let 关键字声明变量const关键字声明常量有变量提升没有变量提升没有变量提升没有块级作用域,是函数作用域有块级作用域有块级作用域可以重复声明不能重复声明不能重复声明可以重新赋值可以重新赋值不能重新赋值,声明时必须要初始化值 /** * var 关键字声明变量 * 1.有变量提升 * 2.没有块级作用域,是函数作用域 * 3.可以重复声明 * 4.可以重新赋值 * * * * let 关键字声明变量 * 1. 没有变量提升 * 2. 有块级作用域 * 3. 不能重复声明 * 4. 可以重新赋值 */ //1. 没有变量提升 // console.log(age) // let age = 30 //报错 // var age = 30 // undefined //2. 有块级作用域 // for (var i = 0; i < 10; i++) { // }//10 // for (let i = 0; i < 10; i++) { // }//报错 // console.log(i) // 3. 不能重复声明 // var a = 10 // var a = 20//没有报错,输出20 // let a = 10 // let a = 20//报错,Identifier 'a' has already been declared // console.log(a) // 4. 可以重新赋值 // var a = 1 // a = 2 // let q = 1 // q = 2 // console.log(a, q) /** * const关键字声明常量的 * 1. 没有变量提升 * 2. 有块级作用域 * 3. 不能重复声明 * 4. 不能重新赋值,声明时必须要初始化值 */ // 1. 没有变量提升 // console.log(a) // const a = 10//报错 // 2. 有块级作用域 // { // const a = 10 // } // console.log(a)//报错 // 3. 不能重复声明 // const a = 10 // const a = 20 // console.log(a)//报错 // 4. 不能重新赋值, 声明时必须要初始化值 // const a//报错 // const a = 10 // a = 20//报错

    2-对象解构赋值

    /** * 对象解构赋值 * 取对象中属性的值,赋值给变量 */ //声明一个对象 let obj = { name: "aaa", age: 30, 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)

    3-数组解构

    /** * 数组解构赋值 * 就是把数组中每一个元素的值一次的赋值给变量 */ //声明一个数组 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) //es6 //a // let [num1, num2, num3, num4] = arr // console.log(num1, num2, num3, num4) //b // let [num1, num2, num3, num4, num5] = arr // console.log(num1, num2, num3, num4, num5) //num5 为undefined //c // let [num1, num2, num3, num4, num5 = 50] = arr // console.log(num1, num2, num3, num4, num5) //d // let [num1 = 100, num2, num3, num4, num5 = 50] = arr // console.log(num1, num2, num3, num4, num5) //e let [num1, num2] = arr console.log(num1, num2) console.log(arr[3])

    4-解构赋值结合函数声明

    /** * 解构赋值结合函数声明 * */ //es5 // function text1(name, age, gender) { // console.log(name, age, gender) // } // text1("aaa", 30, "男") //如果形参有多个,最好把形参写成一个对象 // function text1(obj) { // console.log(obj.name, obj.age, obj.gender) // } // text1({ // name: "aaa", // age: 30, // gender: "男" // }) //es6 //声明一个函数,形参有多个 function text2({ name, age, gender }) { console.log(name, age, gender) } text2({ name: "aaa", age: 30, gender: "男" }) //就相当于提前声明了那三个变量,后面根据obj里面的属性来赋值给那三个变量

    5-箭头函数

    /** * 箭头函数 * 说白了就是匿名函数的简写 */ /** * 简写规则 * 1.function 改成 => =>可以读成goes to * 2.如果只有一个形参,可以省略小括号 * 3.如果不是一个形参,0个或多个形参不能省略形参小括号 * 4.如果函数体只有一句话,就可以省略函数体的大括号 * 5.如果函数体只有一句话,并且这句话是return 那么return也要省略 * 6.如果函数体不是一句话,那么不能省略大括号 */ //普通的匿名函数 // let fn = function (name) { // console.log(name) // } // fn("小明") //箭头函数 // let fn = name => console.log(name) // fn("小明")

    6-对象成员的简写

    /** * 对象成员的简写 * */ //声名了些变量 let name = "小明" let age = 18 let gender = "男" let score = 100 //现在声名了个对象,对象里面也有name age gender score,希望对象中的属性里面的值一样 //es5 // var obj = { // name: name, // age: age, // gender: gender, // score: score, // sayHi: function () { // console.log("aaaa") // } // } // console.log(obj) // obj.sayHi() //es6:对象成员简写 let obj = { name, age, gender, score, // fenshu, //报错,相当于fenshu:fenshu,但是对象外面没有分数,那么报错 sayHi() { console.log("哈哈哈哈") } } console.log(obj) obj.sayHi()

    7-对象展开

    /** * 对象展开 * */ //声名一个对象 let chinese = { skin: "黄皮肤", hair: "黑色头发", sayHi() { console.log("你好") } } //声名一个对象 let zhuBo = { skill: "唱歌", song: "姬霓太美", } //声名一个对象 let linge = { // skin: "黄皮肤", // hair: "黑色头发", // sayHi() { // console.log("你好") // }, // skill: "唱歌", // song: "姬霓太美" //展开语法 ...chinese, ...zhuBo //...chinese 相当于把chinese中的东西全部拿到linge里面了 } console.log(linge)

    8-数组展开

    /** * ...展开运算符 * * 数组展开 */ let arr1 = [1, 2, 3, 4] let arr2 = [...arr1, 5, 6, 7, 8] //...arr1 就是相当于把arr1里面东西拿出来全部给arr2 console.log(arr2)

    9-数据类型Set

    /** * Set * 作用和数组类似,和数组不同的是不能存重复的元素 * 应用场景:数组去重 */ //1.基本使用 // let set1 = new Set([10, 10, 10, 20, 3, 4, 45, 655]) // console.log(set1) //Set { 10, 20, 3, 4, 45, 655 } //得到一个Set对象,内容没有重复的 //2.数组去重 // let arr = [10, 20, 3, 3, 3, 225234, 25235, 24] // let set = new Set(arr) // console.log(set) //此时得到一个对象 // let arrNew = [...set] //用展开运算符在[]中展开得到的set对象就完成了去重 // console.log(arrNew) //3.数组去重:把上面的变成一句话 let arr = [10, 20, 3, 3, 3, 225234, 25235, 24] let arrNew = [...new Set(arr)] console.log(arrNew)

    10-模板字符串

    /** * 模板字符串 * 字符串都是在'' 和 ""中的 * 模板字符串是在``中的 * 会保留原样字符串格式,以及可以占位 */ //es5 //字符串没有格式,里面也不能写变量 let auther = "aaa" // let str1 = "静夜思 // auther, // "//报错 //es6:模板字符串 let str1 = ` 我是小明 作者: $(auther) ` console.log(str1)

    11-补充数组的几个方法

    //1.forEach() // let arr = [10, 20, 30, 40] // arr.forEach(function (item, index) { // //item为数组中的每个元素,index为每个元素的索引 // console.log(item, index) // }) //2.map() 遍历数组,用返回值 // let arr = [10, 20, 30, 40] // let arrNew = arr.map(function (iten, index) { // //item为数组中的每个元素,index为每个元素的索引 // console.log(item, index) // return item * item //返回值 // }) // console.log(arrNew) //3.filter()过滤器 //filter()会返回一个新的数组,新的数组中的元素是通过检查后符合条件的元素 let arr = [10, 20, 30, 40, 40, 234, 10, 40] let arrNew = arr.filter((item, index) => { //item为数组中的每个元素,index为每个元素的索引 return item % 2 == 0 }) console.log(arrNew)

    em, index) // })

    //2.map() 遍历数组,用返回值 // let arr = [10, 20, 30, 40] // let arrNew = arr.map(function (iten, index) { // //item为数组中的每个元素,index为每个元素的索引 // console.log(item, index) // return item * item //返回值 // }) // console.log(arrNew)

    //3.filter()过滤器 //filter()会返回一个新的数组,新的数组中的元素是通过检查后符合条件的元素 let arr = [10, 20, 30, 40, 40, 234, 10, 40] let arrNew = arr.filter((item, index) => { //item为数组中的每个元素,index为每个元素的索引 return item % 2 == 0 }) console.log(arrNew)

    Processed: 0.012, SQL: 9