Javascript学习笔记

2018-08-28  本文已影响0人  赫赫骑大马

写了好几年代码之后发现积累跟沉淀的东西太少了,不能再犯懒了!!

1.ECMASCRIPT&DOM&BOM -- javascript的三大组成部分

ECMASCRIPT: ECMA(European Computer Manufacturers Association 欧洲计算机制造商协会)。
ECMASCRIPTS是ECMA定制的标准化脚本语言,ECMA-262标准。javascript是标准化的实现。
2015年6月17日,ECMAScript 6发布正式版本,即ECMAScript 2015

DOM:文档对象模型(document object model) 针对 XML 但经过扩展用于HTML的应用程序编程接口。
DOM把整个网页页面映射成为一个多层节点结构,HTML,XML页面中每个组成部分都是某类型的节点。

BOM:浏览器对象模型(browser object model) 针对BOM可以让开发者控制浏览器显示页面以外的部分。
BOM只处理浏览器窗口跟框架。

2.在HTML中使用javascript

使用<script></script>元素来引入javascript。
<script>中的6种属性:
async:可选。表示应该立即下载脚本,但是不应妨碍页面中的其他操作。只对外部脚本有效。

    <html>
<head>
    <meta charset="UTF-8"/>
    <title>aaa</title>
</head>
<body>

</body>

<script type="text/javascript" src="test.js" async="async"></script>
<script type="text/javascript" src="test2.js" async="async"></script>
    </html>
    async属性不能保证脚本加载的顺序,以上两个js脚本程序无法确定哪个会先加载,因此,需要确保脚本之间没有互相依              赖。

    charset:可选。表示通过src制定代码的字符集。基本没人使用。
    defer:可选。表示脚本可以延迟到整个页面加载完成之后再执行。只对外部脚本有效。
    language:已放弃。
    src:可选。表示包含要执行代码的外部文件。如果加载为外部文件,则必须。可包含跨域外部文件。
    type:可选。看成是language的替代属性。并不是必须,大多数是 text/javascript

javascript默认从页面顶端开始向下加载。

<script></script>标签内不能出现</script>

最优加载方式:1.将所有<script>标签放置在页面的底部,紧靠</body> 的上方。可以保证页面在脚本运行之前完成解析。
2.将脚本成组打包,页面的<script>标签越少,页面的加载速度越快,响应也更迅速。

