zoukankan      html  css  js  c++  java
  • 《JavaScript高级程序设计》补充笔记1

    1. CData片段可以包含不需要被解析的任意格式的文本内容(在XHTML中用)

    //<![CDATA[

           //这里放代码

    //]]>

    1. 不支持浏览器的<script>,使用<noscript>会执行里面的内容
    2. 支持严格模式的要在IE10+、Firefox 4+、Safari 5.1+、Opera 12+、Chrome
    3. 函数体内可以使用arguments来访问参数数组,从而获取到传给函数的每一个参数,arguments和传给函数的参数的内存空间是独立的,只是值是同步的,但是当arguments的下标超出传给函数的参数个数的话,就会出现underfined
    4. 函数没有重载,只会后面一个覆盖前一个,但是根据传入参数的个数和类型不同,可以模仿方法的重载
    5.  

    基本类型

    引用类型

    动态添加属性

    不可以,不会出错,但会出现underfined

    可以

    复制变量值

    相互独立

    指向同一个对象,相互影响

    传递参数(函数外部的值传递给函数内部)

    相互独立

    指向同一个对象,相互影响,但是在函数内部重写的值,不会影响外部,函数已执行完就会销毁

    1. 作用域链是保证执行环境有权访问的所有变量和函数的有序访问。比如标识符解析,在函数中,就是从内而外,逐级查找,直到找到标识符,如果最后找不到就会出错。

    执行环境的类型有全局和局部(函数),如果要加长作用域链的话,可以使用:

    (1)       try-catch中的catch

    (2)       with语句

    1. js没有块级作用域,所以在if或者for语句循环完之后,if中的变量声明会被提价到当前的执行环境当中,for语句的i也会在循环结束之后依旧存在于循环外部的全局环境中,即最接近的环境当中
    2.   

    函数声明

    函数表达式

    解析器优先读取,以便在执行任何代码之前可以访问

    要等到执行到它所在的代码行才会被执行

    1. 函数

                                          

    arguments(对象)

    保存函数参数

    callee(arguments的属性)

    是一个指针,指向拥有arguments的函数

    比如:arguments.callee(n-1)【在严格模式下会出错】

    this(对象)

    函数执行的环境

    caller(对象的属性)

    保存调用当前函数的函数引用

    比如:arguments.callee.caller

    length(属性)

    函数接受命名参数的个数

    prototype(属性)

    保存实例方法

    bind(方法) IE9+

    创建函数的实例,this的值会被绑定给传到bind()函数的值,比如:fn.bind(o)

    非继承来的方法,在特定的作用域中调用函数,强大之处在于扩充函数运行的作用域

    apply()

    传入两个参数,第一个是运行函数的作用域,第二个是参数数组,比如:

    sum.apply(this, arguments)或者sum.apply(this,[n1,n2])

    call()

    传入参数,第一个是运行函数的作用域,剩下的是每一个参数

     

         
    1. 基本包装转换类型

    Number (n = 10)

    .toFixed(2)  == 10.00

    四舍五入显示几位小数,IE8不能四舍五入

    .toExponential()  == 1.0e+1

    返回指数表示法

    .toPrecision(n)

    返回小数或整数或指数,n几位显示几位

    String (a=”hello”)------------m,n正数

    .charAt(1)  或者a [1]【IE8】

    给定位置的字符

    .charCodeAt(1)

    给定位置的字符的编码

    .concat( , , ,)

    拼接任意个的参数

    .slice(m)/.substring(m)/.substr(m)

    从m位置起的字符串

    .slice(m,n)/ . substring (m,n)

    从m位置起到n-1的字符串

    . substr (m,n)

    从m位置起,数n个字符的字符串

    .slice(-m)

    从(-m+字符串长度)开始数起

    .substring(-m)

    所有负数都会被转化成0,从0位置开始

    .substr(-m)

    从(负的第一个参数+字符串长度)开始数起。

    负的第二个参数会被转换成0

    .slice(m,-n)

    从m位置起到(-n+字符串长度-1)的字符串

    . substring (m,-n)

    从m位置起到0的字符串

    . substr (m,-n)

    从m位置起,数0个字符的字符串==””

    .indexOf(“h”)

    从头开始查找,第一次出现的字符位置,可以指定开始查找的位置.indexOf(“h”,5)

    .lastIndexOf(“h”)

    从后开始查找,第一次出现的字符位置,可以指定开始查找的位置. lastIndexOf (“h”,5)

    .trim()

    删除前缀和后缀的所有空格

    .mach(re)

    匹配,返回的是数组

    .search(re)

    匹配,查找返回的第一个位置

    .replace(“”/re,””)

    替换

    .split(“,”/”,”,2/re)

    分隔字符串,存放在数组中,第二个参数是数组大小

    .localCompare(“”)

    比较字符串,大于1,小于-1,等于0

    $$

    $

    $&

    匹配整个模式的字符串,与RfgExp.lastMatch一样

    $’

    匹配子字符串之前的字符串,与RfgExp.leftContext一样

    $`

    匹配子字符串之前的字符串,与RfgExp.rightContext一样

    $n

    捕获第n(0~9)个组的字符串,比如

    text($1)

    $nn

    捕获第n(00~99)个组的字符串

    1. 单体内置对象

    encodeURI

    编码,不包含:/?#

    encodeURIComponent

    编码,包含特殊字符

    decodeURI

    decodeURIComponent

    eval()

    只接受一个参数,可以创建任何变量和函数,在严格模式下会出错

    1.  

    Array

    toString()

    数组返回字符串,项之间用,隔开,基本类型

    valueOf()

    返回的还是数组,引用类型

    join(“|”)

    给数组改变分隔符或其他

    push()

    向末尾插入项

    pop()

    取得最后一项,并移除

    unshift()

    向数组开头插入项

    shift()

    取得第一项,并移除

    concat()

    创建新的数组,里面的参数是新加入的项

    .slice()

    使用与String相同

    .splice()

    1/删除:指定两个参数,第一个是删除的位置,第二个是删除的个数

    2/插入:指定3个参数,第一个是插入的位置,第二个是0,之后的是插入的项,可多个用,隔开

    3/提换:指定3个参数,第一个是插入的位置,第二个是1,之后的是插入的项,可多个用,隔开

    .indexOf()

    从头开始查找,IE9+

    .lastIndexOf()

    从后开始查找,IE9+

    reverse()

    反转数组

    迭代方法

    every()

    全true则true

    some()

    有true则true

    filter()

    返回true的组成数组

    map()

    每个项通过函数调用后的结果返回数组

    forEach()

    没有返回值

    归并方法

    reduce()

    从头遍历到末尾,构建一个最终返回值

    reduceRight()

    从末尾遍历到头,构建一个最终返回值

    排序函数

    sort()

    排序,从小到大, s.sort(compare)

    升序

    降序

    function compare(value1, value2) {
    if (value1 < value2) {
       return 1;
    } else if (value1 > value2) {
       return -1;
    } else {
       return 0;
    }

    }

    使用:s.sort(compare)

    function compare(value1, value2) {
    if (value1 < value2) {
        return -1;
    } else if (value1 > value2) {
        return 1;
    } else {
        return 0;
    }

    }

    使用:s.sort(compare)

    1. IE9+

    (1)       修改属性类型:

    Object.defineProperty(对象,“对象的属性”,{设置修改的属性})

    (2)       定义属性:

    Object.defineProperty(对象,{对象的属性。。。})

    (3)       读取属性的特性:  x.value=取出值

    var x = Object.getOwnPropertyDescriptor(对象, "对象的属性");

    1.  

    工厂模式

    用函数来封装以特定接口创建对象

    没有对象识别

    构造函数模式

    直接将方法和属性赋值给this

    没有return

    没有显示创建对象

    原型模式

    prototype

    1、  Fn.prototype.constructor 指向构造函数

    2、  确定对象之间是否存在关系

    Fn.prototype.isPrototypeOf(fn1)

    3、  找到对象的原型  IE9+

    Object.getPrototypeOf(fn1)

    4、  属性是存在于原型中还是实例中

    fn1.hasOwnPrototype(“属性”)【来自实例返回true、来自原型返回false】

    5、  对象能够访问属性 in

    (“属性”  in  fn1);【实例和原型都返回true】

    6、  for in 查看原型中和实例中的属性

    7、  Object.keys()接受一个对象作为参数,返回一个可枚举属性的字符串数组。

    8、  不管可不可以枚举,都列出来的话:

    Object.getOwnPropertyNames(Fn.prototype);

    1、属性和方法都是实例共享的

    2、如果在外面重新给对象赋值,会直接阻止访问原型中的那个属性,但是如果在外部将这个属性设为null,也不会查找原型中的属性,只有通过delete来删除,可以重新访问原型中的属性

    3、如果将原型改写为对象字面量的形式,constructor指向的是Object构造函数,如果constructor很重要,那就在对象字面量中将

    constructor:函数名

    (1)       确定该属性到底是存在于对象中,在原型中返回true,在实例中返回false

    function hasPrototypeProperty(object, name){
    return !object.hasOwnProperty(name) && (name in object);
    
    }

    (2)       查看原型中和实例中的属性  for in

    [1]       查看原型中的属性

    var per = new Person();
    
                       for (var prop1 in per) {
    
                       console.info(prop1)
    
      }

    [2]       查看实例中的属性

    var o = {
    
             name: "Nicholas",
    
             age: 29,
    
             job: "Software Engineer"
    
    };
    
    for (var prop in o) {
    
             console.info(prop)
    
    }
    1. 递归的时候arguments.callee在严格模式下会出错,因此可以使用命名函数来完成:
    var factorial = (function f(num){
    if (num <= 1){
      return 1;
    } else {
      return num * f(num-1);
    }
    
    });
    1. 闭包:是指有权访问另一个函数作用域中变量的函数,一般是一个函数内部创建另一个函数
    2. 创建私有领域可以减少闭包占用的内存问题,而且每个开发人员可以使用自己的变量,又不用担心搞乱全局作用域。

    (function(){

    //块级作用域

    })();

    1. 静态私有变量

         CData片段可以包含不需要被解析的任意格式的文本内容(在XHTML中用)

    //<![CDATA[

           //这里放代码

    //]]>

         不支持浏览器的<script>,使用<noscript>会执行里面的内容

         支持严格模式的要在IE10+Firefox 4+Safari 5.1+Opera 12+Chrome

         函数体内可以使用arguments来访问参数数组,从而获取到传给函数的每一个参数,arguments和传给函数的参数的内存空间是独立的,只是值是同步的,但是当arguments的下标超出传给函数的参数个数的话,就会出现underfined

         函数没有重载,只会后面一个覆盖前一个,但是根据传入参数的个数和类型不同,可以模仿方法的重载

          

     

    基本类型

    引用类型

    动态添加属性

    不可以,不会出错,但会出现underfined

    可以

    复制变量值

    相互独立

    指向同一个对象,相互影响

    传递参数(函数外部的值传递给函数内部)

    相互独立

    指向同一个对象,相互影响,但是在函数内部重写的值,不会影响外部,函数已执行完就会销毁

         作用域链是保证执行环境有权访问的所有变量和函数的有序访问。比如标识符解析,在函数中,就是从内而外,逐级查找,直到找到标识符,如果最后找不到就会出错。

    执行环境的类型有全局和局部(函数),如果要加长作用域链的话,可以使用:

    (1)       try-catch中的catch

    (2)       with语句

         js没有块级作用域,所以在if或者for语句循环完之后,if中的变量声明会被提价到当前的执行环境当中,for语句的i也会在循环结束之后依旧存在于循环外部的全局环境中,即最接近的环境当中

           

    函数声明

    函数表达式

    解析器优先读取,以便在执行任何代码之前可以访问

    要等到执行到它所在的代码行才会被执行

         函数

                                          

    arguments(对象)

    保存函数参数

    callee(arguments的属性)

    是一个指针,指向拥有arguments的函数

    比如:arguments.callee(n-1)【在严格模式下会出错】

    this(对象)

    函数执行的环境

    caller(对象的属性)

    保存调用当前函数的函数引用

    比如:arguments.callee.caller

    length(属性)

    函数接受命名参数的个数

    prototype(属性)

    保存实例方法

    bind(方法) IE9+

    创建函数的实例,this的值会被绑定给传到bind()函数的值,比如:fn.bind(o)

    非继承来的方法,在特定的作用域中调用函数,强大之处在于扩充函数运行的作用域

    apply()

    传入两个参数,第一个是运行函数的作用域,第二个是参数数组,比如:

    sum.apply(this, arguments)或者sum.apply(this,[n1,n2])

    call()

    传入参数,第一个是运行函数的作用域,剩下的是每一个参数

     

         

         基本包装转换类型

    Number n = 10

    .toFixed(2)  == 10.00

    四舍五入显示几位小数,IE8不能四舍五入

    .toExponential()  == 1.0e+1

    返回指数表示法

    .toPrecision(n)

    返回小数或整数或指数,n几位显示几位

    String a=”hello”------------m,n正数

    .charAt(1)  或者a [1]IE8

    给定位置的字符

    .charCodeAt(1)

    给定位置的字符的编码

    .concat( , , ,)

    拼接任意个的参数

    .slice(m)/.substring(m)/.substr(m)

    m位置起的字符串

    .slice(m,n)/ . substring (m,n)

    m位置起到n-1的字符串

    . substr (m,n)

    m位置起,n个字符的字符串

    .slice(-m)

    从(-m+字符串长度)开始数起

    .substring(-m)

    所有负数都会被转化成0,从0位置开始

    .substr(-m)

    从(负的第一个参数+字符串长度)开始数起。

    负的第二个参数会被转换成0

    .slice(m-n)

    m位置起到(-n+字符串长度-1)的字符串

    . substring (m-n)

    m位置起到0的字符串

    . substr (m-n)

    m位置起,0个字符的字符串==””

    .indexOf(“h”)

    从头开始查找,第一次出现的字符位置,可以指定开始查找的位置.indexOf(“h”,5)

    .lastIndexOf(“h”)

    从后开始查找,第一次出现的字符位置,可以指定开始查找的位置. lastIndexOf (“h”,5)

    .trim()

    删除前缀和后缀的所有空格

    .mach(re)

    匹配,返回的是数组

    .search(re)

    匹配,查找返回的第一个位置

    .replace(“”/re,””)

    替换

    .split(“,”/”,”,2/re)

    分隔字符串,存放在数组中,第二个参数是数组大小

    .localCompare(“”)

    比较字符串,大于1,小于-1,等于0

    $$

    $

    $&

    匹配整个模式的字符串,与RfgExp.lastMatch一样

    $’

    匹配子字符串之前的字符串,与RfgExp.leftContext一样

    $`

    匹配子字符串之前的字符串,与RfgExp.rightContext一样

    $n

    捕获第n0~9)个组的字符串,比如

    text($1)

    $nn

    捕获第n00~99)个组的字符串

         单体内置对象

    encodeURI

    编码,不包含:/?#

    encodeURIComponent

    编码,包含特殊字符

    decodeURI

     

    decodeURIComponent

     

    eval()

    只接受一个参数,可以创建任何变量和函数,在严格模式下会出错

          

    Array

    toString()

    数组返回字符串,项之间用,隔开,基本类型

    valueOf()

    返回的还是数组,引用类型

    join(“|”)

    给数组改变分隔符或其他

    push()

    向末尾插入项

    pop()

    取得最后一项,并移除

    unshift()

    向数组开头插入项

    shift()

    取得第一项,并移除

    concat()

    创建新的数组,里面的参数是新加入的项

    .slice()

    使用与String相同

    .splice()

    1/删除:指定两个参数,第一个是删除的位置,第二个是删除的个数

    2/插入:指定3个参数,第一个是插入的位置,第二个是0,之后的是插入的项,可多个用,隔开

    3/提换:指定3个参数,第一个是插入的位置,第二个是1,之后的是插入的项,可多个用,隔开

    .indexOf()

    从头开始查找,IE9+

    .lastIndexOf()

    从后开始查找,IE9+

    reverse()

    反转数组

    迭代方法

    every()

    truetrue

    some()

    truetrue

    filter()

    返回true的组成数组

    map()

    每个项通过函数调用后的结果返回数组

    forEach()

    没有返回值

    归并方法

    reduce()

    从头遍历到末尾,构建一个最终返回值

    reduceRight()

    从末尾遍历到头,构建一个最终返回值

    排序函数

    sort()

    排序,从小到大, s.sort(compare)

    升序

    降序

    function compare(value1, value2) {
    if (value1 < value2) {
       return 1;
    } else if (value1 > value2) {
       return -1;
    } else {
       return 0;
    }

    }

    使用:s.sort(compare)

    function compare(value1, value2) {
    if (value1 < value2) {
        return -1;
    } else if (value1 > value2) {
        return 1;
    } else {
        return 0;
    }

    }

    使用:s.sort(compare)

         IE9+

    (1)       修改属性类型:

    Object.defineProperty(对象,“对象的属性”,{设置修改的属性})

    (2)       定义属性:

    Object.defineProperty(对象,{对象的属性。。。})

    (3)       读取属性的特性:  x.value=取出值

    var x = Object.getOwnPropertyDescriptor(对象, "对象的属性");

          

    工厂模式

    用函数来封装以特定接口创建对象

    没有对象识别

    构造函数模式

     

    直接将方法和属性赋值给this

    没有return

    没有显示创建对象

    原型模式

    prototype

    1、  Fn.prototype.constructor指向构造函数

    2、  确定对象之间是否存在关系

    Fn.prototype.isPrototypeOf(fn1)

    3、  找到对象的原型  IE9+

    Object.getPrototypeOf(fn1)

    4、  属性是存在于原型中还是实例中

    fn1.hasOwnPrototype(“属性”)【来自实例返回true、来自原型返回false

    5、  对象能够访问属性 in

    (“属性  in  fn1);【实例和原型都返回true

    6、  for in查看原型中和实例中的属性

    7、  Object.keys()接受一个对象作为参数,返回一个可枚举属性的字符串数组。

    8、  不管可不可以枚举,都列出来的话:

    Object.getOwnPropertyNames(Fn.prototype);

    1、属性和方法都是实例共享的

    2、如果在外面重新给对象赋值,会直接阻止访问原型中的那个属性,但是如果在外部将这个属性设为null,也不会查找原型中的属性,只有通过delete来删除,可以重新访问原型中的属性

    3、如果将原型改写为对象字面量的形式,constructor指向的是Object构造函数,如果constructor很重要,那就在对象字面量中将

    constructor:函数名

    (1)       确定该属性到底是存在于对象中,在原型中返回true,在实例中返回false

    function hasPrototypeProperty(object, name){
    return !object.hasOwnProperty(name) && (name in object);

    }

    (2)       查看原型中和实例中的属性  for in

    [1]       查看原型中的属性

    var per = new Person();

                       for (var prop1 in per) {

                       console.info(prop1)

      }

    [2]       查看实例中的属性

    var o = {

             name: "Nicholas",

             age: 29,

             job: "Software Engineer"

    };

    for (var prop in o) {

             console.info(prop)

    }

         递归的时候arguments.callee在严格模式下会出错,因此可以使用命名函数来完成:

    var factorial = (function f(num){
    if (num <= 1){
      return 1;
    } else {
      return num * f(num-1);
    }

    });

         闭包:是指有权访问另一个函数作用域中变量的函数,一般是一个函数内部创建另一个函数

         创建私有领域可以减少闭包占用的内存问题,而且每个开发人员可以使用自己的变量,又不用担心搞乱全局作用域。

    (function(){

    //块级作用域

    })();

         静态私有变量

     

     

  • 相关阅读:
    Common Git command and mean (Windows)
    The method of using code coverage tool
    Auto login to your computer
    Clear all username or password for login.
    Python: how to public a model
    VS中,NUnit适合测试者尽心开发自动化测试,而Unit适合开发者开发单元测试。
    Use eplipse to develop Python project
    Prepare Python environment and install selenium.
    python 通过命令传参方式执行对应方法
    使用cat 命令生成自定义内容文件
  • 原文地址:https://www.cnblogs.com/qzccl/p/5419083.html
Copyright © 2011-2022 走看看