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);
  • 相关阅读:
    .NET 4.0 中的契约式编程
    DELL安装Windows Server 2019
    Mysql 5.7.34免安装版本
    MQTT
    WPF属性
    WPF数据绑定
    git系列之(五)git stash 命令
    Vue.js
    git 对比两个分支差异
    TPL 之二 TransformBlock
  • 原文地址:https://www.cnblogs.com/eco-just/p/10927831.html
Copyright © 2011-2022 走看看