一.基础回顾

 

html部分

 

1. Html: 全称:hyper text markup language (简称HTML,属于标记语言,并不是编程语言)

2.H5: html的一个新版本

 

3.声明的类型不同?

      在 HTML 4.01 中,<!DOCTYPE> 声明引用 DTD,因为 HTML 4.01 基于       SGML。DTD 规定了标记语言的规则,这样浏览器才能正确地呈现内容。

  • HTML5 不基于 SGML,所以不需要引用 DTD。

注释:<!DOCTYPE> 声明没有结束标签,并且<!DOCTYPE> 声明对大小写不敏感。

   

4. html规范: 标签闭合 层级明确  引号不能混用

 

 

JavaScript部分

 

 

 

核心: ECMAScript : 提供语言功能

 

文档对象模型(document object model 简称DOM):提供访问和操作网页内容的方法和接口;

 

浏览器对象模型(browser object model 简称 BOM):提供与浏览器交互的方法和接口;BOM最蛋疼的部分是没有统一的标准;从根本上讲BOM只处理浏览器窗口和框架

 

1. 核心部分

 

 web浏览器只是ecma的宿主环境之一,也可以不依赖浏览器,比如宿主环境可能还包括Node和Adobe Flash; ECMAScript规定了Javascript这门语言的组成部分;主要规定了语法、类型、语句、关键字、保留字、操作符、对象;

 

2. dom部分

 

文档对象 模型把整浏览器页面映射为一个多层节点结构,页面中每个组成部分都是某种类型的节点,这些节点又包含了不同类型的数据;

 

 

DOM的几个级别的介绍;DOM目前分为三个级别;DOM1级,DOM2级,DOM3级;

  • DOM1级:是很早以前成为W3C标准的,由DOM核心和DOM HTML两部分组成,DOM核心规定是如何映射基于XML的文档结构,以便简化对文档中任意部分的访问和操作;DOM HTML模块则在DOM核心的基础上加以扩展,添加了针对HTML的对象和方法;主要目标是映射文档的结构;
  • DOM2级:在原来的DOM1级基础上扩充了鼠标和用户界面事件等;主要包括DOM视图,DOM事件、DOM样式、DOM遍历和范围;
  • DOM3级:引入了以统一方式加载和保存文档的方法(在DOM加载和保存模块中定义);新增了验证文档的方法(在DOM验证模块中定义);DOM3级也对DOM核心进行了扩展,开始支持XML1.0,涉及XML infoset,Xpath和XML Base。

 

3. Bom 部分

 

  • 弹出新浏览器窗口的功能;
  • 移动、缩放和关闭浏览器窗口的功能;
    • window.close()
  • 提供浏览器详细信息的navigator对象;
  • 提供浏览器所加载页面的详细信息的location对象;
    • windows.location.href
  • 提供用户显示器分辨率详细信息的srceen对象;
  • 对cookies的支持;
  • 像XMLHttpRequest和IE的ActiveXObject这样的自定义对象;
  • 有了HTML5后,DOM实现的细节有望朝着兼容性越来越高的方向发展;

 

学js什么?  学面向对象编程  

 

 

Js 如何引入

 

1. 行内使用

 

<a href="javascript:;">链接ZAB</a>  结果无法任何反应

 

 <a href="javascript:;" onclick="alert('这是一段测试代码')">有弹窗的链接</a>弹出窗口

 

 

2. 嵌入式

 

<script>

    console.log("现在可以开始写javascript代码了</script>");

</script>

 

3. 外联

 

 < script src="./jquery.js"></script>

 

//如果js放到head里,要做延迟处理

 

    window.onload=function () {

        var oDiv=document.getElementById("div1");

        oDiv.innerText="22";

    }

 

