• JavaScript高级 引用类型(二)《JavaScript高级程序设计(第三版)》


    五、Function类型
    是JS中最重要的一种引用类型
    构造方式:(三种)
    函数声明:
    函数表达式定义:
    函数构造器:
    没有重载:
    如果有两个相同函数名的函数,执行时,执行最近被定义的一次。
    函数声明和函数表达式:
    函数声明和函数表达式两种常用创建函数的方式虽然作用一致,但是解析器在向执行环境中加载数据时是不一样的。
    alter( sum( 10 , 20 ) );
    var sum = function( a , b ){
        return a+b;
    }
    以上代码是错误的,在以上代码的初始化环境中,sum变量仅仅被定义为undefined。
    如果是用函数声明方式,那么在初始化环境中,就会执行载入函数,则不会执行错误。(如下:)
     
    alter( sum( 10 , 20 ) );
    function sum ( a , b ){
        return a+b;
    }
    作为值的函数:
    因为在上面的创建函数的过程中,函数名就是变量,那么函数可以作为值来使用。所以就可以把函数像值一样作数参数使用,也可以在函数中像值一样被返回。
    函数内部对象:
    arguments:类数组对象,包含所以传入的参数,此对象有个属性叫做callee(指针),指向拥有该对象的函数。
    function sum(){}   --> sum.arguments --> arguments.callee = sum
    实现递归解耦:
    this:它引用的是函数据以执行的环境对象。
    函数的名字仅仅是一个包含指针的变量
    函数属性和方法:
    caller:它保存了调用当前函数的函数的引用。
    length : 函数接收参数的个数
    prototype : 它保存了引用类型的所有实例方法,toString() / valueOf();
    apply(this,[parm1,parm2]) : 在特定的作用域调用函数。第一个参数this指当前环境对象(作用域对象),第二个参数可以是参数数组或者arguments对象。
     
    call(this,parm1,parm2:同上 ,区别在于接受参数方式不同。第一个参数this意涵相同,后面的参数需要逐一单独列举出来。
    ps:他们的最重要的作用是扩充函数的运行作用域。可以让函数在指定作用域下执行。极大的好处就是对象和方法不要任何耦合关系。
    bind() : 会创建一个函数的实例,该函数this的值会被绑定到给定的参数对象。
    这样的好处是 即使在全局作用域下,objectSayColor()的作用域仍然是a。
    继承的方法:(toLocalString()  、 toString()、valueOf()   )
     
     
    每个函数的这两个方法都会返回函数的代码,但是具体的格式因浏览器而异。
    六、基本包装类型
    这一点和java类似,JS也给几个基本类型提供了包装类型 以便于操作基本类型。(Boolean , Number , String)
    他们具有其他引用类型的共同特征,但是同时也具有他们各自基本类型的特殊行为。
    这就是一个自动包装的过程。
    他们和普通引用类型的最主要区别在于:生命周期。
    用new操作符创建实例的生命周期在执行流离开当前作用域之前一直存在。而自动创建的基本包装类对象,在执行流离开的一瞬间就销毁了。
    转型函数和new的包装类型是不一样的:
    Boolean类型:
    var a = new Boolean(false);
    alert( a && true ); //true
    这个实例中,一般会认为弹出false。实则不然,因为引用类型在布尔表达式中都会转化为true。
    其次:
    Number类型

    String类型
    String类型的实例化都有length属性
    也提供了一些方法:
    基本操作
    截取
    位置
    大小写
    字符串模式匹配
    search():如果没找到 返回-1且每次必须从头找
    替换
     
    分割
    fromCharCode()

    接收一个或多个字符编码,把他们转换成字符串
    七、单体内置对象
    一它是一种不依赖宿主环境的对象,这些对象在JS程序执行之前就已经存在了,简而言之,开发人员不需要实例化这些内置对象,直接可以使用。
    Global对象
    它在JS中实质上是一个“终极兜底对象”。它不属于任何对象的属性和方法,但是 所有的其他的对象都是他的属性和方法(事实上,并没有全局变量,其实所有的全局作用域下定义的属性和函数都是Global对象的属性)。
    URL编码/方法
    主要对地址字符串中一些浏览器无法接受的字符串进行编码。(一般情况下使用encodeURL()多一些,只对后面的参数编码)
    eval()方法
    这是JS中最强大的一个方法。它就像一个JS的解析器,执行要执行的JS字符串。在eval()方法执行时。它的参数(JS代码)也同样拥有eval()的执行环境对象,作用域链也一致。
    在使用时要注意其他用户代码注入攻击。
    Global对象的属性
    包括特殊值undefined、NaN、Infinity都是对象的属性,同时所有的原生引用类型的构造函数(Object、Function)也都是Global的属性。
    window对象
    在JS中没有明确指出如何访问Global,但是,在Web浏览器中,都是讲Global对象作为window对象的一部分加以实现的。所以可以把Global看作window。
    Math对象
    这是JS对数学公式和信息提供的一个公共位置--Math对象。
    Math对象的属性
    min()、max()
    四舍五入
    random()方法
    selectFrom()方法 --- 通过调用selectFrom(2,10)可以得到一个介于2和10(包括2,10)的数值。
    其他方法
    八、小结
    对象在JS中被称为引用类型的值,而且有一些内置的引用类型用来创建一些特定的对象。
    • 引用类型与传统面向对象编程的类相似,但是实现不同;
    • Object是一个基础类型,其他所有的类型都是从Object继承而来;
    • Array是一组值得有序列表、同时提供了操作这些值得功能;
    • Date类型提供了有关日期、时间的信息,以及相关操作功能;
    • RegExp类型是JS支持正则表达式的一个接口;
    • Function类型是所有函数的类(所有函数是Function类型的实例),所以函数也是对象,所以函数自身也拥有方法;
    • 基本包装类型Boolean、Number、String:每个包装类型都映射到同名的基本类型;在读取模式下访问基本类型时,会自动创建对应的基本包装类型以方便操作;一经操作完包装类型后,会立即销毁所创建的包装对象;
    • 在所有代码执行以前就存在两个对象Global和Math。特别在Web浏览器中,Global作为window对象的一部分。





  • 相关阅读:
    记一次内衣渗透
    mysql提权
    Token窃取与利用
    组策略首选项提权
    Windows错误配置提权
    windows内核溢出漏洞提权限
    xss漏洞
    mysql语句大全
    二叉树
    10个对所有学科都有用的Python数据可视化库
  • 原文地址:https://www.cnblogs.com/jarl/p/5941409.html
Copyright © 2020-2023  润新知