zoukankan      html  css  js  c++  java
  • JavaScript高程第三版笔记(1-5章)

    第2章:在html中使用javascript

    ①script标签的defer属性

    <script type="text/javascript" defer="defer" src="dmeo.js"></script>

    这个属性的用途是表明脚本在执行时不会印影响页面的构造(立即下载,延迟执行),整个页面都解析完毕后再按顺序运行。(放在dom前面依旧会阻塞页面加载)

    ②script标签的async属性

    <script type="text/javascript" async src="dmeo.js"></script>

    立即下载,但是执行顺序并不保证按照指定他们的相互顺序执行。(放在dom前面不会阻塞页面加载)

    ③嵌入代码和外部文件

    <script>
        具体代码...
    </script>

    上述具体代码,在HTML和XHTML中会存在一定程度的语法解析差异(不兼容)所以要通过hack来解决(虽然现在都是HTML5了,但这个知识点可以了解一下)

    而通过外部文件引入js代码,就不会出现上述问题,所以我们通常建议通过外部文件来引入代码块。

    并且通过外部文件引入,会有如下优点:可维护性、可缓存。

    第3章:基本概念

    ①严格模式

    ECMAscript 5中引入了严格模式的概念;

    严格模式是为JavaScript定义了一种不同的解析与执行模型,告诉JavaScript引擎切换到严格模式,这是为了不破坏ECMAScript3语法而特意选定的语法;

    function demo(){
      "use strict";
      //函数体    
    }

    ②语句格式

    语句结尾加分号(虽然不是必须的,但在某些情况下可以增进代码的性能以及避免错误):

    var sum = a + b ;       //有效的语句,推荐
    var sum = a + b         //有效的语句,不推荐

    if语句中始终用代码块带包含语句(虽然只有一条语句时可以不使用{},但最佳实践是始终使用代码块):

    if (test)
        alert(test);      //有效但易出错,不要使用
    
    if (test) {
        alert(test);      //推荐使用
    }

    ③变量

    在ES6之前,定义变量要通过var关键字;

    var message;                        //此时message变量因为没有被初始化,所以值为undefined
    
    message = 'hello world';            //此时,message值为‘hello world’,并不代表他是字符串类型
    
    message = 100//有效,但不推荐

    注意:用var操作符定义的变量将成为定义该变量的作用域中的局部变量,函数作用域中定义的变量在函数退出后就会被销毁(闭包另行讨论)

    没有用var 定义的变量,该变量就成了全局变量(window作用域下)

        var a= 1;
        function test(){
            str =  'hello world';
        }
        test();
        console.log(window.str,window.a);

    ④数据类型(typeof操作符)

    “undefined”--------------------值未定义或定义了却没有初始化;

    “boolean”----------------------布尔值;

    “string”-------------------------字符串;

    “number”-----------------------数值;

    “object”-------------------------对象或者null;

    “function”-----------------------函数。

     下列几种值进行布尔判断的时候是false:false、“”(空字符串)、0、NAN、null、undefined

    ⑤浮点数值计算问题

    console.log(0.1 + 0.2 == 0.3);
    console.log(0.15 + 0.15 == 0.3);

    关于浮点数值计算会产生舍入误差的问题,这是使用基于IEEE754数值的浮点计算的通病,ECMAScript并非独此一家,其他使用相同数值格式的语言也存在这个问题。

    ⑥NaN

    not a number !

        console.log(NaN == NaN);        //false
    console.log(isNaN(NaN)); //true console.log(isNaN(10)); //false console.log(isNaN('10')); //false console.log(isNaN('blue')); //true console.log(isNaN(true)); //false

     ⑦parseXXX与按位非

    在ES5之后,parseInt()已经不具备自动解析八进制值的能力,但是你可以传递第二个参数来指定进行多少进制转换

    parseInt('AF',16)                    //175
    parseInt('AF')                      //默认10进制,但是第一个不是数值,返回NaN

    parseFloat()只解析十进制,没有可用的第二个参数来指定进制转换

    var num1 = parseFloat("1234blue");         //1234 (整数)
    var num2 = parseFloat("0xA");              //0
    var num3 = parseFloat("22.5");             //22.5
    var num4 = parseFloat("22.34.5");          //22.34
    var num5 = parseFloat("0908.5");           //908.5
    var num6 = parseFloat("3.125e7");          //31250000

    ⑧toString()方法和String()

    数值、布尔、对象和字符串都有toString()方法,null和undefined没有toString()方法;

    并且,对于数值型数据,toString()方法可以传递一个参数(进制数)从而返回对应进制的数值;

    String()方法用于强制类型转换(转String),而且当该数据存在toString()方法时,默认调用该方法,否则,null返回‘null’,undefined返回‘undefined’

    第5章:引用类型

    1⃣️检测数组

    value instanceof Array;

    对于一个网页或者一个全局作用域而言,上述操作可以检测是不是数组;但是如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数;

    为了解决这个问题,ES5新增了Array.isArray()方法,这个方法的目的是最终确定某个值到底是不是数组,无论他是在哪个全局作用域中创建的:

    Array.isArray(value);

    2⃣️数组的迭代方法

    filter(fn()):返回fn函数会返回true的项组成的数组;

    map(fn()):返回每次函数调用的结果组成的数组;

    3⃣️Math对象

    数组求最大值:

    var values = [1,2,3,4,5,6,7];
    var max = Math.max.apply(Math, values);
  • 相关阅读:
    How to function call using 'this' inside forEach loop
    jquery.validate.unobtrusive not working with dynamic injected elements
    Difference between jQuery.extend and jQuery.fn.extend?
    Methods, Computed, and Watchers in Vue.js
    Caution using watchers for objects in Vue
    How to Watch Deep Data Structures in Vue (Arrays and Objects)
    Page: DOMContentLoaded, load, beforeunload, unload
    linux bridge
    linux bridge
    EVE-NG网卡桥接
  • 原文地址:https://www.cnblogs.com/eco-just/p/10927831.html
Copyright © 2011-2022 走看看