3.语法部分

    所有的变量,函数名,操作符,都区分大小写。
    标识符:只变量,函数,属性的名字,或者函数的参数。可以是一个或者多个字符。
    标识符规则:第一个字符必须是 字母,下划线(_),美元符($)。其他字符可以是字母,下划线,美元符,或者数字。
    按照惯例,采用驼峰大小写格式,firstSecond/myCar/doSomeThingImportant
    语句:采用分号结尾  var sum = a + b;
    关键字&保留字 略。

    变量:松散类型,可以用来保存任何数据。使用 var 关键字来定义变量。 var message = 1;
    var message;类似这种没有经过初始化的变量,会保存一个特殊的值--undefined。
    注意:使用 var 定义的变量,将成为定义该变量作用域中的局部变量。也就是说,如果在函数中使用var 来定义的变量,在函数执行之后,会被销毁。
    function test(){
        var message = 'hello world';
    }
    test();
    alert(message);//会报错

    省略 var 操作符 可以定义全局变量
    function test(){
        message = 'hello world';
    }
    test();
    alert(message);//有效   不推荐

     使用一条语句定义多个变量
    var message = 'hello',
          message2 = 'world',
          message3 = '哈哈哈';

    数据类型: 共有五种数据类型, Undefined,Null,Boolean,Number,String。还有一种复杂数据类型 Object
    Object本质上是一组无序的名值对组成。
    typeof 操作符 来检测变量类型,是操作符不是函数,所以后面的括号不是必须的。
    typeof message 等同于 typeof(message)
    返回字符串:“undefined” -- 未定义。
                      “boolean” -- 布尔值。
                      “string” --   字符串。
                      “number” -- 数值。
                      “object” -- 对象或者null。
                      “function” -- 函数。

    特例: alert(typeof null); 返回 object,因为null被认为是一个空的对象引用。

    Undefined类型:只有一个值,undefined。var 变量 但是并没有赋值,则是 undefined。
    undefined 与 未定义变量不同。
    例子:var a = 'HELLO';
             //var b = 'nihao';
              alert(a); // undefined
              alert(b); //报错
      对未初始化的变量进行 typeof 会返回 undefined,对未定义的变量进行 typeof 同样会返回 undefined。
              var a = 'HELLO';
             //var b = 'nihao';
              alert(typeof a); // undefined
              alert(typeof b); //undefined

     Null类型:第二个只有一个值的类型,null。 null值表示一个空对象指针。因为 进行 typeof 操作会 返回 object。
     如果定义的变量准备在将来使用,最好将初始化的值设置为null。这样,只要检查 null值 就可以知道相应的变量是否已经报错了一个对象的引用,
    var car = null;
    if(car != null)
    {
          //do some thing...
    }

    实际上,undefined 值 是派生自 null 值的,所以,他们的相等性测试会返回 true。
    alert(undefined == null);//true

    Boolean类型:只有两个字面值 true false。这两个值与数字值不是一回事。两个字面值区分大小写,True False 都不是Boolean类型,只是标识符。可以通过Boolean(aaa)来转换一个值为Boolean类型。
    数据类型转换:    Boolean   true 为 true  false 为 false。
                             String  任何非空字符串 为 true  ""空字符串 为 false。
                             Number  任何非0数字值包括无穷大  为 true  0和NaN 为 false。
                             Object  任何对象 为 true  null 为false。
                             Undefined  n/a 为 true  undefined 为 false
    例:var aa = 'aaaaa';
          if(aa)
           {
              alert(' true');
           }
    Number类型:是数字值对应的引用类型。要创建Number对象,可以调用Number构造函数时向其中传递相对应的值。
    例:var numberObject = new Number(10);
    与Boolean类型一样,Number类型也重写了valueOf() toLocaleString() toString()方法。 重写后,valueOf()返回对象表示的基本类型的数值,另外两个方法返回字符串形式的数值。还可以为 toSting()方法传递一个表示基数的参数,告诉他表示几进制数值的字符串形式。
    例:var num = 10;
    alert(num.toString()) //10
    alert(num.toString(2))//二进制 1010
    
    除了继承的方法外,Number类型还提供了一些用于将数值格式化为字符串的方法。
    例:var num = 10;  alert(num.toFixed(2))// “10.00”   表示显示几位小数,用0填补空位
    如果数值本身包含的小数位数比指定的多,接近指定的最大小数位的值会舍入
    例:var num = 10.005;alert(num.toFixed(2)) // 10.01

    toPrecision()返回固定大小的格式,也可能返回指数格式。
    例:var num = 99;
          alert(num.toPrecision(1))//"1e+2"
          alert(num.toPrecision(2)) //"99"
          alert(num.toPrecision(3)) // "99.0"

     与Boolean类型 类似,Number对象也以后台方式为数值提供重要功能。
     不建议直接实例化Number类型,原因与显示创建Boolean对象一样,具体来讲,使用 typeof 和 instanceof 操作符测试基本类型数值与引用类型数值时,得到的结果不同。
     例:var numberObject = new Number(10);
           var numberValue  = 10;
          alert(typeof numberObject) // "object"
          alert(typeof numberValue) // "number"
          alert(numberObject instanceof Number)//true
          alert(numberValue instanceof Number) //false

        String类型:字符串的对象包装类型,使用String构造函数来创建
        例:var stringValue = new String("hello world");
        String对象的方法,也可以在所有基本的字符串值中访问到 valueOf() toLocaleString()toSting()都返回对象表示的基本上字符串值。
        String类型的每个实例,都有一个length属性,表示字符串中包含多少个字符。
        例:var stringValue = new String("hello world");
              alert(stringValue.length)//11  空格也算字符
         即使字符串中包含双字节字符,每个字符也仍然算一个字符。
          一·字符方法:用于访问字符串中特定字符的方法:charAt()  charCodeAt() 这两个方法都基于一个参数,即基于 0 字符的位置.
          例:var stringValue = ‘hello world’;
                alert(stringValue.charAt(1))// "e" 
                alert(stringValue.charCodeAt(1))// 101
                alert(stringValue[1])// "e"   IE7 或者更早版本返回 undefined
           二·字符串操作方法: concat() 用于将一个或多个字符串拼接起来,返回拼接得到的新字符串。
           例:var string1 = "hello";
                 var res = string1.concat("world");
                 alert(res);//"helloworld"
            concat()方法拼接字符串,原字符串值不变,可以传任意多个参数进行拼接。
            大多数情况下 用 "+",简易。
            slice() substr() substring() 这三个方法都返回被操作字符串的一个子字符串,而且也都接受一个或者两个参数。第一个参数指定 子字符串的开始位置,第二个参数指定子字符串的结束位置。 其中 substr()的第二个参数指定返回的字符串个数。如果没有给这些方法传递第二个参数,则将字符串的长度作为结束位置。
              例: var stringValue = 'hello world';
                   alert(stringValue.slice(3)); // 'lo world'
                   alert(stringValue.substr(3)); // 'lo world'
                   alert(stringValue.substring(3)); // 'lo world'

                   alert(stringValue.slice(3, 7)); // 'lo w'
                   alert(stringValue.substr(3, 7)); // 'lo worl' 
                   alert(stringValue.substring(3, 7)); // 'lo w' 
              如果参数是负值:
              例:var stringValue = 'hello world';
                    alert(stringValue.slice(-3)); // 'rld'   slice()传入负值会将负值与字符串长度相加,
                    alert(stringValue.substring(-3)); // 'hello world'  substring()会将全部负值转换为0
                    alert(stringValue.substr(-3)); // 'rld'  substr() 将负的第一个数与字符串长度相加,第二个转换为0

               三·字符串位置方法:indexOf()  lastIndexOf()这两个方法都是从一个字符串中搜索给定的子字符串的位置,如果没有,返回-1。区别: indexOf从头开始找  lastIndexOf 从后开始找
               例:var stringValue = 'hello world';
                     alert(stringValue.indexOf(‘o’))// 4
                     alert(stringValue.lastIndexOf(‘o’))//7
                如果子字符串只出现一次,两个返回值相同。两个方法都可以传第二个参数 指定开始查找位置,
上一篇下一篇

猜你喜欢

热点阅读