美文网首页
node01-认识node和ES6的新语法

node01-认识node和ES6的新语法

作者: cj_jax | 来源:发表于2018-12-11 09:32 被阅读0次

    1.浏览器的组成

    浏览器的组成

    1.用户界面

    2.浏览器的引擎

    3.js解析器

    4.网络平台

    5.渲染引擎

    6.ui后端

    7.数据存储 localStorage 、 sessStroage、 cookie

    主流的渲染引擎
    Chrome浏览器: Blink引擎(WebKit的一个分支)。

    ​ Safari浏览器: WebKit引擎,windows版本2008年3月18日推出正式版,但苹果已于2012年7月25日停止开发Windows版的Safari。

    ​ FireFox浏览器: Gecko引擎。

    ​ Opera浏览器: Blink引擎(早期版使用Presto引擎)。

    ​ Internet Explorer浏览器: Trident引擎 。

    ​ Microsoft Edge浏览器: EdgeHTML引擎(Trident的一个分支)。

    2.浏览器的工作原理

    页面在浏览器的执行过程

    1.首先浏览器解析html标签和css样式表,生成dom树

    2.根据html的标签和css样式表中的样式一一对应,生成渲染树

    3.对渲染树进行布局

    4.根据布局和渲染树的样式绘制页面


    渲染引擎执行的过程.png

    回流:

    定义:当前页面的元素的布局,大小,尺寸等发生改变,影响整个页面的时候,就会发生回流。

    正确表达为:当前render tree(渲染树)的元素,因位置、尺寸、大小发生改变,而需要页面重新绘制时,就会产生回流

    回流产生的条件:

    1.添加或删除可见的DOM元素

    2.元素的位置发生改变

    3.元素的尺寸发生改变 边距填充

    4.元素的内容发生改变 字体大小,行高,图片的尺寸的改变

    5.页面渲染初始化

    6.浏览器窗口发生改变时(产生重绘和回流的最多的)

    重绘:

    定义:当前render tree(渲染树)的一些需要更新的元素,而这些属性只是影响元素的外观、风格、而不影响布局的

    回流和重绘的关系是:

    1.每个页面加载时,至少执行一次回流+重绘

    2.回流必将引起重绘

    3.但是重绘不一定引起回流

    如何提高性能优化:

    根本的原因是减少回流和重绘的次数

    1.直接使用class类名修改样式,少用style的直接样式

    2.将元素‘离线处理’

    ​ 元素的“离线处理”的方式:

    ​ 1.设置代码片段 ,相当于一个对象,将设置样式添加到这个‘对象’上,设置完成后,再将这个对象赋值到元素身上,这样只会产生一次回流+重绘

    ​ 2.将元素设置为display:none,修改完样式后,再将该元素设置display:block,这样会产生两次重绘与回流

    3.将需要多次回流和重绘的元素,设置postion设置为absolute或则设置为fixed,脱离了标准流,它的变换不会影响到其他的元素

    浏览器与服务器的交互过程

    即:在浏览器的地址栏中输入一个域名,会发生哪些事?

    ​ 1.浏览器通过地址栏中发出请求

    ​ 2.首先会在本地找host文件解析域名,如果没有对应的ip,那么浏览器会继续找DNS服务器解析,得到对应域名的ip地址

    ​ 3.根据ip地址访问服务器具体的某个文件

    ​ 4.服务器根据浏览器的请求,将对应的数据响应给浏览器

    ​ 5.浏览器解析服务器的响应内容

    3.认识node

    什么是node:node是基于javascript实现的服务端的程序

    解释2:是一个基于chrome V8引擎的javascript的运行环境

    解释3:本质上不是一门新的编程语言,node.js是javascript运行在服务端的运行环境,编程语言还是javascript

    前端使用node的原因是:

    ​ 1.降低编程语言的切换成本,node.js本质还是js

    ​ 2.nodejs是前端项目的基础设施,前端项目中用的大量工具,都是node.js实现的

    nodejs和浏览器的区别:

    相同点:nodejs和浏览器都是javascript的运行环境,都能够解析js程序,ES的语法都能适应

    不同点:浏览器不能使用node中的功能,nodejs也不能使用浏览器中的功能

    nodejs执行js内容的方式:

    1.REPL:Read-Eval-Print-Loop

    ​ 实质相当于在浏览器的控制台执行js的代码

    2.使用node软件执行js文件,有两种方式打开node

    ​ 2.1在命令提示框内输入node命令

    ​ 2.2在vs中直接打开node控制台

    4.ES6的语法

    let/const

    ​ var 的缺点:

    ​ 1.var声明的变量会有预解析,代码执行的逻辑和数据逻辑不一致,可读性差

    ​ 2.会有全局和函数作用域

    let 的特点:

    1.会产生一个块级的作用域,

    2.变量不会被提升,不会预解析

    3.变量不能重复定义

    const的特点:

    1.使用const定义常量,声明的同时必须赋值,并且赋值之后,不能再修改

    2.变量不会被提升,不会预解析

    3.变量不能重复定义

    4.会产生一个块级的作用域,

    操作字符串的新方法

    startsWith()

    语法:字符串.startsWith('字符A');

    功能:查询当前字符串是否以字符A开头的,如果是返回true,否则返回false

    let str = "chang jie love wang ting"
    
    // console.log(str.indexOf('chang'))
    // console.log(str.indexOf('jie'))
    // console.log(str.indexOf('ting'))
    
    console.log(str.startsWith('chang'))
    console.log(str.startsWith('ting'))
    console.log(str.startsWith('love'))
    

    endsWith()

    语法:字符串.endsWith('字符B');

    功能:查询当前字符串是否以字符B结尾的,如果是返回true,否则返回false

    console.log(str.endsWith('chang'))
    console.log(str.endsWith('ting'))
    console.log(str.endsWith('love'))
    

    includes

    字符串.includes('字符c')

    功能:查询当前字符串是否存在字符c,如果是返回true,否则返回false

    console.log(str.includes('love'))
    

    操作数组的新方法

    forEach:遍历数组,将数组中的每一个元素,交给回调函数处理,没有返回值

    let arr = ['11','22','33','44','55']
    
    //forEach
     let arr1 = []
    arr.forEach(function (v) {
        arr1.push(v*2)
    })
    console.log(arr1)
    

    map:遍历数组,将数组中的每一项,交给回调函数,并且将处理后的数据保存到一个新的数组中,返回值是一个回调函数处理后的新数组

    //map
     let arr2 = arr.map(function (v) {
       return v *2
     })
     console.log(arr2)
    

    filter:遍历数组,将数组中符合条件的元素保存到一个新的数组中,返回值一个符合条件的数组

    let arr3 = arr.filter(function (v) { 
      return v >20
    })
     console.log(arr3)
    

    some:遍历数组,将数组中的每一项与条件比较,任意一项满足条件,这个数组的返回值是true

    //some
    let f1 = arr.some(function (v) {
       return v > 36  
     })
     console.log(f1)
    

    every:遍历数组,只有数组中的所有项均满足条件,才会返回一个true,否则,返回一个false

    //every
     let f2 = arr.every(function (v) {
       return v > 34
    })
     console.log(f2)
    

    find:遍历数组,查找当前数组,是否包含某一项,如果找到,返回第一个符合条件项

    //find
    
     let v1 = arr.find(function (v) { 
       return v > 12
     })
     console.log(v1)
    

    findIndex:遍历数组,查找当前数组,是否包含某一项,如果找到,返回第一个符合条件项的下标

    //findIndex
    let v2 = arr.findIndex(function (v) {
      return v > 12
    })
    console.log(v2)
    

    对象的简写

    1- 在对象中,如果属性名和变量名相同的话,可以省略一个

    2- 在对象中,方法也可以简写, 不写 : function

    let name = '春哥';
    let age = 18;
    let hobby = '敲代码';
    
    // let obj = {
    //     name: name,
    //     age: age, 
    //     sex: '男',
    //     say: function () {
    //         console.log('代码三遍敲完了吗?');        
    //     }
    // }
    
    let obj ={
      name,
      age,
      sex:'男',
      say:function () { 
        console.log('哈哈,最后一遍了')
         
      }
    }
    
    console.log(obj)
    
    

    函数的默认参数

    函数在声明的时候可以设置形参的默认值,如果有传参,则取实参,否则使用默认值

    // 函数在定义同时,可以给形参赋默认值, 如果有参数,取实参值, 没有参数就去默认值 
    // 默认参数就是备胎
    
    function add(num1=1,num2=1) {
      return num1+num2
    }
    console.log(add())
    console.log(add(10))
    console.log(add(10,10))
    

    箭头函数

    ​ 1-要用箭头来定义函数
    2-箭头函数是一个函数表达式
    let 变量名 = function (参数类表) {函数体 }
    let 变量名 = (参数类表) => {函数体 }

    // 箭头函数 
    // 1-要用箭头来定义函数
    // 2-箭头函数是一个函数表达式  
    // let 变量名 = function (参数类表) {函数体 }
    // let  变量名 = (参数类表) =>  {函数体 }
    
    
    // let add = function (n1, n2) {
    //     console.log(n1 + n2);    
    // }
    
    let add =  (n1,n2) =>{
      console.log(n1+n2)
    }
    
    add(100, 1000);
    

    箭头函数参数的优化:如果参数列表只有一个参数,小括号可以省略

    // function say() {
    //     console.log('春哥又帅了!');    
    // }
    let say = () =>'春哥又帅了!'
    // function big(num) {
    //     console.log(num * 10);    
    // }
    
    let big = num =>num * 10
    
    // function add(n1, n2) {
    //     console.log(n1 + n2);    
    // }
    let add = (n1,n2)=>n1+n2
    // 箭头函数参数列表优化 :
    // 如果只有一个参数,()可以省略 
    // let big = (num) => {
    //     console.log(num * 10);    
    // }
    console.log(say())
    console.log(big(10))
    console.log(add(1,3))
    
    

    箭头函数的函数体的优化:如果函数体只有一行代码,可以省略大括号和return

    
    // function big1(num) {
    //     console.log(num * 10);    
    //     return num * 10;
    // }
    
    // function add1(n1, n2) {
    //     console.log(n1 + n2);  
    //     return n1 + n2;
    // }
    
    // function add(n1, n2) {
    //     return n1 + n2;
    // }
    // function big(num) {
    //     return num * 10;
    // }
    // 在箭头函数中 ,如果函数体只有一行代码, {} 和 return 都可以省略 
    
    let big1 = num => {
      console.log(num * 10);    
      return num * 10;
    }
    
    let add1 = (n1, n2) => {
      console.log(n1 + n2);  
      return n1 + n2;
    }
    // let big = num => {
    //     return num * 10;
    // }
    let big = num => num * 10;
    
    // let add = (n1, n2) => {
    //     return n1 + n2;
    // }
    let add = (n1, n2) => n1 + n2;
    
    console.log(big(3));
    
    console.log(add(1, 2));
    

    相关文章

      网友评论

          本文标题:node01-认识node和ES6的新语法

          本文链接:https://www.haomeiwen.com/subject/ncfshqtx.html