js高级程序设计 笔记

一,变量和作用域

  1, js变量可以保存两种类型,基本类型、引用类型和symbol类型,基本类型有5种:undefined、null、boolean、number、string,它们都有以下的特征

    • 基本类型在内存中占据固定大小的空间,因此被保存在栈内存中
    • 从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本
    • 引用类型的值是对象,保存在堆内存中
    • 包含引用类型的变量只是一个指向该对象的指针
    • 复制引用类型,只是复制了指针,其实两个变量都指向同一个对象。
    • 确定基本类型的种类可以使用typeof操作符,确定是哪种引用类型可以使用instanceof操作符,也可以使用Object.prototype.toString.call()来进行处理 

  2,所有变量都存在一个执行环境,这个执行环境决定了变量的生命周期和访问区间

    • 执行环境分为全局和函数执行环境
    • 每次进去一个新的执行环境,都会创建一个用于搜索变量和函数的作用域链
    • 变量的执行环境有助于确定何时释放内存   

二,引用类型

  1,Object类型

    创建Object实例的方法有三种,

      Object.create

      new Object()

      对象字面量

    一般用点表示法来访问对象属性,不过也可以用方括号来访问,方括号的优点是可以通过变量来访问属性。

  2,Array类型

    创建Array实例有两种方法

      new Array()  或者 省略new   Array(),如果只有一个参数并且为数值,则创建一个数值长度的数组,每一项为undefined,如果为其他类型,则创建一个只有那个值的一项的数组。

      数组字面量方式  [1,2,3]

    数组的length属性是可以设置的,通过设置length可以从数组的末尾移除项或者向数组中添加新项,添加的新项都为undefined

    检测数组:  value instanceof Array : 使用instanceof的问题在于,它假定的只有一个全局执行环境,如果页面中包含多个框架,那实际上就有两个以上不同的全局执行环境,从而存在两个以上的Array构造函数,如果从一个框架传数组到另一个框架,那么这两个数组分别有不同的构造函数。这里可以使用Array.isArray()来进行检测。

    转换方法:

      toString():返回数组每个值的字符串拼接成的以逗号分隔的字符串。

      valueof(): 返回的还是数组本身

      toLocalString() :和toString返回的一样。

      join() :  默认也是返回数组每个值的字符串拼接的以逗号分隔的字符串,可以自定义分隔符。

    栈方法和队列方法:

      push: 后进   , 修改原数组,返回新数组的长度。

      pop: 后出,  修改原数组,返回移除的项

      unshift: 先进 , 修改原数组,返回新数组的长度

      shift : 先出,修改原数组,返回移除的项

    重排序:

      reverse() : 反转数组,改变原数组    返回值为排序之后的数组

      sort() :  调用数组每一项的toString 方法,然后比较得到的字符串。  返回值为排序之后的数组。会改变原数组。

    操作方法:

      concat() : 合并数组, 返回值为合并之后的数组

      

  

猜你喜欢

转载自www.cnblogs.com/wjyz/p/10255509.html