JavaSrcipt红宝书阅读导图(二)



  • 三、变量、作用域和内存问题

    1. 类型

    • 基本类型
      • 简单数据段
    • 引用类型
      • 多个值构成的对象
      • 操作对象都是以引用的方式访问

    2. 变量

    • 动态属性
      • 可以给对象动态地添加属性值
      • 简单类型不能添加属性值
    • 传递参数
      • 简单类型是按值传入
      • 对象类型是按引用传入
        • 会改变对象内的值,并反映到调用函数的地方
        • 在函数中为对象赋值为新对象,并不会反映到函数外部,会在函数结束后新对象销毁
    • 复制
      • 简单类型可以直接复制
      • 对象复制是浅复制,只是复制引用
    • 检测类型
      • typeof
      • instanceof
        • 检测一个引用类型值和Object构造函数时,返回true

    3. 作用域

    • 当代码在环境中运行时,会创建一个作用域链
    • 链从本函数的arguments开始,再到外部环境变量,再到下一个外部环境,直到全局变量
    • 解析从作用域链一级一级向上回溯
    • 延长作用域链
      • try-catch语句的catch
      • with语句
    • 没有块级作用域
      • 声明变量
        • 在语句块中用var声明变量,会把变量添加到最近的环境中,即语句块的所在函数
        • 在函数中用var声明变量,把变量添加到最近的环境中,即这个函数局部,因此不能在函数外部访问函数内部的变量
        • 如果函数中的变量不是局部变量,那么有可能会影响到外部的变量
      • 查询标识符
        • 从作用域链一级一级向上回溯,查到就立刻终止查询,并返回值,如果全局都没有,返回undefined或错误
    • 垃圾收集
      • 标记清除
      • 引用计数
        • 循环计数会造成内存泄露

    四、引用类型

    1. Object

    • 创建对象
      • var person = new Object()
      • var person = {}
      • 属性值自动转换成字符串
    • 访问属性
      • obj.propname
      • obj["propname"]
        • 可以解决点表示法中的数字、空格等情况

    2. Array

    • 数组可以保存任何类型的数据
    • 创建数组
      • var colors = new Array()
      • var colors = []
    • length
      • 数组长度
        • 手动设置length可以改变数组大小,扩充的用Undefined表示
        • colors[colors.length]="purple"可以表示在数组插入一个值在末尾,并且更新数组长度length
    • Array.isArray()
      • 用于检测是否是数组
    • 转换方法
      • toString()
      • toLocaleString()
      • valueOf()
      • join()
        • 设置分隔符
    • 栈方法
      • push()
        • 数组末尾插入
      • pop()
        • 数组末尾取出
    • 队列方法
      • push()
      • shift()
        • 数组开头取出
      • unshift()
        • 数组开头插入
      • pop()
    • 重排序方法
      • reverse()
        • 反转
      • sort()
        • 排序
        • 参数:compare函数自定义定义排序效果
    • 操作方法
      • concat()
        • 拼接两个数组
        • 返回拼接后的数组,原数组不变
      • slice()
        • 返回起始位置到结束位置构成的新数组
        • 对原数组不变
      • splice()
        • 删除
        • 插入
        • 替换
    • 位置方法
      • indexOf()
      • lastIndexOf()
    • 迭代方法
      • every()
      • filter()
      • forEach()
      • map()
      • some()
    • 归并方法
      • reduce()
      • reduceRight()

    3. Date

    4. RegExp

    • 正则表达式
      • var expression = / pattern / flags;
    • 实例方法
      • exec()
        • 如果设置全局标志g,那么会保存上一次匹配的位置,从上一次的下一个字符开始匹配
      • test()
        • 检测是否有正则匹配的字符串
    • 构造函数属性
      • input
      • lastMatch
      • lastParen
      • leftContext
      • multiline
      • rightContext

    5. Function

    • 定义方式
      • function sum(a,b);
      • var sum = function(a,b);
    • 没有重载
    • 函数声明
      • 函数声明提升,放在代码源顶部
      • 函数表达式没有提升
    • 作为值的函数
      • 函数名可以作为其他函数的参数来调用
      • 函数可以作为返回值
    • 内部属性
      • arguments
        • callee指向拥有arguments的函数
      • this
      • caller
    • 函数属性和方法
      • length
        • 指定参数个数
      • propotype
      • apply()
        • 可以接受参数数组
      • call()
        • 参数必须枚举
      • bind()
        • 绑定this指针

    6. 基本包装类型

    • 基本包装类型如同对象一样有属性与方法
    • 生存期很短,不能在运行时给基本包装类型添加属性与方法
    • new Object()中传入字符串、数字或布尔值,会转换为基本包装类型
    let num = Number(10);  //num为Number类型
    let num = new Number(10);  //num为Object类型
    
    • Boolean
      • 不要使用这个对象
    • Number
      • valueOf()
      • toString()
      • toLocaleString()
      • toFixed()
        • 显示小数位数
      • toExponential()
        • 指数表示
      • toPrecision()
        • 接受显示位数来决定使用何种表示方法
    • String
      • length
      • charAt()
      • charCodeAt()
      • []
      • concat()
      • slice()
      • substr()
      • indexOf()
      • lastIndexOf()
      • trim()
        • 删除前置后置空格
      • toUpperCase()
      • toLowerCase()
      • match()
        • 接受正则表达式或RegExp对象
      • search()
      • replace()
      • split()
      • localeCompare()

    7. 单体内置对象

    • 在程序运行前就已经创建好的对象
    • Global
      • encodeURI()
      • decodeURI()
      • eval()
        • 解析运行代码字符串
        • 在方法中创建的变量不会提升,但是函数会
      • window对象
    • Math

 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待