源代码研究,实例: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. hdu 1078 FatMouse and Cheese_记忆搜索

    做这类型的搜索比较少,看懂题意花了半天 题意:给你个n*n的图,老鼠一次最远走k步,老鼠起初在(0,0),每次偷吃的东西必须比之前偷吃的要大. #include<iostream> #in ...

  2. python list求交集

    方法一: a=[1,2,3] b=[1,3,4] c=list(set(a).intersection(set(b))) print c #[1,3] 这种方法是先把list转换为set,再用set求 ...

  3. 呵呵!手把手带你在 IIS 上执行 Python

    公司的站点让我头痛死了.在众多前辈高手的带领下.一大堆的 CMD 在站点里执行得好好地,黑客攻击也好好地.仅仅有站点和我不好好地,我快累死了,站点快挂了.. . 为了解决问题.我想到了 Python ...

  4. 字符编码介绍及java中的应用

    字符编码,就是对日常的控制符号.文字和常用符号的二进制表示.为了准确的表示如何编号,怎么生产八位字节流,Unicode Technical Report (UTR) #17提出现代编码模型的5个层次: ...

  5. 常见Web Service 使用网址

    下面的网址是常用Web Service http://www.webxml.com.cn/zh_cn/web_services.aspx 里面的很多Web Service接口...可以用到的,很有用!

  6. 关于google CDN 在中国访问不了的解决办法

    因原网站的script部分使用了google CDN,导致在中国看不了跟google相关的所有东西 解决方法: 得把google CDN 连接改成其他公司的CDN 例: 修改前:<script ...

  7. 快速学习javascript对象-遍历对象

    为了方便了解每个javascript对象包含的方法,我写一个函数. function GetCollection(obj){ try{ if(obj){ var sType=""; ...

  8. webpack 多入口配置

    同事套搭建vue项目,个人推荐了VUE官网的vue-cil的方式,http://cn.vuejs.org/guide/application.html 顺着官网的操作,我们可以本地测试起我们的项目 n ...

  9. php中如何获取文件的正确路径

    以上面的图片为例子 //我们这里需要使用到 $_FILE echo "<pre>"; print_r($_FILES); echo $_SERVER['DOCUMENT ...

  10. Android 之 MediaPlayer类

    在Android中通常用MediaPlayer来播放一些媒体文件,对于音频文件来说只需直接使用MeidaPlayer结合几句代码即可,但是对于视频文件来说稍微复杂一些.单独的MediaPlayer只能 ...