第五周学习资料整理

97 阅读9分钟

1.BOM:Bowser Object Model,浏览器对象模型。

a.window对象介绍:扮演两个角色
    1.代替ES中的global,充当全局对象保存全局变量和全局函数。
    2.自己也带有一些属性和方法指代当前窗口本身。
        a.网页打开新链接的方式:
            HTML:<a href="url">内容</a>
            js:open("url","_self");
        b.替换当前页面禁止后退:history对象记录着当前窗口记录,只有有了记录才可以后退。
            location对象:记录着当前窗口正在打开的url,替换不产生任何记录。
            location.replace("新url");
        c.新窗口打开,可以打开多个
            HTML:<a href="url" traget="_blank">内容</a>
            js:open("url","_blank");
        d.新窗口打开,只能打开一个
            HTML:<a href="url" traget="自定义name">内容</a>
            js:open("url","自定义name");
            自定义的name:每一个窗口底层都有一个名字,target就i是在设置名字,name相同,新的窗口打开就会把旧窗口替换掉(刷新);
        e.扩展a标签的作用:
            1.跳转
            2.锚点
            3.下载:<a href="xx.exe/zip/rar/7z">内容</a>
            4.打开:<a href="xx.图片后缀名/txt">内容</a>
            5.直接书写:打开:<a href="javascipt:js代码">内容</a>
 
b.window提供的属性和方法:
     属性:获取浏览器的完整大小:outerWidth/outerHeight
           获取浏览器文档显示区域大小:innerWidth/innerHeight
           获取屏幕大小:screen.width/height
     方法:
         1.打开窗口 var newW=open("url","自定义name","wdith=,height=,left=,top=,");
         注意:第三个配置参数没传入时窗口大小和浏览器一样,并且为一体。写入第三个参数则会脱离浏览器为一个独立的小窗口,并且可以保存为其设置绑定事件。设置的宽高也不宜过小。
         2.关闭窗口:window/newwindow.close();
         3.修改窗口大小:newwindow.resizeTo(新宽,新高);
         4.修改窗口位置:newwindow.moveTo(x,y);
         
c.定时器:
    1.周期性定时器
        开启:timer=setInterval(callback,间隔毫秒数);
        停止:clearInterval(timer);
    2.一次性定时器:
        开启:timer=setTimeout(callback,间隔毫秒数);
        停止:clearTimeout(timer);
    *****函数、循环、定时器都能反复执行操作,区别是什么?时机不同
        a.函数:是由用户触发的或者程序员调用。
        b.循环:瞬间执行完毕。
        c.定时器:等一段时间执行一次。
    3.扩展:
        a.绑定事件,事件处理函数形参可以写一个e,自动获取到event对象。
        b.获取坐标。
          相对于屏幕:e.screen x/y
          相对于浏览器:e.client x/y
          相对于页面:e.page x/y
        c.扩展:鼠标跟随动画
            1.事件:window/document.onmousemove
            2.js加载速度比图片快,加载事件:onload事件
            3.删除图片,实际是在动画开始时开启了定时器

d.history对象:保存当前窗口的历史记录打开过的url.
    前进:history.go(1);
    后退:history.go(-1);
    刷新:history.go(0);
    
e.navigator对象,保存了当前浏览器基本信息,可以用js来判断是什么浏览器已经版本号。
    属性:navigator.userAgent;

f.location对象:保存当前窗口正在打开的url
    1.网址的组成部分:5部分
        a.协议名:http/https/ftp/ws(直播)
        b.域名,主机号:底层是主机号域名是需要购买的
        c.端口号:默认端口可以省略,http默认80,https默认443
        d.文件的相对路径:路由据欸的那个用户是想看哪一个网页。
        e.查询字符串、请求消息:客户端发送到服务器的东西,服务器接住判断请求才能进行响应,是后端沟通的关键。
        协议名://域名:端口号/路由?请求消息
        协议名:location.protocal
        域名:location.hostname
        端口号:location.port
        路由:location.pathname
        请求消息:location.search
        
