目录、

[toc]
JavaScript的特点:

1、脚本语言
    在html中执行,脚本简单地说就是一条条的文字命令,这些文字命令是我们可以看到的(如可以用记事本打开查看、编辑),脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。(Java不是脚本语言)
2、解释性语言
    计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言,计算机才能执行程序。
    将其他语言翻译成机器语言的工具,被称为编译器。
    编译器翻译的方式有两种:一个是编译,一个是解释。两种方式之间的区别在于翻译时间点的不同。当编译器以解释方式运行的时候,也称之为解释器。
    解释性语言编写的程序**不进行预先编译**,以文本方式存储程序代码。在发布程序时,看起来省了道编译工序。但是,在运行程序的时候,解释性语言必须先解释再运行。
3、弱类型语言
    弱类型定义语言:数据类型可以被忽略的语言。
    (强类型定义语言:强制数据类型定义的语言。比如:Java,C语言)
4、从上往下,从右往左的执行顺序(异步执行)

JavaScript的组成:

1、ECMAScript(核心)
    ECMA-262 定义的EMCAScript与Web浏览器没有依赖关系。浏览器仅是ECMAScript实现可能的宿主环境之一,宿主环境不仅提供基本的ECMAScript实现同时也提供该语言的扩展,以便语言与环境之间对接交互。扩展如DOMECMA规定了这门语言的组成部分
    1,语法
    2,类型
    3,语句
    4,关键字
    5,保留字
    6,操作符
    7,对象
2、DOM(文档对象模型)
    DOM(Document Object Model) 是针对XML但经过扩展用于HTML的应用程序编程接口。DOM将整个页面映射成一个多节点结构。
    html代码:
    <html>
        <head>
            <title>hello</title>
        </head>
        <body>
            <p>nihao </p>
        </body>
    </html>

        dom模型
        html
        /   \
    head    body
     |       |
    title    p
     |       |
    'hello' '你好'
3、BOM(浏览器对象模型)
    BOM(Browser Object Model),开发人员可以使用BOM控制浏览器显示的页面以外的部分。弹出新浏览器窗口;移动,缩放,关闭浏览器的功能;提供浏览器详细信息的navigator对象;提供浏览器所加载页面的详细信息的location对象;提供用户显示器分辨率详细信息的screen对象;对cookies的支持;支持XMLHttpRequest,IE中的ActiveXObject自定义对象

JavaScript的使用:

1、在页面中直接使用
<script type="text/javascript">
            //javascript代码
        </script>
2、使用外部的js文件
<script type="text?javascript" src="外部js文件的路径">
            //不能在此书写js代码否则会被忽略
        </script>
注:
    1、如果需要获取html页面中的数据,对dom节点进行操作时,将<script>标签放在<body>标签后面。如果不需要获取,放在<head>标签里面。
    2、type  : 可看做是language的替代属性,表示编写代码使用的脚本语言的内容类型,这个属性非必须,默认是text/javascript
    3、src : 表示包含要执行代码的外部文件(src 可以跨域访问。例如:本机有一个服务器,要去访问其他服务器内容)
    4、 <noscript>(浏览器不支持script时,才会显示。如果支持,不显示。写在html标签后面。)
<noscript>
        本页面需要浏览器支持(启用)javascript
    </noscrpt>

JavaScript的语法:

1.js区分大小写
    typeof:关键字(判断变量是什么类型的对象)
    typeOf:非关键字
    var:关键字(定义变量)
    VAR:非关键字

2.标识符(变量)
    1.以字母,数字下划线和$组成
    2.不能够以数字开头
    3.不能够使用关键字进行定义
    4.建议使用驼峰式命名

