JavaScript 红宝书学习记录

函数

  • 什么是函数?

    • function,也叫 方法(method)或过程procedure。是一段 预定义 好的,并且可以被 反复执行的 代码块;
    • 预定义:提前声明好,不是马上使用。
    • 反复执行:可以被循环利用。
    • 代码块:允许包含多条可执行语句。
    • 函数本身不运行,必须调用才能运行。调用 函数名();
  • 函数的参数

    • 在函数体内,可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。

      • function add(num1,num2){
          arguments[1]=10;
          console.log(num2) // 10 因为被arguments重写了
          console.log(arguments[0]+num2) // 20
        }
        add(10,30)
        复制代码
  • 函数没有重载

    • 即函数如被重复定义,只会以最后定义的为准。

变量、作用域、内存

  • 基本类型值:指的是简单的数据段。

  • 引用类型值:指那些可能由多个值构成的对象。

  • 使用var 声明的变量会自动添加到最接近的环境中;如在函数中使用var定义,则该变量为该函数的

  • 基本类型 Undefined Null Boolean Number String 是按值访问
    引用类型 的值是保存在内存中的对象,不允许直接访问内存中的位置,也就是不能直接操作对象的内存空间。
    在操作对象时,实际上是操作对象的引用而不是实际的对象。所以引用类型的值是按引用访问的。
    复制代码
  • 复制变量值,基本类型值和引用类型值也不相同

    • 一个变量向另一个变量复制基本类型值,会在变量对象上创建一个新值,后续操作两个变量不会互相影响到各自;

    • 一个变量向另一个变量复制引用类型值,改变其中一个,另一个随之改变;因为对象保存在堆内存中,两个变量引用的都是同一个对象。复制后得变量的值的副本实际上是一个指针。

  • 传递参数:参数实际上是函数的局部变量,参数只能按值传递

      

    function setName(obj){
      obj.name="asd";
      // 在函数内部修改了参数的值,原始的引用保持不变
      obj={};
      obj.name="1223"; // 当在 函数内重写obj时,这个变量引用的就是一个局部对象,局部对象会在函数执行完后立即被销毁,所以函数外再访问对象时,还是参数之前的引用值。
    }
    var obj2={};
    setName(obj2)
    console.log(obj2.name)// asd
    复制代码
  • 检测数据类型

    • typeof 可以检测基本数据类型 中的 undefined string boolean number 的最佳工具,对对象或者Null 都会检测为object;

    • instanceof 检测引用类型的值

      • var obj3 = {};
        console.log(obj3 instanceof Object) // true
        console.log(obj3 instanceof Array)  // false
        console.log(obj3 instanceof RegExp) // false
        console.log(obj3 instanceof Function) // false
        复制代码

引用类型

  • Object 类型

    • 创建Object 实例有两种方式
      • 使用new 操作符后跟Obejct 构造函数;var obj = new Obejct();
      • 使用对象字面量表示法;向函数传递大量可选参数的首选 var obj = {};
    • 访问对象属性时的方式
      • 点表示法;obj.name
      • 方括号语法;优点是可以通过变量俩访问属性;obj[name]
  • Array 类型 :可随着数据的添加自动增长以容纳新增数据

    • 创建数组有两种方式

      • var arr = new Array();
      • var arr = [];
    • 数组的下标索引从0开始 到arr.length-1 结束;

    • 如果数组中,当前索引下标没有定义数据,则新增的每一项都会取得undefind值;

    • 数组最多可以包含 4 294 967 295个项

    • 检测数组

      • Array.isArray(); ie9+/firefox 4+/
    • 数组转字符串

      • arr.join(); 接收一个参数,即用作分隔符的字符串;
    • 栈方法 会改变数组

      • 栈是后进先出的数据结构
      • 栈的插入和移除,都发生在栈的顶部
      • push() 插入
      • pop() 移除
    • 队列方法

      • 是先进新出

      • shift(); 移除

      • unshift(); 推入

        • var co = [];
          co.unshift('asd', 'asdasd')
          console.log(co) //[ 'asd', 'asdasd' ]
          var x = co.shift();
          console.log(typeof x) // string
          console.log(co) // ['asdasd']
          复制代码
    • 重排序方法

      • reverse() 翻转

      • sort()

        • 按升序排列,最小的值位于最前面,会调用数组的toString()方法,然后比较字符串,来确定如何排序。

        • 可以接受一个比较函数作为参数,比较函数接受两个参数。通过两个比较函数的参数来判断大小。

          • var arr=['2',1,'12',13,9]
            arr.sort(function(a,b){
              // return a-b; 升序
              return b-a; // 降序
            })
            // console.log(arr) //return a-b; [ 1, '2', 9, '12', 13 ]
            console.log(arr) //return b-a; [ 13, '12', 9, '2', 1 ]
            复制代码
    • 操作方法

      • concat() 不会改变原数组,会在数组后追加当前新增数据
      • slice() 不会改变原数组 基于当前数组中的一个或多个项来创建新数组;
        • 1个参数时;返回从参数指定位置开始到当前数组结尾的所有项;
        • 2个参数时;返回起始和结束位置之前的项,不包括结束位置的项 含头不含尾
      • splice() 改变原数组 始终返回一个数组
        • 删除:2个参数时;要删除的第一项的位置和要删除的数量;
        • 插入:3个参数时;起始位置,0 要删除的项数,要插入的项;
        • 替换:向指定位置插入任意数量的项,且同时删除任意数量的项;splice(2,1,'red','g')
    • 位置方法 查找项必须严格相等 ===; 返回该项在数组中的索引位置;

      • indexOf()
      • lastIndexOf()
    • 迭代方法 都会对数组中的每一项运行给定的函数;都不会改变原数组

      • every() 如果该函数对每一项都返回true,则返回true; 一假为假
      • filter() 返回该函数会返回true的项组成的数组;
      • forEach() 没有返回值;
      • map() 返回每次函数调用的结果组成的数组
      • some() 如果该函数对任意一项返回true,则返回true; 一真为真
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值