zoukankan      html  css  js  c++  java
  • javascript高级程序设计一(1-80)

    源代码研究,实例:http://fgm.cc/learn/

    js面试知识点:

    1:原生、闭包、上下文、call、apply、prototype。

    2:jsonp:用script标签实现跨域、xss:javascript页面填写攻击。

    3:架构,设计模式。

    //

    开发的项目:贪吃蛇游戏。拼音加加双拼输入法软件。

    //
    符合意思:##:疑惑,**:重点

    1、javascript的实现:

    1、javascript:ecmascript(核心),dom(文档对象模型),bom(浏览器对象模型)
    2、用ecmascript当核心的语音有node.js,Flash,javascript
    3、语法、类型、语句、关键字、保留字、操作符、对象
    4、ecma第三版修改内容:字符串处理,错误定义,数值输出;新增加正则表达式,新控制语句,try-catch异常处理
    5、ecma第四版:强类型变量,新语句和新数据结构、真正的类和经典继承。(最终被放弃,跨越太大)
    6、ecms第3.1版:原生json对象(用于解析和序列化JSON数据)、继承,和高级属性的定义。
     
    2、文档对象模型(DOM):
     
    1、DOM:是针对XML但经过扩展用于HTML的应用程序编程接口。
    2、节点:DOM映射为一个多层节点结构,DOM提供API对节点删除、添加、修改。
    3、W3C:万维网联盟,制定标准DOM。
    4、DOM两个模块:DOM核心(core),DOM HTML在DOM核心基础上扩展添加HTML的对象和方法。(DOM不只针对javascript,很多其他语言也有实现)
    5、DOM:dom1映射文档结构,dom2:鼠标和用户界面事件、范围、编立,通过对象接口对CSS的支持。dom3:统一方式加载和保存文档的方法。
     
    3、浏览器对象模型(BOM):
    一、
    • 弹出浏览器新窗口的功能;
    • 移动,缩放和关闭浏览器窗口的功能;
    • 提供浏览器详细信息的navigator对象;
    • 浏览器加载页面详细信息location对象;
    • 用户显示器分辨率详细信息screen对象;
    • 对cookies支持;
    • XMLHttpRequest对象和IE的ActiveXObject的对象。
    二、
    • BOM没有标准可以遵循,
    • 每个浏览器都可以自己实现。
    • html已经正式标准的BOM。
     
    4、在html中使用javascript:
     
    1、script元素:async:立即下载脚本;charset:通过src属性指定的代码的字符集;defer:表示脚步可以延迟到文档完全被解析和显示之后再执行;src:表示用执行代码的外部文件;type:text/javascript。
    2、外部引入规范:<script type="text/javascript" scr="example.js"></script>
    3、js代码放入body后面解决延迟加载,增加打开页面的速度。
    4、XMTHL兼容html规范,这种格式在所以现代浏览器中都可以使用。
        <script type="text/javascript">
        //<![CDATA[
               /* 代码 */
        //]]>
         </script>
    5、js代码尽量使用外部包含的方式。
    6、文档类型声明,如果在没声明文档类型,浏览器都会默认开启混合模式。
    <!-- HTML 4.01 严格型 -->
    <!DOCTYPE HTML PUBLIC "-//w3c//DTD HTML 4.01//EN" "http://www.w3.org/TR/html/strict.dtd">
    <!-- XHTML 1.0 严格型 -->
    <!DOCTYPE html PUBLIC "-//w3c//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <!-- HTML 5 -->
    <!DOCTYPE html>
    7、<noscript>:浏览器不支持javascript提醒
     
    5、基本概念(语法,数据类型,流程控制句,理解函数)
     
    1、ECMAScript中的一切函数名都区分大小写。
    2、var message;这样未经过初始化变量保留的值是undefined。
    3、不建议修改变量保存值的类型。
    4、var定义的是局部变量,在函数退出后就会被销毁。
    5、不用var定义的全局变量。不建议使用,给未见声明的变量赋值在严格模式下会抛出ReferenceError错误。reference(参考引用)。
     
    6、数据类型(undefined,null,boolean,number,string,object,)
     
    typeof
    1、typeof:检测数据的类型。
    • undefined:未定义。
    • boolean:布尔值。
    • string:字符串。
    • number:数字。
    • object:对象
    • null:null
    • function:函数。
    2、函数在ECMAScript中是对象,不是一种数据类型。函数也一种特殊属性,typeof操作用来区分函数和对象时是有必要的。
     
    undefined
    3、引入undefined时为了区分空对象指针和未经初始化的变量。
    4、age没有声明,直接alert(age)会报错误。对未经过声明变量typeof是undefined,经过声明的变量typeof也是undefined。如果所有的值都被初始化了,typeof值undefined就知道这值是没声明。(##,**)。
     
    null
    5、typeof是object,对象类型定义:var  object1 = null;
    6、undefined值是派生自null值,所有 alert(null==undefind); // true
     
    boolean
    7、boolean类型的true,false是区分大小写的。转化类型函数Boolean()。
     
    number
    8、var intNum = 55 ;(十进制) var intNum=070;(八进制)var intNum=0X1f;(十六进制)。在进行算术计算的时候最终会转换为十进制。
     
    浮点数值
    9、if(a+b=0.3) //不用做这样的测试。
    10、浮点数值保存数值的空间是整数值保存内存空间的两倍。
     
    NaN
    11、任何数值除零等于NaN,NaN与任何值都不相等,包括NaN本身,alert(NaN==NaN);//false,is_NaN()函数。
    12、alert(isNaN(NaN));//true。alert(isNaN("blue"));//true,不能转换为数值。
     
    数值转换
    13、Number():Number("00011");//11
    14、parseInt()整理整数:parseInt("123blue") // 123。parseInt("22.5")//22。parseInt("10",[2,8,10,16]) //按不同进制转换。
    15、parseFloat()。parseFloat("22.23.66") // 22.23
     
    string
    16、toString(): var age=11;age.toString(); //字符串11。String()。
     
    object类型
    17、在ECMAScript中,object类型是所有它的实例的基础。Object类型具有的任何属性和方法也同样存在于更加具体的对象中。
    18、Constructor:创建对象的函数。
    • hasOwnProperty():用于检查给定的属性在当前对象实例中是否存在。
    • isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型。
    • propertyIsEnumerable(propetyName):用于检查给定的对象是否能够使用for-in语句。
    • toLocaleString():返回对象的字符串,与执行环境的地区对应。
    • toString():返回对象的字符串表示。
    • valueOf():返回对象的字符串、数值或布尔值。
    19、BOM和DOM中的对象都是宿主对象,他们是由宿主实现提供和定义。ECMA不负责定义宿主对象,因此宿主对象可能不会继承object。
     
    js本地对象、内置对象、宿主对象
    20、宿主环境:一般宿主有外壳程序创建与维护,只有能够提供js引擎执行的环境都可称之为外壳程序。如:web浏览器,桌面应用系统,web浏览器和桌面应用系统造就的环境即宿主环境。
    21、本地对象:独立于宿主环境的ECMA实现通过的对象。包括(Object、Function、Array、Boolean、Number、Date、RegExp(正则表达式)、Error、EvalError、ReferenceError、SyntaxError、TypeError、URLError)。本地对象就是ECMA定义的类(引用类型)。
    22、eval()函数:可以把一个字符串当作一个JavaScript表达式一样去执行它。 
    23、内置对象:有ECMA提供,独立于宿主环境的所有对象,ECMA程序开发执行时出现。意味着开发者不必明确实例化内置对象,它已被实例化。
    24、内置对象和本地对象的区别,共同点:都是独立于宿主环境。ECMA只定义了Global和Math两个内置对象(他们也是本地对象,根据定义,每个内置对象都是本地对象)。
    25、Global对象:ECMA最特别的对象,因为实际它根本不存在,在ECMA中,不存在独立的函数,isNAN(),parselnt(),parseFloat方法,看起来是函数,实际上都是Global的方法。
    26、宿主对象:由ECMA实现宿主环境提供的对象,理解为:浏览器提供的对象。所有BOM和DOM都是宿主对象。
    27、自定义对象:开发人员自己定义的对象。
     
    7、js错误捕捉
    23、使用了try-catch,那么当出现异常的时候,IE浏览器会传递一个Error对象。
     try{
            sldfj
                // throw new Error("-2","输入的值不能大于10");  
        }catch(e){
            for(var p in e){
                document.writeln(p + “=” + e[p]);
          // alert("异常名字:"+e.name);
          // alert("异常号:"+e.number);
          // alert("异常的描述信息:"+e.description);
          // alert("异常的错误信息:"+e.message);  
            }
        }

    输出:name=TypeError message=’sldfj’ 未定义 number=-2146823279 description=’sldfj’ 未定义

    24、js错误类型。

        //TypeError——当遇到一个意外的类型时引发该异常对象,如未声明的变量。
       //SyntaxError——在解析js代码时,其中的语法错误引发该异常对象。
       //ReferenceError——使用一个无效的引用时引发该异常对象。
       //EvalError——在错误的调用eval函数时引发该异常对象。
       //RangeError——在一个数字型变量的值超出了其范围时引发该异常对象。
       //URIError——在错误的使用encodeURI或者decodeURI函数时引发该异常对象。
     
    8、操作符
    valueOf():
    var o ={
        varlueOf:function(){
            return -1;
        }
    }
    o--; //值变成数值-2

    位操作符、逻辑操作符、关系操作符号、相当操作符号、赋值操作符号

    9、语句

    30、for-in是一种精准的迭代语句。可以枚举对象的属性。

        for(var propName in window)
        {
            document.write(propName); //枚举window的所有属性。
        }

    31、for-in迭代到对象为null,undefined就会抛出错误。ECMA5修正这种行为,不抛出错误,而是不执行循环体。我兼容性,for-in之前检测对象不是null,undefined类型。

    32、with语句的作用是将代码的作用域设置到一个特定的对象中。(with导致性能下降,调试麻烦,不建议使用)

    理解参数

    33、arguments包含函数的所有参数,访问:arguments[0], arguments.length传递了多少个参数。
    34、ECMA中所有参数传递的都是值,不可能通告引用传递参数。
    35、ECMA没重载,java重载(参数的类型,或者个数不同即可),ECMA的重载可以通告arguments实现。
     
    作用域、变量、内存问题
    变量
    36、基本类型:值指简单的数据段。
    37、引用类型:值指那些可能由多个值构成的对象。基本类型赋值是建立一个新值。
    38、基本类型没有动态属性,引用类型可以添加动态属性。引用类型赋值是传引用。
     
    传递参数
    39、参数传递都是按值传的,在向参数传递引用类型的时候,会把这个值在内存中的地址赋值给一个局部变量,因此这个局部变量的变化会反映在函数外部。(##,**)。对对象进行重新定义,局部变量的变化不会反映在函数外部。
     
    检查类型
    40、基本数据类型:typeof,引用类型:instanceof 根据原型链来识别。
     
    执行环境、作用域
    41、在web浏览器中,全局执行环境是windows对象。某个执行环境中的所有代码执行完毕后,该环境被销毁(全局环境关闭浏览器或者网页时被销毁)。
     
    作用域链
    42、作用:保证对执行环境有权访问的所有变量和函数的有序访问。作用域链中下一个变量对象来自包含(外部)环境。一直延续到全局变量。
    43、内部环境可以通过作用域链访问所有的外部环境。外部环境不能访问内部环境中的任何变量和函数。这些环境之间的联系是线性的,有次序的。每个环境都可以向上搜索作用域链,查询变量和函数名。任何环境不能向下搜索。
    44、函数的参数也被当做变量来对待,访问规则和执行环境中的其他变量相同。
    45、延长作用域链:try-catch 和 with
     
    垃圾收集
    管理内存
    46、手工释放内存:globalperson=null
     
    引用类型
    47、object类型(js对象的创建方法):
            var person = new Object();
            person.name = "Nicholas";
            person.age=29;
            //
            var person = { name:"Nicholas"; age:29}
    48、var person = {} 与 new Object() 相同,推荐使用字面量表示法。
    49、对象变量访问方法:person['name'],person.name
     
    Array类型
    50、
    var  colors = new Array();    
    var colors = new Array(20);       
    var colors = new Array('red','blue','green');
    51、length函数:数组的长度,它不是只读,还可以设置数组。
    52、检测数组 value instanceof  Array。 Array.isArray(value)。
     
    转换方法
    53、
    • toLocalString()、toString()、valueOf()方法。
    • 调用toString()是返回逗号拼接的字符串。
    • valueOf还是数组。
    • 为了创建字符串会调用数值每一项的toString()方法。
    var  colors = ["red","blue","green"];     // 创建一个包含3个字符串的数组。
    alert(colors.toString());   //red,blue,green
    alert(colors.valueOf());   //red,blue,green
    alert(colors);                   //red,blue,green
    由于alert()要接受的是一个字符串,所以所有会在后台调用toString()方法。
    54、join方法
        var colors = ['red','grenn','blue'];
        alert(colors.join(","));    //red,green,blue
        alert(colors.join("||"));  //red || green || blue
    55、栈方法:push()、pop()。栈LIFO(后进先出)
    66、队列方法:FIFO(后进先出)。push(),shift()。unshift()在前端添加任意个数并返回新数组的长度。
    67、重新排序:sort(),从小到大排序。reverse():反转顺序。
    68、concat方法:基于当前数组的所以项创建一个新数组。
    69、slice方法:基于当前数组中的一项或者多项创建一个新数组。
    70、
    • splice()方法:删除:可以删除任意数量的项,
    • splice(0,2)会删除数组的前两项。
    • 插入:向指定位置插入任意数量的项。
    • splice(2,0,'red','green')会在当前数组位置2插入字符串red和green。
    • 替换:splice(2,1,'red','green')会删除当前数组位置2的项,然后再从位置2开始插入字符串red和green。
    71、位置方法:indexOf()方法从数组的开通(位置0)开始向后查找,lastIndexOf()方法则从数组的末尾开始向前查找。
    72、迭代方法:every(),some()。numbers.every(function(item,index,array){return (item>2)}); 区别:every转入的函数必须对每一项都返回true,方法才返回true。some有一项是true就返回true。
    73、
    • filter:返回数组,利用指定函数确定是否在返回的数组中包含的某一项。
    • map:返回数组,这个数组的每一项都是在原始数组中对于上运行传入的函数结果。
    • forEach:没有返回值。只是对数组中的每一项运行传入函数。与for类似。
    74、缩小方法:reduce() 和 reduceRight() 。迭代数组的所有值,构建最终返回值。reduce从数组的第一项开始,遍历到最后。reduceRight从数组最后一项开始,向前遍历到第一项。
     
    DATA类型
    75、toDataString()、toTimeString、toLocaleDateString、toLocaleTimeString、toUTCString。
     
    RegExp类型
    76、
     
    function类型
    77、函数是对象,函数名是指针。
      function sum(num1+num2)
        {
            return num1+num2;
        }
        alert(sum(10,10));    //20
        var anotherSum = sum;
        alert(anotherSum(10,10)) ;//20
        sum = null;
        alert(anotherSum(10,10)); //20
    78 、没有重载(深入理解):将函数名想象为指针,助于理解为什么ECMS没有重载。
    79、函数声明与函数表达式:解析器会先读取函数声明,并使其在任何代码之前可用。至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。
            aleft(sum(10,10));
            function sum( num1+num2)
            {
                return num1+num2;
            }
            //以上代码正确执行
            aleft(sum(10,10));
            var  sum = function ( num1+num2)
            {
                return num1+num2;
            }
     //以上代码执行产生错误,函数位于一个初始化语句中,而不是一个函数声明。
    80、作为值的函数:ECMA函数名本身就是变量,不仅可以像传递参数一样把一个函数传递给另一个函数,还可以将一个函数作为另一个函数的结果返回。
    function callSomeFunction(someFunction,someArgument)
               {
                    return someFunction(someArgument);
               }
    
             function add10(num)
             {
                return num+10
            }
            var  result1 = callSomeFunction(add10,10)
            alert(result1 );   // 10
     
  • 相关阅读:
    awk 字符串连接操作(字符串转数字,数字转字符串)
    Jenkins配置自动发送邮件,成功!
    可嵌入到网页的实用查询代码
    Windows中打开和关闭FSO文件读写权限的方法
    网站项目模型及业务流程分析
    2个JS版的MD5加密脚本
    申请@msn.com的邮箱最新网址
    成功激励格言精选
    随机切换广告图片
    译自MSDN非常详细的IMG,IFRAME的属性参考手册
  • 原文地址:https://www.cnblogs.com/ytb-wpq/p/4912789.html
Copyright © 2011-2022 走看看