JaveScript第五周知识点

119 阅读8分钟

JaveScript第五周知识点

第一天知识点

  1. 保护对象:保护对象的属性和方法
    1. 四大特性:
      1. value:xxx,实际保存值的地方
      2. writable:true,开关:控制着是否可以被修改,默认值:true
      3. enumerable:true,开关:控制着是否可以被for in循环遍历到-默认值:都为true
      4. configurable:true,开关:控制着是否可以被删除-默认值:都为true。总开关:一旦设置为false,其他特性不可以再修改,而且本身也是设置为false不可逆
    2. 修改四大特性:
      1. object.defineProperty(对象名,"属性名",{修改四大特性}) 调用一次方法只能保护一个属性的四大特性
      2. object.defineProperties(对象名,{"属性名":{修改四大特性}}),这个方法至少只调用了一次,四大特性甚至不能防止添加
    3. 三个级别:
      1. 防扩展:防止添加:object.preventExtensions(obj);
      2. 密封:防止添加和删除:object.seal(obj);
      3. 冻结:防止添加和删除和修改:object.freeze(obj);
  2. 对象的深浅拷贝:
    1. 浅拷贝:var obj1={"name":"obj1"};var obj2=obj1;
    2. 深拷贝:var obj1={"name":"obj1"};var obj2={...obj1}
    3. 后端穿衣服:var jsonText=JsoN.Stringify(obj);Node.js这句话Node.js也是js,历史上第一次一门语言通吃前后端,此方法也能实现深拷贝
  3. Error对象:
    1. 浏览器自带4种错误类型:可以快速找到自己的错误
      1. 语法错误:SyntaxError,一定是符号写错
      2. 引用错误:ReferenceError,没有创建就去使用
      3. 类型错误:TypeError,不是你的方法你却使用了
      4. 范围错误:RangeError,只有一个API会碰到:num.toFixed(d);
    2. 只要发生错误,就会报错,会导致后续代码终止(闪退)
      1. 错误处理:就算发生错误,我们也不希望报错而是给出提示,后续代码可以继续执行
    3. 抛出自定义错误,只要是错误,后续代码都不会执行:throw new Error("自定义错误消息");
    4. Ess:严格模式
      1. 开启:"use strict";写在任何一个作用域的顶部都可以
      2. 作用:禁止了全局污染,使用变量之前必须先创建变量,将静默失败升级为了错误
    5. 柯里化函数: function add(a){return function(b){return function(c){console.log(a+b+c);}}}add(3)(5)(7)