g.event对象:事件对象
    事件:用户触发的或者浏览器自动触发的(onload)
    a.在html页面上绑定:
        <elem on事件名="js语句"></elem>
        缺点:不符合内容、样式、行为相分离原则,且无法动态绑定事件,和不能同时绑定多个对象。
    b.在js中是使用元素事件处理函数属性:
        elem.on事件名=function(){
            操作;
        }
        优点:符合内容、样式、行为相分离原则,动态绑定事件,没有兼容性问题。
    c.使用专门的事件API绑定:
        主流:elem.addEventListener("事件名",callback)
        老IE:elem.attachEvent("事件名",callback)
        兼容:if(elem.addEventListener){
            elem.addEventListener("事件名",callback); 
                }else{
            elem.attchEvent("事件名",callback);    
                }
        优点:符合内容样式行为相分离原则,动态绑定事件,同时可以绑定多个对象;
        缺点:具有兼容性问题;
        
 h.事件周期:
     1.捕获阶段,记录着要发生的事件有哪些
     2.目标元素优先触发
     3.冒泡触发,向上触发所有记录着的事件
 
 i.获取事件对象event:
     主流:会自动作为事件处理函数的第一个形参传入
         elem.on事件名=function(e){e->event}
     老IE:event
     兼容:var e=event;
     获取到的event事件可以做什么?
     1.获取鼠标位置
     2.阻止冒泡
         主流:e.stopPropagation();
         老IE:e.cancelBubble=true;
         兼容:e.cancelBubble=true;
     3.事件委托、利用冒泡
         优化:如果多个子元素定义了相同或者相似的事件,最好只给父元素定义一次。
         为什么?每一次绑定一个事件函数都是为了创建一个事件对象,创建的事件对象越多网站性能越差。
         主流:e.target
         老IE:e.srcElement;
         兼容:e.srcElement;
     4.阻止浏览器默认行为:
         a标签默认跳转页面,右键自带弹出框F12打开一个控制台,F5刷新。
         主流:e.preventDefault();
         老IE:e.returnValue=false;
         兼容:e.returnValue=false;
         新事件:window.oncontentmenu=()=>{鼠标右键事件}
                window.onkeydown=()=>{键盘按下事件}
     5.获取键盘键码
         e.keyCode;

2.Node.js知识点

1.jsnode的区别?
    相同:都可以使用ECMAScript的一切API语法
    不同:
        a.javascript DOM+BOM做一切特效
        b.Node.js提供的模块
