前端知识点一

本文涵盖了前端开发中的一些基础知识,包括id与class的区别、HTTP的GET与POST请求、ES6的rest参数、模块化开发的AMD、CMD、CommonJS和ES6介绍,以及CSS的布局和JavaScript的变量命名规则等。还提到了BOM对象中的Window、Navigator、Location、History和Screen等概念。
摘要由CSDN通过智能技术生成
2019-4-18日断更,持续更新转https://blog.csdn.net/huanhuan_Coder/article/details/89371508
  • id和class的区别和联系。
    联系:class 和id都是用来选择调用CSS样式属性。
    区别:class:.css5{属性:属性值;}可以无数次调用。id:代表着标签的身份,只能出现一次,并且具有唯一性。
  • post是通过data发送的,即body,而get是通过params发送的。
  • ES6 rest参数
  • AMD、CDM、CommonJS和ES6是模块化开发的方案,也是标准。
    • AMD是RequireJS在推广过程中对模块化定义的规范化产出。 AMD异步模块定义,AMD是一个概念,RequireJs是对AMD的实现,像javas对ECMAScript的现实。
    • CMD是SeaJS在推广过程中对模块定义的规范化产出。CMD是同步模块定义,SeaJS是对CMD的实现,是淘宝团队提供的框架。CommonJS是通过module.exports来定义的,浏览器不支持module.exports,ES6也不支持,它是在服务端nodeJS后端使用的。输出有两种方式,一种是匿名输出module.export,另一种是exports.name[实际名字]输出。
    • ES6 export/import 先export后import 。AMD、CMD、CommonJSo都是ES5里,export和import是ES6新增的。
  • post是通过data发送的,即body,而get是通过params发送的。
  • asset和static都是存放静态资源的,但是asset更倾向于主键资源,但是页面上加载的图片会放到static里面,webpack在打包时会将asset里面的资源打包,webpack在打包时,如果asset里面的图片足够小,那么会 生成base64格式,但是static里面的图片一般是通过src的方式被加载
  • id和class具有相同的属性的时候,id的优先级高于class。
  • link引用的是css样式,script引用的是javascript脚本,css放页头,js放页尾。
  • 块级元素
    • 总是在新行上开始;
    • 高度,行高以及外边距和内边距都可控制;
    • 宽度缺省是它的容器的100%,除非设定一个宽度。
    • 它可以容纳内联元素和其他块元素
  • 行内元素
    • 和其他元素都在一行上;
    • 高,行高及外边距和内边距不可改变;
    • 宽度就是它的文字或图片的宽度,不可改变
    • 内联元素只能容纳文本或者其他内联元素
  • 对行内元素,需要注意如下:
    • 设置宽度width 无效。
    • 设置高度height 无效,可以通过line-height来设置。
    • 设置margin 只有左右margin有效,上下无效。
    • 设置padding 只有左右padding有效,上下则无效。注意元素范围是增大了,但是对元素周围的内容是没影响的。
  • position:absolute; 是相对于position:relative;来的
  • 鼠标移上去变成小手cursor: pointer;
  • 就表现而言em,i表现都一样,都是表示斜体。i是视觉要素,表示无意义的加粗,无意义的斜体,仅仅表示样式上是粗体或斜体,而没有强调的语义,这两个标签在HTML4.01中不推荐使用,建议用CSS样式;em是表达要素。 em表示一般的强调文本,这个标签具有语义。该标签中的内容在搜索引擎中更受重视,一些语音阅读器也会根据它在阅读时加强语气。
  • white-space: nowrap;不换行
    overflow: hidden;溢出的文字隐藏
    text-overflow: ellipsis;溢出的文字用省略号代替
  • js变量的命名规则:
    • 区分大小写。
    • 要以字母、下划线_或$开始,不能以数字开始,其他位置可以是字母、下划线、数字和$。
    • 标识符一般都采用驼峰命名法,即首字母小写,每个单词的开头大写,其余字母小写,如helloWorld。
  • 全局变量和局部变量
    函数里定义的变量是局部变量,只能在本函数里使用,函数外定义的变量是全局变量,在整个文件里都可以使用。
  • 预解析
    浏览器获得JS文件的时候,不是去立刻去执行代码,而是全篇快速扫描一遍,把变量的声明提前。
