Doctype和严格模式与混杂模式
1.<DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签之前。告知浏览器的解析器,用什么文档类型 规范来解析这个文档。
2.严格模式的排版和 JS 运作模式是 以该浏览器支持的最高标准运行。在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。
3.DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。
Flash
Flash提供了ExternalInterface接口与JavaScript通信
两个方法:call和addCallback
作用:call让Flash调用js里的方法,addCallback是用来注册flash函数让js调用。
border
当定义border:none时,表示无边框样式,浏览器并不会对边框进行渲染,也就没有实际的宽度;
定义边框时,除了设置宽度外,还必须设置边框的样式才能显示出来。
CSSSprites
CSSSprites在国内很多人叫css精灵,是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了。
优点
1.利用CSS Sprites能很好地减少网页的http请求,从而大大的提高页面的性能,这也是CSS Sprites最大的优点,也是其被广泛传播和应用的主要原因;
2.CSS Sprites能减少图片的字节,曾经比较过多次3张图片合并成1张图片的字节总是小于这3张图片的字节总和。
3.解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就可以了,不需要对每一个小元素进行命名,从而提高了网页的制作效率。
4.更换风格方便,只需要在一张或少张图片上修改图片的颜色或样式,整个网页的风格就可以改变。维护起来更加方便。
Wekbit
Wekbit是一个开源的Web浏览器引擎,也就是浏览器的内核。Apple的Safari, Google的Chrome, Nokia S60平台的默认浏览器,Apple手机的默认浏览器,Android手机的默认浏览器均采用的Webkit作为器浏览器内核。Webkit的采用程度由 此可见一斑,理所当然的成为了当今主流的三大浏览器内核之一。另外两个分别是Gecko和Trident,大名鼎鼎的Firefox便是使用的Gecko 内核,而微软的IE系列则使用的是Trident内核。
另外,搜狗浏览器是双核的,双核并不是指一个页面由2个内核同时处理,而是所有网页(通常是标准通用标记语言的应用超文本标记语言)由webkit内核处理,只有银行网站用IE内核。
关于Javascript中数字的部分知识总结:
1.Javascript中,由于其变量内容不同,变量被分为基本数据类型变量和引用数据类型变量。基本类型变量用八字节内存,存储基本数据类型(数值、布尔值、null和未定义)的值,引用类型变量则只保存对对象、数组和函数等引用类型的值的引用(即内存地址)。
2.JS中的数字是不分类型的,也就是没有byte/int/float/double等的差异。
判断一个js对象是否是Array,arr为要判断的对象,最准确的方法是
Object.prototype.toString.call(arr) === ‘[object Array]’;
为了解决AngularJS性能问题,编译阶段应分为两个阶段
1,compile (绑定DOM)
2,link(数据绑定)。
while不能改变作用域链。
与浏览列表有关的对象:history screen location Navigator
cookie会被Http请求携带,但 loaclstorage不会

ajax() 方法通过 HTTP 请求加载远程数据。$.ajax(opts);opts为json格式,常见参数url、type、data等。
load() 方法从服务器加载数据,并把返回的数据放入被选元素中。$(selector).load(URL,data,callback);
必需的 URL 参数规定您希望加载的 URL。
可选的 data 参数规定与请求一同发送的查询字符串键/值对集合。
可选的 callback 参数是 load() 方法完成后所执行的函数名称。
$.get() 方法通过 HTTP GET 请求从服务器上请求数据。
$.get(URL,callback);
必需的 URL 参数规定您希望请求的 URL。
可选的 callback 参数是请求成功后所执行的函数名。
getScript() 方法通过 HTTP GET 请求载入并执行 JavaScript 文件。
jQuery.getScript(url,success(response,status));
new Array(017) 等价于 + new Array(15) (15的八进制是17)
按照规则,数组对象应该采用Number,所以先执行valueOf,发现valueOf返回的是自己,所以继续执行toString,过程如下:
1 | Number(new Array(15)) |
2 | // new Array(15).valueOf()不是原始值,所以执行toString() |
3 | Number(new Array(15).toString()) |
4 | Number(",,,,,,,,,,,,,,") |
5 | NaN |
js里面没有函数重载的概念,在其他语言中(如java)java中,可以存在同名函数,
只要传入的参数数量或者类型不同即可。在js中,定义了两个同名函数后,
后面的函数会覆盖前面定义的函数。由于函数声明提升,
所以函数声明会提前,由于存在同名函数,后面的add函数将覆盖第一个add函数。
在 JS 里,声明函数只有 2 种方法:
第 1 种: function foo(){...} (函数声明)
第 2 种:var foo = function(){...} (等号后面必须是匿名函数,这句实质是函数表达式)
除此之外,类似于 var foo = function bar(){...} 这样的东西统一按 2 方法处理,即在函数外部无法通过 bar 访问到函数,因为这已经变成了一个表达式。
1 | var f = function g() { |
2 | return 23; |
3 | }; |
4 | typeof g(); //Error |
回调函数,这是异步编程最基本的方法。
事件监听,另一种思路是采用事件驱动模式。任务的执行不取决于代码的顺序,而取决于某个事件是否发生。
发布/订阅,上一节的”事件”,完全可以理解成”信号”。
Promises对象,Promises 对象是CommonJS 工作组提出的一种规范,目的是为异步编程提供统一接口。
slice 方法可以用来将一个类数组(Array-like)对象/集合转换成一个数组。
1 | function list() { |
2 | return Array.prototype.slice.call(arguments); |
3 | } |
4 | |
5 | var list1 = list(1, 2, 3); // [1, 2, 3] |