• js基础总结


    ## 数据类型的分类和判断

    * 基本(值)类型
    * Number ----- 任意数值 -------- typeof
    * String ----- 任意字符串 ------ typeof
    * Boolean ---- true/false ----- typeof
    * undefined --- undefined ----- typeof/===
    * null -------- null ---------- ===
    * 对象(引用)类型
    * Object ----- typeof/instanceof
    * Array ------ instanceof
    * Function ---- typeof

    var a
      console.log(a, typeof a, a===undefined) // undefined 'undefined' true
      console.log(a===type a) // false
    
      a = 3
      console.log(typeof a === 'number')//true
      a = 'atguigu'
      console.log(typeof a === 'string')//true
      a = true
      console.log(typeof a === 'boolean')//true
    
      a = null
      console.log(a===null) // true
      console.log(typeof a) // 'object'

    1. undefined与null的区别?
    *         undefined代表没有赋值
    *         null代表赋值了, 只是值为null
    2. 什么时候给变量赋值为null呢?
    *         var a = null //a将指向一个对象, 但对象此时还没有确定
    *           a = null //让a指向的对象成为垃圾对象
    3. 严格区别变量类型与数据类型?
    * js的变量本身是没有类型的, 变量的类型实际上是变量内存中数据的类型
    * 变量类型:
    *          基本类型: 保存基本类型数据的变量
    *         引用类型: 保存对象地址值的变量
    * 数据对象
             * 基本类型
             * 对象类型

    4. 什么是数据?
          * 存储于内存中代表特定信息的'东东', 本质就是0101二进制
          * 具有可读和可传递的基本特性
          * 万物(一切)皆数据, 函数也是数据
          * 程序中所有操作的目标: 数据
          * 算术运算
          *  逻辑运算
          * 赋值
          * 调用函数传参

    5. 什么是内存?
           * 内存条通电后产生的存储空间(临时的)
            * 产生和死亡: 内存条(集成电路板)==>通电==>产生一定容量的存储空间==>存储各种数据==>断电==>内存全部消失
            * 内存的空间是临时的, 而硬盘的空间是持久的
              * 一块内存包含2个数据
              * 内部存储的数据(一般数据/地址数据)
             * 内存地址值数据
              * 内存分类
             * 栈: 全局变量, 局部变量 (空间较小)
             * 堆: 对象 (空间较大)

    6   什么是变量?        * 值可以变化的量, 由变量名与变量值组成

            * 一个变量对应一块小内存, 变量名用来查找到内存, 变量值就是内存中保存的内容
      7  内存,数据, 变量三者之间的关系
    *         内存是一个容器, 用来存储程序运行需要操作的数据
             * 变量是内存的标识, 我们通过变量找到对应的内存, 进而操作(读/写)内存中的数据

      8问题: var a = xxx, a内存中到底保存的是什么?
              * xxx是一个基本数据
                * xxx是一个对象
               * xxx是一个变量

       9.个引用变量指向同一个对象, 通过一个引用变量修改对象内部数据, 另一个引用变量也看得见

        var obj1 = {}
      var obj2 = obj1;
      obj1.age=11;
      function f1(obj) {
        obj.age = 12
      }
      f1(obj2)
      console.log(obj1.age)//12
            

     10  2个引用变量指向同一个对象,让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象

      var obj3 = {name: 'Tom'}
      var obj4 = obj3
      obj3 = {name: 'JACK'}
      console.log(obj4.name)
      function f2(obj) {
        obj = {name: 'Bob'}
      }
      f2(obj4)
      console.log(obj4.name)

    11   在js调用函数时传递变量参数时, 是值传递还是引用传递

                                   《两者都有》

           * 只有值传递, 没有引用传递, 传递的都是变量的值, 只是这个值可能是基本数据, 也可能是地址(引用)数据
          * 如果后一种看成是引用传递, 那就值传递和引用传递都可以有

      function f(a) {
        console.log(a)
      }
      var n = 4
      f(n) //传递的是n的值 --->值传递
    
      function f2(a) {
        a.name = 'atguigu'
      }
      n = {}
      f2(n) // 传递的是n指向的对象 ---> 引用传递   ???
      console.log(n.name)

      

    12问题: JS引擎如何管理内存?
          1. 内存生命周期
                1). 分配需要的内存
                2). 使用分配到的内存
                 3). 不需要时将其释放/归还
    13. 释放内存
              * 为执行函数分配的栈空间内存: 函数执行完自动释放
             * 存储对象的堆空间内存: 当内存没有引用指向时, 对象成为垃圾对象, 垃圾回收器后面就会回收释放此内存

    14. 什么是对象?
         * 代表现实中的某个事物, 是该事物在编程中的抽象
         * 多个数据的集合体(封装体)
         * 用于保存多个数据的容器
    2. 为什么要用对象?
          * 便于对多个数据进行统一管理
    3. 对象的组成
          * 属性
           * 代表现实事物的状态数据
           * 由属性名和属性值组成
           * 属性名都是字符串类型, 属性值是任意类型
           * 方法
           * 代表现实事物的行为数据
          * 是特别的属性==>属性值是函数
    4. 如何访问对象内部数据?
         * .属性名: 编码简单, 但有时不能用

        

    p.name

         * ['属性名']: 编码麻烦, 但通用   1,

    p['age']
      // 访问对象内部数据
      console.log(p.name, p['age'])
      p['age']=23;
      console.log(p['name'], p.age)

    5.   什么时候必须使用【‘属性名’】的方式?

           1.属性名不是合法的标识名 

                                             添加一个属性: content-type: text/json

                                  

     //  p.content-type = 'text/json' //不正确
      p['content-type'] = 'text/json'

       2. 属性名不确定

      

    var p = {}
    var prop = null;
     var value = 123
      // p.prop = value  //不正确
      p[prop] = value
      console.log( p[prop])

    ## 数据,变量, 内存的理解============================================================
      1.  什么是数据? 
                          * 在内存中可读的, 可传递的保存了特定信息的'东东'
                          * 一切皆数据, 函数也是数据
                          * 在内存中的所有操作的目标: 数据
      2   什么是变量?
                                 * 在程序运行过程中它的值是允许改变的量
                                * 一个变量对应一块小内存, 它的值保存在此内存中
      3 什么是内存?
                            * 内存条通电后产生的存储空间(临时的) 
                            * 一块内存包含2个方面的数据
                           * 内部存储的数据
                           * 地址值数据
                           * 内存空间的分类
                           * 栈空间: 全局变量和局部变量
                           * 堆空间: 对象
                          * 内存,数据, 变量三者之间的关系
                          * 内存是容器, 用来存储不同数据
                          * 变量是内存的标识, 通过变量我们可以操作(读/写)内存中的数据

         ## 4 对象的理解和使用
                  1* 什么是对象?
                            * 多个数据(属性)的集合
                             * 用来保存多个数据(属性)的容器
                  2.* 属性组成:
                             * 属性名 : 字符串(标识)
                             * 属性值 : 任意类型
                  3* 属性的分类:
                                  * 一般 : 属性值不是function 描述对象的状态
                                * 方法 : 属性值为function的属性 描述对象的行为
                                          * 特别的对象
                                 * 数组: 属性名是0,1,2,3之类的索引
                                   * 函数: 可以执行的
                    4   * 如何操作内部属性(方法)
                                        * .属性名
                                *  ['属性名']: 属性名有特殊字符/属性名是一个变量

                     5## 函数的理解和使用
                                       * 什么是函数?
                            * 用来实现特定功能的, n条语句的封装体
                           * 只有函数类型的数据是可以执行的, 其它的都不可以
                    6* 为什么要用函数?
                                * 提高复用性
                               * 便于阅读交流
                               * 函数也是对象
                             * instanceof Object===true
                             * 函数有属性: prototype
                            * 函数有方法: call()/apply()
                           * 可以添加新的属性/方法
                     7* 函数的3种不同角色
                                   * 一般函数 : 直接调用

                                           

      function showInfo (age) {
        alert("一般函数")
      }
      showInfo//一般函数调用


                                 * 构造函数 : 通过new调用

                                     

    var a=new showInfo(13),


                                * 对象 : 通过.调用内部的属性/方法


    *     函数中的this
    *       显式指定谁: obj.xxx()
    * 通过call/apply指定谁调用: xxx.call(obj)

                       function show(age){
                          alert(this)
                         this.name=function(){
                              alert(this)
                           }
                             this.age=10;
                           this.age=function(age){
    
                              this.age=13;
                              alert(this)
                           }
                       }
    
    
                      // show();//window
                       var p = new show();//指向调用它的对象p
                      // p.name             //指向调用它的对象p
                  //     p.age.call(14)       //指向调用它的对象p  p.age.call =show(14). 弹出14指向p
    
    
                       function fun1() {
                           function fun2() {
                               console.log(this);
                           }
    
                           fun2(); //this是谁?  this指向fun1()
                       }
                           fun1();
    View Code


    * 不指定谁调用: xxx() : window

    function show(gae){

    alert(this);
    }
    alert(show())//object window


    * 回调函数: 看背后是通过谁来调用的: window/其它
    * 匿名函数自调用:
    ```
    (function(w, obj){
    //实现代码
    })(window, obj)

        (function(){
            alert('立即调用简称IIFE')
        })(Window)


    ```
    * 专业术语为: IIFE (Immediately Invoked Function Expression) 立即调用函数表达式
    * 回调函数的理解
    * 什么函数才是回调函数?
                  * 你定义的
                     * 你没有调用
                     * 但它最终执行了(在一定条件下或某个时刻)
                   * 常用的回调函数
                       * dom事件回调函数

      //1. DOM事件函数
      var btn = document.getElementById('btn')
      btn.onclick = function () {
        alert(this.innerHTML)
      }

                       * 定时器回调函数

      //2. 定时器函数
      setInterval(function () {
        alert('到点啦!')
      }, 2000)

                       * ajax请求回调函数
                         * 生命周期回调函数

  • 相关阅读:
    LVS基于DR模式负载均衡的配置
    Linux源码安装mysql 5.6.12 (cmake编译)
    HOSt ip is not allowed to connect to this MySql server
    zoj 3229 Shoot the Bullet(无源汇上下界最大流)
    hdu 3987 Harry Potter and the Forbidden Forest 求割边最少的最小割
    poj 2391 Ombrophobic Bovines(最大流+floyd+二分)
    URAL 1430 Crime and Punishment
    hdu 2048 神、上帝以及老天爷(错排)
    hdu 3367 Pseudoforest(最大生成树)
    FOJ 1683 纪念SlingShot(矩阵快速幂)
  • 原文地址:https://www.cnblogs.com/hack-ing/p/11918222.html
Copyright © 2020-2023  润新知