第二天知识点

  1. 匿名函数:
    1. 自调:只能执行一次,函数中的没用的变量是会自动释放的,可以用于代替全局代码写法,两者很相似:都会只执行一次,但是自调会释放
    2. 回调:匿名函数不是自调,就是回调
      1. elem.on事件名=function(){}
      2. arr.sort(function(){})
      3. var obj={"方法名":function(){}
      4. 一切回调函数,都可以简化为箭头函数
  2. 设计模型:不仅仅局限于前端,它是一种编程思想
    1. 单列模式:也许称之为单体模式, 保证一个类仅有一个实例对象,并且提供一个访问它的全局访问点
      1. 最简单的单列模式:利用Es6的let不允许重复声明的特性
    2. 发布订阅模式:vue的bus总线用到的底层原理就是发布订阅模式
      1. let obj={}
      2. function on(id ,fn){if(!obj[id])}
    3. 事件轮询:js其实是单线程引用,代码必然是从上向下,一步一步的执行,如果某一块代码非常耗时,可能会导致整个页面卡住,尤其把js放在head之中,会看到页面是一个白板
      1. 宏任务:不会卡住单线程应用,可以让后续代码先走,但是问题在于,多个宏任务同时存在,到底谁先执行谁后执行,分不清
      2. 微任务:Es6提供的promise对象,可以控制异步代码,依然是异步代码,但是可以控制执行的顺序

第三天知识点

  1. 全栈的语言
    1. Jave语言,里面有JavaWeb,不包含移动端(安卓)
    2. JavaScript语言:
      1. 客户端-开发根本
      2. 服务器端-Node.js
      3. 数据库-mongoDB
      4. 移动端-网页/app/小程序/公众号/
      5. 混合开发框架:h5+plus/jqueryMobile/uniapp
  2. 基本内容
    1. 服务器端概念:简单来说就是一台电脑
    2. 软件架构:服务器
  3. Node.js概述
    1. 不是js,但是和js语法非常相似
    2. 做的功能绝对不是特效,和服务器端其他语言是一致
    3. 目的:
      1. 使用代码搭建一个服务器&文件系统
      2. Node.js如何沟通前端和数据库
      3. 全栈:图书管理系统(HTML+CSS+JS+Node+Mongo)
  4. Node.js如何运行
    1. 交互模式
    2. 脚本/文件模式
    3. 编辑器
  5. Node.js知识
    1. js和node的区别
      1. 相同点:都可以使用一切的ECMAScript的东西,包括一切的API
      2. 不同点:JavaScript:DOM+BOM
      3. NOde.js虽然没有DOM+BOM,但是都有10万+的模块
    2. 模块:每个xxx.js文件,都可以称之为是一个模块
      1. 每一个模块都有一个操作,可以用于公开/暴露自己的成员exports:Node.js自带的一个预定义变量,可以直接使用,是一个对象放在此对象里面的东西,就是允许公开的东西
      2. 每一个模块都有一个操作,可以用于导入/引用其他模块require:Node.js自带的一个预定义变量,可以直接使用,是一个函数,函数中需要书写出引用模块的路径
    3. 模块的分类:
      1. 官方模块
      2. 第三方模块
      3. 自定义模块
    4. Node.js最大特点
      1. 速度快,以前最快的是php,js的速度是php的16倍
      2. 官方模块:不需要下载,在安装node.js的时候就带上了
    5. 五个预定义变量
      1. _ _filename--获取当前文件的完整的绝对路径
      2. _ _dirname--获取当前文件绝对路径,不包含文件的名字
      3. exports--空对象,可以用于公开暴露自己的成员
      4. require--函数,可以用于导入其他模块
      5. module--指代当前模块本身,甚至包含以上4个模块
    6. querystring模块:解析查询字符串,使其变成一个对象,可以获取到前端传到后端的消息
      1. 需要引入:var qs=require(querystring);
      2. 解析url查询字符串部分功能
    7. url模块:
      1. 需要引入:var url=require(url);
      2. 作用:提供了解析url各个部分的功能
      3. 查询字符串:objUrl.query.键名-前端form表单提交传到后端的东西
      4. 路由/文件相对路径/请求地址:objUrl。pathname,判断路由的不同,去读取不同的HTML发送给用户看
    8. Buffer模块:缓冲区,可以将数据变成一个16进制的数字,可以理解为Node.js中的一种新的数据类型
    9. fs模块:
      1. 需要引入:var fs=require(fs);
      2. 异步读取文件:fs.readFile("文件路径","新内容"/buf,()=>{console.log("要做什么必须放在这里面));
      3. 异步追加文件:fs.appendFile("文件路径","新内容"/buf,()=>{console.log("要做什么必须放在这里面));

第四天知识点

  1. Node.js官方模块
    1. http模块:搭建服务器
      1. var http=require("http");
      2. var url=require("url");
      3. var fs=require("fs");
    2. 创建服务器应用
      1. var app=http。createServer();
    3. 为其绑定监听端口
      1. app.listen(80);
    4. 为其绑定请求事件
      1. app.on("request",(req,res)=>{
    5. 保存路由
      1. var router=objurl.pathname;
    6. 字符串有一个API:Math
      1. var rs=str.math(reg);和indexof几乎一致,但是支持正则,
  2. 模块(每个.js文件)的分类
    1. 官方模块:不需要下载,在安装Node.js环境的时候就已经自带了,但是有的模块需要引入:reequire("模块名");
    2. 第三方模块
    3. 自定义模块:自己书写的xxx.js:require("./模块名");
      1. 文件模块:创建xx.js去公开需要公开的内容,主模块要引入,必须写为require("./模块名");
      2. 目录模块:
        1. 比如创建m1的文件夹,在其中创建index.js的文件,去公开需要公开的内容
        2. 比如创建m2的文件夹,在其中创建xx.js的文件,去去公开需要公开的内容容
        3. 创建文件夹必须名为:node_modules,再在其中创建出m3文件夹
  3. 如何下载第三方模块
    1. 打开cmd:检查npm是否安装成功:nopm-v
    2. 在你的项目中,再打开cmd
    3. 下载:npm i 包名
    4. 更新:npm up 包名
    5. 删除:npm um 包名
  4. Node.js操作mongoDB:
    1. 安装第三方模块:mongoose
    2. 使用步骤:
      1. 引入:const mongoose=require(mongoose);
      2. 连接数据库:mongoose.connect("mongoodb://ip地址,数据库名称");
      3. 创建出一个新的数据表的同时,设置数据类型的控制,防止用户乱输入、

第五天知识点

  1. mongo的语法:都是在客户端cmd输入
    1. 数据库的操作
      1. 查询所有数据库:show dbs
      2. 创建/切换数据库:没有就创建,有了就切换:use数据库名称
      3. 查看当前选中的数据库db
      4. 创建数据表:db。createCollection("表名")
      5. 删除数据库:db.dropDatabase();
    2. 数据表的操作
      1. 创建数据表
      2. 查看目前所有的数据表:db.getCollectionName();
      3. 删除数据表:db.表名.drop();
    3. 数据表的操作
      1. 增: var x=new User({//仅仅只是创建出了一个x对象,并没有放入到数据库之中 age: "20", pwd: "123123", email: "dy@qq.com", vip: "0", name: "dy", })

        x.save((err)=>{ console.log("新增成功后要干什么"); })

      2. 删:User.remove/deleteOne/deleteMany({条件},(err)=>{// - 作者不推荐remove在mongoose之中使用 console.log("删除成功后要干什么"); })

      3. 改:User.update/updateOne/updateMany({条件},{新内容},(err)=>{// - 作者不推荐update在mongoose之中使用 console.log("修改成功后要干什么"); })

      4. 查:User.find({条件},(err,result)=>{ result就是你的查找到的结果 })

    4. 目前:前端能传到后端的技术,只有一个:form表单,action属性可以随便自定义一个路由名称,后端解析此路由就可以通过objUrl.query.键名得到想要的部分