//变量的声明提前
console.log(x);
var x = 1;
//打印出来是undefined。变量的声明也会在一开始就被放入内存中了,但是并没有赋值,所以在它赋值之前,它的值就是undefined;如果不用var声明,会报错。
  • 函数作用域 尚硅谷的视频讲的很清楚,里面是一些小的练习?:https://www.bilibili.com/video/av34087791/?p=60,只看前3分半就可以。
  • //函数的声明提前
    //函数声明,会被提前创建
    fun();//正确
    fun2();//报错
    function fun(){
         
    	console.log("我是一个fun函数");
    }
    
    //函数表达式,不会被提前创建
    var fun2 = function(){
         
    	console.log("我是fun2函数");
    };
    //打印出来是3,因为预解析已经将add函数提到前面去了。
    
    console.log("y1=" + y);
    var res = add(1,2);
    console.log("y2=" + y);
    function add(a,b){
         
        y = 1;
        return a+b;
    }
    //此时会报错,出错行数是第一行,因为当时add函数没有加载,所以全局变量y并没有被解析。
    
    需要注意的是预解析不会跨< script >
  • 闭包:变量的私有化问题
  • function add(){
         
        var counter = 0;    //声明一个局部变量
    
        plus = function(){
         
            counter++;     //具有全局变量的生命周期,但是是一个局部变量
            console.log("counter=" + counter);
        }
    }
    
    add();
    plus(); //1
    plus(); //2
    console.log(counter);  //报错,counter是一个局部变量
    
  • 函数
  • /*函数中加return __会有返回值,如果没有加return或者return后面没有内容,
    则函数返回的是undefined*/
    function mianji(r){
         		
       return 3.14*r*r;
    }
    console.log(mianji(10));//输出的是mianji函数的返回值
    console.log(mianji);//输出的是mianji函数体
    
    
  • 函数立即执行参考:https://www.cnblogs.com/cnfxx/p/7337889.html
  • 对象及其属性
  • //属性名:属性值
    var person = {
         
        name: "chenyz",  //属性名可以不加双引号,会隐式的将name转化成"name"
        sex: "female",
        age: 18,
        major: "dase",
        "now-city": "shanghai", // 如果有特殊符号,例如空格或者-要加双引号
        "g f":"liuhuan",
        dog:{
         
            name: "doudou",
            sex: "male",
            age: "1",
        }
    }
    
    //查
    var name = person.name;
    var name = person["name"];   //效果和上面的一样
    
    var city = person["now-city"];//只能用这种方式
    //增
    person.height = 175;
    //删
    delete person.age;
    //查-遍历
    for(var pN in person){
         
        console.log("属性名是:" + pN + "属性值是:" + person[pN]);
    }
    //检查对象中是否有某属性值
    console.log("name" in person);//true
    
    //关于赋值
    var person2 = person;
    //将person对象的地址赋给person2,通过person2对象改变的值person对象也会改变。
    
  • 自定义类(ES6方法)
  • class Person{
         
        constructor(name,age){
         
            this.name = name;
            this.age = age;
        }
        slogan() {
         
            return "我的名字是" + this.name + ",我今年" + this.age + "岁";
        }
    }
    
    var per_one = new Person("刘欢","24");
    console.log(per_one.slogan());
    
  • 浏览器加载页面过程
    1. 输入一个网址:http://www.baidu.com
    2. 浏览器把www.baidu.com发送给DNS服务器,将网址解析出IP地址14.215.177.39/。
    3. 浏览器收到14.215.177.39后将IP地址缓存到本地,下次访问时不用再次利用DNS解析
    4. 服务器将收到的请求内容进行处理,并返回给浏览器页面的内容。
    5. 浏览器收到服务器发来的文件,将内容进行解析
    6. 显示页面
    • HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
    • 根据端口号确定送给哪个应用程序处理,例如80端口是指http服务,53端口是指dns服务。
  • JS时间线:第一阶段->载入阶段 默认同步 loading
    1. 获取页面内容.html进行解析
    2. 构建DOM树 html head meta title script...逐个标签向下读取
    3. 解析完成
    4. 渲染->文件下载 图片
    5. 载入阶段结束
  • BOM弹窗
  • //cc是全局变量,所以可以用window
    var cc = "Chenyz";
    console.log(window.cc);
    
    alert("alert 弹窗");
    
    //确认窗口
    var bcf = confirm("confirm 窗口");
    console.log(bcf);
    
    //输入框
    var strpt = prompt("prompt输入:","prompt默认的输入");
    console.log(strpt);
    
  • BOM导航栏
  • screen;//分辨率等信息
    navigator;//操作系统和浏览器内核等信息,userAgent
    window.location;//浏览器的导航栏信息<br>
    location.reload();//重新加载<br>
    location.replace(" ");//加载新的网址<br>
    history.back();//浏览器后退
    history.forward();//浏览器前进
    history.go(0);//浏览器刷新,相当于history.go();
    history.go(1);//浏览器前进一步,相当于history.forward();
    history.go(-1);//浏览器后退一步,相当于history.back();
    
  • BOM计时器
  • var num = 0;
    function add(){
         
        console.log("num = " + ++num);
    }
    function end(){
         
        console.log("setTimeout clearInterval");
        clearInterval(sil);  //清除sil
    }
    
    var sil = setInterval(add, 1000); //每隔多长时间执行一次add()函数,重复执行
    var clear = setTimeout(end,5000); //长时间之后执行end,只执行一次
    
  • BOM和DOM
    1. BOM(Browser Object Model)即浏览器对象模型。
      BOM提供了独立于内容而与浏览器窗口进行交互的对象;
      由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window;
      BOM缺乏标准,JavaScript语法的标准化组织是ECMA,DOM的标准化组织是W3C,BOM最初是Netscape浏览器标准的一部分。
    2. DOM(Document Object Model)即文档对象模型。它是HTML文档的对象化描述,也是HTML元素与外界(如Javascript)的接口。
  • DOM树元素节点
    1. document节点
    2. 标签节点/元素节点
    3. 文本节点
    4. 找到节点的方法
  • //根据ID->id1找到节点,ID具有唯一性,只能用document获取。
    var res = document.getElementById("id1");
    /*根据类名->testClass获取,类不是唯一的。
    获得到的className是一个数组,可以根据下标获取指定节点。
    可以用document获取,也可以根据父节点获取 
    var className = div.getElementsByClassName("testClass");*/
    var className = document.getElementsByClassName("testClass");
    /*根据标签名->p获取。
    获得到的tagName是一个数组,可以根据下标获取指定节点。
    获取方式和class类似。
    */
    var tagName = document.getElementsByTagName("p");
    
  • 添加删除节点
  • /***********创建节点*********/
    var res = document.getElementById("div1");
    //创建一个p标签
    var createP = document.createElement("p");
    //创建一个文本节点
    var pTxt = document.createTextNode("这个JS教程快学完了hhhh");
    //将文本节点添加到p标签上
    createP.appendChild(pTxt);
    //将p节点添加到div节点上
    res.appendChild(createP);
    
    /***********删除节点*********/
    //根据父节点将节点删去
    var res2 = document.getElementById("div2");
    res2.parentNode.removeChild(res2);
    
  • 节点属性/内容修改
  • var res = document.getElementById("div2");
    res.getAttribute("class") //获取id为div2的class属性
    res.setAttribute("class","newName");//给class属性设置新的名字
    res.removeAttribute("class");//移除class属性
    
    //修改标签p里面的内容,innerHTML里的格式可以是html样式的。
    <p id="p1">内容修改之前</p>
    var p1 = document.getElementById("p1");
    p1.innerHTML = "我的内容变了!我可以指向一个网址<a href='https://www.baidu.com'>点一下进入百度?首页</a>";
    //标签里的内容是纯文本
    p1.textContent = "只能显示纯文本!";
    
  • 事件处理
    1. html属性
  • var num = 0;
    function add(){
         
        console.log("num = " + ++num);
    }
    //一种是在js文件里面赋函数
    var res = document.getElementById("div2");
    res.onclick = add;
    
    //一种是在html里面直接指定
    <div class="testClass" id="div2" onclick="add()">hahah</div>
    <>
    
  • 通过调用系统提供的方法
  • //现在主流的事件调用方式,添加事件类型以及事件,可以添加多个事件,这是html方式做不到的
    res.addEventListener("click",add); 
    res.removeEventListener("click",add); //移除事件,和添加事件的参数一一对应
    
  • 关于target
  • target = "_black";	//在新窗口中打开
    target = "_self";	//在本窗口打开
    target = "_parent";	//在父级Frame(框架)窗口打开
    target = "_top";		//在顶级Frame(框架)窗口打开
    
  • keydown和keypress的区别
    1. KeyDown中返回的是键盘的代码, 而KeyPress返回的是ASCII字符。
    2. KeyDown是任何键都会触发,比如shift、Ctrl等;而KeyPress只接受有内容的键,比如A-Z、0-9、];等等
  • 事件传播
    • 在默认情况下,点击页面的一个标签,处在处在传播路径(在DOM树上处在同一路径上的)上的标签都会监听到对应的事件。
    • 事件流:对应标签接收到事件的顺序
       两大阶段:参考视频https://www.bilibili.com/video/av26779705/?p=28
       捕获阶段:起始点->目标位置
       冒泡阶段:目标位置->起始点
    • /*addEventListener有3个参数:(事件类型,事件,传播方式)。
      默认是false,冒泡方式。如果想使用捕获方式,将第三个参数改为true。*/
      res.addEventListener("click",add); 
      
    • 事件代理 点开参考呀
    • <ul>
        <li>li1</li>
        <li>li2</li>
        <li>li3</li>
        <li>li4</li>
        <li>li5</li>
      </ul>
      function clik(event){
           
          console.log(event.target);  //根据event.target可以找到点击的第几个li标签
      }
      /*ul标签下有多个li标签,如果每个li标签使用ID或者class标明,工作量繁琐,
      所以直接在li标签的父标签上作用,再找到相应的li标签。*/
      var ul1 = document.getElementsByTagName("ul")[0];
      ul1.addEventListener("click",clik);
      
    • script标签一旦用于引入外部文件了,就不能再便编写代码了,即使编写了浏览器也会忽略,如果需要可以再创建新的script标签用于编写内部代码。
    • Number
    • Number.MAX_VALUE //JS所表示的最大的数字
      Number.MAX_VALUE * Number.MAX_VALUE  //表示的是Infinity
      var a = Infinity;//此时变量a表示的是正无穷,类型为number
      console.log(typeof a); //number
      
      Number.MIN_VALUE  //JS所表示的>0的最小的数字
      Number.MIN_VALUE * Number.MIN_VALUE  //返回0
      
      var str = "abc" * "def";//返回的str为NaN,Not a number,是一个number类型
      console.log(typeof str);//number
      
    • 运算
      在JS中整数运算基本可以保证精确,但是浮点运算可能得到一个不精确的结果。 例如0.1+0.2= 0.30000000000000004
    • null和undefined
    • var res = null;
      console.log
    评论 2
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值