2.每个js文件都可以称之为模块
    a.模块化开发:以电商为例按功能划分很多模块:商家模块、商品模块、,需要分模块合作:将每个模块交给对应的人做,最后由主模块引入。
        1.每个模块都可以公开、暴露字的成员:
            a. exports.属性名=值;
            b. module.exprots={....}
        2.每个模块都有一个操作,可以用于其他模块引入;
            var xxx.require("./文件名");.js后缀名可以省略
            exportsmodule.exports的区别,exports的底层就是module.exports3.模块分类
     a.官方模块  b.第三方模块  c.自定义模块
 
 4.官方模块
     a.Globals:全局模块
         __dirname 当前文件夹的绝对路径
         __filename 当前文件的完整绝对路径
         exports  一个空对象{},公开和暴露自己成员
         require  一个函数,引入其他模块
         module  指代当前模块本身,包含其他四个变量
     
     b.Querystring模块:查询字符串
         需要引入:let qs=requery(querystring");
         可以解析url的查询字符串部分功能;
         var obj=qs.parse("查询字符串部分")
         obj.键名---获取前端传来的某一部分
   
    c.url模块
        需要引入:let url=require("ur");
        用于完整解析url
        var obj=url.parse("完整的url网址""true")
        查询字符串:objUrl.query.键名;--拿到前端传到后端的东西
        路由:objUrl.pathnanme;--判断路由的不同,响应不同的网页给用户。
    
    d.Buffer模块:缓冲区,可以将数组变成一个16进制数字。
    
    e.fs模块:FileSystem文件系统
        需要引入:let fs=requery("fs");
        异步读取文件:
            fs.readFile("绝对路径|文件相对路径",(err,buf)=>{
                拿到buffer之后的操作;
            })
        异步写入文件:
             fs.writeFile("绝对路径|文件相对路径""写入新内容",()=>{
                拿到buffer之后的操作;
            })
        异步追加文件:
             fs.appendFile("绝对路径|文件相对路径""写入新内容",()=>{
                拿到buffer之后的操作;
            })
            
     f.http模块:使用代码搭建服务器
         固定步骤:
            1.引入http\url\fs官方模块
                var http=require("http");
                var url=require("url");
                var fs=require("fs");
            2.创建服务器
                var app=http.createSever();
            3.为服务器设置监听的端口号
                app.listen(80);
            4.为服务器绑定请求事件
                app.on("request",(req,res)=>{
                    属性req.url,解析此属性拿到自己需要的部分(路由|请求消息)
                    var objUrl=url.parse(req.url,true);
                     得到前端传来的路由部分
                    var router=objUrl.pathname;
                     判断前端传来的路由是什么,返回不同的页面
                    if(router=="/"||router=="/index.html"){
                        属性req.url,解析此属性拿到自己需要的部分(路由|请求消息)
                        fs.readFile("./public/index.html",(err,buf)=>{
                            res.end(buf)
                        })
                    }else if(router.match(/html/)!=null){
                        fs.readFile("./public"+router,(err,buf)=>{
                            res.end(buf);
                        })
                    }lese if(router.match(/css|js|jpg|png|gif|webp|woff/)!=null){
                        fs.readFile("./public"+router,(err,buf)=>{
                           res.end(buf);
                         })
                    }
                })
                强调:
		1、*****前端的一切actionhrefsrc,所有引入路径的地方,全都被node.js当作了是一个路由请求,解析请求,读取对应的文件给用户看
		2、自己想要访问自己,打开浏览器,可以使用127.0.0.1访问自己,访问别人(前提:关闭防火墙),需要别人把自己的ipv4地址给你,打开cmd,输入ipconfig
         
     g.模块(每个.js文件)分类:
        1、官方模块:var xx=require("官方模块名")
        2、第三方模块
        3、自定义模块:2大类
	为什么有的模块要引入时加上./,有的模块又不需要
	1、文件模块:创建xx.js去公开需要公开的内容,主模块想要引入必须写为require("./文件名")
	2、目录模块:31、创建名为m1的文件夹,在其中创建index.js的文件,去需要公开的内容,主模块想要引入必须写为require("./文件夹的名字")
		2、创建名为m2的文件夹,在其中创建xx.js的文件,去需要公开的内容,主模块想要引入必须写为require("./文件夹的名字")
		      但是需要在m2文件夹中,在创建一个必须package.json的配置文件
		3、创建一个必须名为node_modules的文件夹,在其中创建名为m3的文件夹,在其中创建index/xx.js的文件,去需要公开的内容,主模块想要引入必须写为require("文件夹的名字")
		
		其实真实开发中,我们程序员用的最多的就是文件模块,目录模块的第三种方式根本就不是人用的,是机器npm的使用的

     hnpmnode package managernode的模块/包管理器:专门管理第三方模块的,作用:下载安装、删除、更新、维护包的依赖关系...
         如何使用第三方模块:
                1、打开网站:npm官网
                2、搜索你需要用到的模块,尽量用带有完全符合标志的那个包
                3、打开cmd:检查一下npm下载工具是否安装成功:npm -v
                4、下载:npm i 包名
                5、删除:npm un 包名 - win7系统,删除时只需删除当前包,不会删除依赖关系
                6、更新:npm up 包名 - 有可能此项目n年后要维护,有可能包就过期了,需要更新
                下周:使用mongoDB

    i、介绍一下数据
        数据库产品 - 放着很多很多和网站相关的数据
	关系型数据库 - 以表格为主
		Oracle - Oracle(甲骨文)
			主要应用于【企业级】开发市场,企业级:大公司、国企、事业单位(银行、警察局),不差钱的公司,安全性很高
		MySQL - Oracle(甲骨文)
			主要应用于【互联网】开发市场,安全性相对较低,但是免费的,中小型公司的首选,但是和Node.js搭配不友好
		sql server - 微软:大学讲课

	非关系型数据库 - 没有固定的格式
		是一种运动 - 反关系型数据库
		主流产品 - mongoDB,以JSON数据格式为主