所有的javascript会按照它在页面中的顺序来依次解析;一般写在页面内容的后面,推荐放在前,因为放在body前可以通过W3C的校验,如果不为W3C校验,放在后面也是没问题的,正常执行也不会报错的;

 

  • 维护性好:JS代码和HTML代码混在一起,维护的时候需要改动HTML页面,而现在为了专注和分工明确,基本都是前后端分离的做法;页面输入都是后端的页面;如果是外链式的,只需要维护自己的JS文件即可,不需要接触HTML文件;
  • 可缓存:浏览器能够具体的设置缓存连接的所有javascript文件,也就是说如果两个页面都使用同一个文件,那么这个文件只需要下载一次,最终结果就是能够加快页面加载的速度(每次上新的时候,修改时间戳即可,);
    a.xxx.com/project/test.js?t=2016101301 (?t=2016101301 就是时间戳)
  • 适用未来:XHTML和HTML文件会出现javascript代码解析方面的差异;因为外链式不需要接触XHTML/HTML所以不存在这些问题; 注意,在使用嵌入式写法的时候,不要标签内任何地方都不要出现< script >的字符串;即使是alert,console.log这些输出;如果需要用,请使用转移字符"/"来解决;

 

Style 为什么不用src 而是 href?

 

第一批互联网人认为样式表更符合外部链接资源的特征,它更接近附属的资源,而不是内嵌的内容。比如考虑alternate stylesheets,在同一时间只需要链接一组样式表,而不是载入所有。当然你可以简单的归结为历史遗留

 

 <noscript>

      <p>你这么牛逼,咋不上天呢,连Javascript都禁用,赶紧回家种田去吧</p>

  </noscript>

noscript在启用脚本的浏览器中,用户也看不到,但是禁用的时候,会出现;

 

开发的两个思路

 

1.优雅降级  (js)

2.渐进增强  (css3)

 

优雅降低,就是按照支持度最高的浏览器标准来写代码,一般是以chrome为准,对于技术支持较旧的浏览器,只要不影响使用都可以不处理(比如圆角效果border-radius在低版本IE中是没有圆角效果的,但却并不影响正常阅读,那就不管了),如果有功能方面在低版本无法正常,就做低版本的兼容,比如兼容到IE8/IE6;我自己走的路线是优雅降级;

渐进增强,是以技术支持最低的浏览器为准,假设以IE6为准(如果兼容到IE8,就以IE8为准),写的代码在IE6/8中没问题后,在补充一些高级浏览器支持的效果;

 

 

Js 的数据类型:

 

  • JS中的数据类型: (es5: 10种 )
    • 基本数据类型   > number、string、boolean、null、undefined (5种)
    • 引用数据类型   > object : {}、[]、/^$/、Date 特殊的Function。(5种)

 

检测: typeof  *  

 

 

强类型语言和若类型语言

 

  • 强类型是数据定义时候就确定数据类型的,以后是不可以修改的,而且变量在计算机中分配的储存空间是固定的;比如a为数字1;后面就不可以修改成abc这种字符串类型;
    • 比如c++里的 string name;int age;觉得name就是一个字符串类型,而age是数值类型的;
  • 弱类型的语言,比如js是可以任意修改的;是先占一个位置,但是不分配数据类型的大小,赋值数据的时候再用,不事先准备,只准备凳子,胖的就挤一挤,瘦子就多占点;占位置和做位置分开的;变量的声明和变量的赋值是分开的;JS中的变量只是准备的不充分,但是也有准备的;就牵扯到预解释,在预解释那章会详细介绍;
  • 强类型语言,在变量创建的时候,就强制要求声明类型;而弱类型语言就显得很随意;
  • 强类型的语言中,变量类型是事先指定的;
  • 弱类型的语言中,变量的类型是赋值后根据值来决定的,赋什么样的值,就决定了变量是什么类型;

JS是一门弱类型的语法,在编译器的阶段不能检测出类型错误;所在在做变量储存的时候,变量名需要有意义,而且一个变量只用于储存一个类型的值;

 

严格模式: “use strict”

 

检测代码的一些技巧:

测试可以保证我们程序的稳健性,我们可以通过console.assert来实现;

    var a=1;

    var b=2;

    console.assert(a==1,"a不等于1");

    console.assert(b==1,"b不等于1");//这一行被输出

还有Console.log( );

 

性能分析

虽然chrome浏览器已经很牛X了,但这并不是称为编写垃圾代码的借口,可以通过执行时间来进行优化;

//性能优化

console.time("timer");

for(var i=0;i<10000;i++){}

console.timeEnd("timer");

这样就可以看一段代码的运行时间了;