3.js中的注释
    只有两种:
        1.//  单行注释
        2./*多行注释*/
    html:
        <!--注释内容-->
    css:
        /*注释内容*/
     java:
            1.//单行注释
            2./*多行注释*/
            3.javadoc
            /***
            *文档注释,写在类上或方法上,生成api
            /
    4、语句
    每个语句以分号结尾,如果省略分号,由解析器确定语句的结尾,即分号可以省略,但是我们要求每个语句的末尾都应该有分号。
    <script type="text?javascript">
        alert(1)
        alert(2)
    </script>
    //两个都会执行
    <script type="text?javascript">
            alert(1);
            alert(2)
    </script>
    //两个都会执行
    <script type="text?javascript">
        alert(1)alert(2)
    </script>
    //只会执行前面那一个
5、变量的声明:定义变量时使用var操作符
    var 变量名;
    声明 var message;
    初始化 message = "hello"
    声明并初始化  var message = "hello";
    1.var age;  //变量的声明
      age=12;
    2.var age=12;
    3.var age1=12,age2=13;
    //age2=13;

局部变量和全局变量:

1.局部变量
    使用var操作符,并且将该变量定义在函数内部 
        function test(){
            var message = "hello";  
        }
        test();
        alert(message); //错误
    2.全局变量
    js整个作用域
    1>使用var操作符,并且将该变量定义在js整个作用域下
    2>不使用var操作符定义变量
    (如果在函数中定义变量没有加var,该变量为全局变量,外面获取到变量的前提是函数在外部被调用)
        function test(){
            message = "hello";  
        }
        test();
        alert(message); //可以访问

JavaScript的数据类型:

1)ECMAScript不支持自定义类型,只有6种数据类型:

    五种基本数据类型(简单数据类型):
        Undefined   未定义 "undefined"
                var a ;
                var a = "undefined";//不做
        Null    空引用数据类型 "null"
                var a = null;
        Boolean 布尔类型 true/false
            var a = false;
        Number  字类型
                整数
                浮点数
        String  字符串类型 "" ''(不区分单双引号)
                var a ="true";
                var a ='hello';
    一种引用类型(复杂数据类型):
        Object(本质由一组无序的键值对组成)
            var person= new Object();
            person.name = "terry";
            person.age = 12;
2) typeof 操作符返回该变量名所指向数据的类型
    语法:typeof 变量名 

        可有取值如下:
            "undefined"     未定义
            "boolean"       布尔类型
            "string"        字符串
            "number"        数值
            "object"        对象或者null
            "function"      函数
instanceof
    a  instanceof b
        //检测a是不是属于b的一个实例
3) 基本数据类型
1. Undefiend 
    该类型只有一个值undefined。对未声明和未初始化的变量执行typeof操作符都返回undefined
    var a;
    console.log(a);         // undefined
    console.log(typeof a);  // undefined
    console.log(b);         //ReferenceError: b is not defined
    console.log(typeof b);  // undefined
2. Null类型
    该类型只有一个值 null ,null可以表示一个空对象的指针。
    var car = null;
    console.log(typeof car )    //object  null被认为是空对象的引用

    【使用情景】
        如果一个变量准备将来保存对象,可以将该变量初始化null而不是其他,这样可以通过检查null值就可以知道相应的变量是否已经保存了一个对象的引用。
        if(car !=null ){
            //car对象执行某些操作
        }
    实际上 undefined 派生自null值。undefined == null 结果为 true
    null与undefined用途不同,null可以用来表示一个空对象,但是没有必要把一个变量的值显式设置为undefined

3. Boolean类型
    该类型只有两个值,true,false虽然boolean类型的取值只有两个,但是ECMAScript中所有的类型的值都有与这两个Boolean值等价的值。
4. Number
    该类型用来表示整数和浮点数
    1) 表示方法:
        1. 整数:  
            十进制数: 55    0~9
            八进制数: 第一位必须是0,然后是八进制数字序列(0-7),如果字面值中的数值超出了范围,那么前导0将被忽略,后面的数值被当作十进制数解析
                070 (表示 7*8一次方 =  56)
                079 (超过了范围,表示79)
            十六进制: 前两位为0x,其他位为(0~9,A~F)
        2. 浮点数
            所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后必须至少有一位数字。浮点数值的最高精度是17位小数。
                例如: var f = 1.2;
            默认情况下,js会将小数点后面带有6个0以上的浮点数值转换为以e表示法表示的数值
            科学计数法:e
                var e = 3.125e7;        //31250000
    2) 数值范围
        由于内存的限制,ECMAScript不能保存世界上所有的数值。ECMAScript能表示的最小数值保存在Number.MIN_VALUE中,能表示的最大的数值保存在Number.MAX_VALUE中。如果某次计算的结果超过了JavaScript数值范围,将会返回Infinity(正无极)或者-Infinity(负无极)使用 isFinite()函数可以判断参数是否在最大值和最小值之间,如果在,返回true
        在绝大数浏览器中:
            Number.MIN_VALUE : 5e-324
            Number.MAX_VALUE : 1.7976931348623157e+308
        如果某次计算返回了正的或者负的Infinity,那么该值无法继续参与下一次计算。可以使用isFinite(para)函数判断para 是否在最大数最小数之间
    3) 非数值 NaN (not a number)(如果不是数字返回true,如果是数字返回false)
        该数值表示一个本来要返回数值的操作数未返回数据的情况。
            var a = 10/'a';
            console.log(a);     
        number类型和其他数据类型进行操作时,其他数据类型不能转化成number类型,返回NaN。
        任何涉及到NaN的操作都会返回NaN; NaN与任何值都不相等,包括NaN本身。
        isNaN,判断参数是否“不是数值”,当参数para不是数值的时候返回true 
            isNaN(NaN);     true
            isNaN("blue");  true    无法转换为数值
            isNaN(10);      false   10
            isNaN("10");    false   10
            isNaN(true);    fase//true转化成number类型是1
    注意:
        1) 默认情况下,ECMAScript会将小数点后带有6个零以上的浮点数转化为科学计数法。
            0.0000003 => 3e-7
        2) 在进行算术计算时,所有以八进制十六进制表示的数值都会被转换成十进制数值。

        3) 保存浮点数需要的内存是整数的两倍,因此ECMAScript会不失时机将浮点转换为整数
            例如:
            var a = 1.;
            var b = 1.0;  都将解析为1
        4) 避免测试某个特点的浮点数值,是使用IEEE 754数值的浮点计算的通病
            例如: 0.1+0.2结果不是0.3,而是0.30000000000000004

            Math.pow(2, 53),十进制即 9007199254740992

5. String
    该类型表示由零个或者多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号或者单引号表示
    1)字符字面量
        \n  换行
        \t  制表
        \b  退格
        \r  回车
        \\  斜杠
        \'  单引号
        \"  双引号
        例:console.log("\n");
    2)字符长度  
        通过length属性获取字符长度
        例:console.log(gxj.length);
6. Object
    ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过执行"new 对象类型"来创建。
        var o = new Object();
    Object类型是所有它的实例的基础,换句话说,Object类型所具有的任何属性和方法,同样存在于更具体的对象。
        constructor:(当前对象是谁创建的) 保存用户创建当前对象的函数
                例:console.log(o.constructor)
        hasOwnProperty(propertyName);   用于检查给定的属性是否在当前对象实例中
        isPrototypeOf(object);          用于检查传入的对象是否是原型
        propertyIsEnumerable(propertyName); 用于检查给定的属性在当前对象实例中是否存在
        toLocaleString();       返回对象的字符串表示,该字符串与执行环境的地区对应
        toString();             返回对象的字符串表示
        valueOf();              返回对象的字符串,数值,布尔值的表示。
        对于不同类型的对象,js定义了多个版本的 toString 和 valueOf 方法
        toString:
        (1)普通对象,返回 "[object Object]";
        (2)数组,返回数组元素之间添加逗号合并成的字符串;
        (3)函数,返回函数的定义式的字符串;
        (4)日期对象,返回一个可读的日期和时间字符串;
        (5)正则,返回其字面量表达式构成的字符串;
        valueOf:
        (1)日期对象,返回自1970年1月1日到现在的毫秒数;
        (2)其它均返回对象本身;