源代码研究,实例: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 -;
}
}
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)); //
var anotherSum = sum;
alert(anotherSum(10,10)) ;//
sum = null;
alert(anotherSum(10,10)); //
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 ); //
 

javascript高级程序设计一(1-80)的更多相关文章

  1. 读书笔记(02) - 可维护性 - JavaScript高级程序设计

    编写可维护性代码 可维护的代码遵循原则: 可理解性 (方便他人理解) 直观性 (一眼明了) 可适应性 (数据变化无需重写方法) 可扩展性 (应对未来需求扩展,要求较高) 可调试性 (错误处理方便定位) ...

  2. 《JavaScript高级程序设计(第3版)》笔记-序

    很少看书,不喜欢看书,主要是上学时总坐不住,没有多大定性,一本书可以两天看完,随便翻翻,也可以丢在角落里几个月不去动一下. 上次碰到了<JavaScript高级程序设计(第3版)>感觉真的 ...

  3. 《JavaScript高级程序设计(第3版)》阅读总结记录第一章之JavaScript简介

    前言: 为什么会想到把<JavaScript 高级程序设计(第 3 版)>总结记录呢,之前写过一篇博客,研究的轮播效果,后来又去看了<JavaScript 高级程序设计(第3版)&g ...

  4. 【javascript学习——《javascript高级程序设计》笔记】DOM操作

    DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘了一个层次节点树,允许开发人员添加.移除和修改. 1.节点层次 <html> <head& ...

  5. 读javascript高级程序设计00-目录

    javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...

  6. 《JavaScript高级程序设计》读书笔记--前言

    起因 web编程过程使用javascript时感觉很吃力,效率很低.根本原因在于对javascript整个知识体系不熟,看来需要找些书脑补一下,同时欢迎众网友监督. 大神推荐书籍 看了博客大神们推荐的 ...

  7. 阅读摘录《javascript 高级程序设计》01

    前言: 因为工作需要,所以开始主攻前台JS方面的技术.在以前的工作中,使用过这门脚本语言.但是都是比较凌乱的,用到什么学什么,只是为了实现业务,而去使用. 不会考虑到代码优化,封装对象等.今次特意借了 ...

  8. 《JavaScript高级程序设计》学习笔记(5)——面向对象编程

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第六章内容. 1.面向对象(Object ...

  9. 《JavaScript高级程序设计》学习笔记(4)——引用类型

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第五章内容. 在ECMAScript中, ...

  10. 《JavaScript高级程序设计》学习笔记(3)——变量、作用域和内存问题

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第四章内容. 1.函数:通过函数可以封装 ...

随机推荐

  1. [x-means] 1.x-means简介

    本文基于<X-means>和<BIC-notes>(原论文中BIC公式有误,这是对BIC的补充) K-means的缺点 每一轮迭代的计算花费大 需要用户指定K 易于收敛到局部最 ...

  2. 【LeetCode练习题】First Missing Positive

    First Missing Positive Given an unsorted integer array, find the first missing positive integer. For ...

  3. OpenStack IdentityService Keystone V3 API Curl实战

    v3 API Examples Using Curl <Tokens> 1,Default scope 获取token Get an token with default scope (m ...

  4. android JNI库实现reboot,recovery

    1.recovery函数: #define UPDATE_TITLE "--update_package=" #define UPDATE_COMMAND_FILE "/ ...

  5. C / C++算法学习笔记(8)-SHELL排序

    原始地址:C / C++算法学习笔记(8)-SHELL排序 基本思想 先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组 ...

  6. T-SQL事务

    事务 订火车票的时候,下一个订单,这个订单中,包含多个购买信息,要么全部执行,要么全部不执行,合作事务就是来处理这种模型的一种机制. --关键字:transaction 或 tran 简写形式 --开 ...

  7. input file 样式以及获取选择文件方法集合

    样式一(http://www.cnblogs.com/jason-liu-blogs/archive/2013/06/13/3133377.html) <style> a{display: ...

  8. c# foreach枚举器

    要是自己的类支持foreach ,必须在类中必须有GetEnumerator方法,该方法返回的是一个IEnumerator类型的枚举器; public class MyStruct { public ...

  9. cURL模拟POST方法提交XML数据并解析

    php编程中会用到xml格式传送数据,这里演示下php以post形式发送xml,服务器接收,并解析xml的过程! post_xml.php源码: <?php header("Conte ...

  10. Android06-Fragment碎片

    ¨Fragment简介 ¨Fragment生命周期 ¨动态加载碎片Fragment Manager的使用   1.Fragment表示Activity中的一种行为或者一部分用户界面. 可以将Fragm ...