zoukankan      html  css  js  c++  java
  • 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请求回调函数
                         * 生命周期回调函数

  • 相关阅读:
    设置Sysctl.conf用以提高Linux的性能(最完整的sysctl.conf优化方案)
    XSS攻击及防御
    通过Nginx,Tomcat访问日志(access log)记录请求耗时
    nginx配置长连接
    nginx常见内部参数,错误总结
    nginx 并发数问题思考:worker_connections,worker_processes与 max clients
    Nginx与Tomcat、Client之间请求的长连接配置不一致问题解决[转]
    JavaScript的基准测试-不服跑个分?
    延迟求值-如何让Lo-Dash再提速x100?
    如果把编程语言当成座驾
  • 原文地址:https://www.cnblogs.com/hack-ing/p/11918222.html
Copyright © 2011-2022 走看看