美文网首页
《JavaScript高级程序设计(第3版)》

《JavaScript高级程序设计(第3版)》

作者: Andy丶Go | 来源:发表于2017-09-11 18:50 被阅读15次

    1、JavaScript:
    JavaScript是一种专为与网页交互而设计的脚本语言,由以下三部分组成:ECMScript,提供核心语言功能;DOM(文档对象模型),提供访问和操作网页内容的方法和接口;BOM(浏览器对象模型),提供与浏览器交互的方法和接口。

    2、宿主环境:
    Web浏览器只是宿主环境之一,所谓宿主环境是指不仅提供语言的基本实现,同时也会提供该语言的扩展,以便语言与环境之间对接交互,其它宿主环境包括Node、Adobe Flash。

    3、<script>元素的6个属性:
    <1>src,可选,表示包含要执行代码的外部文件路径,与<img>的src属性相似,可以实现文件的跨域访问。
    <2>charset,可选,表示通过src属性指定的代码的字符集,默认是utf-8编码,但大多数浏览器会忽略掉它的值,所以少有人使用。
    <3>language,已废弃,原用于表示编写代码使用的脚本语言。
    <4>type,可选,可作为language的替代属性,表示编写代码使用的脚本语言的内容类型。
    <5>defer,可选,脚本延迟属性,表示立即下载脚本但可以延迟到文档完全解析和显示之后再执行,只对外部脚本文件有效。HTML5规范要求按照它们出现的先后顺序延迟执行,但实际操作并不一定,因此最好只包含一个延迟脚本。
    <6>async,可选,脚本异步加载属性,表示立即下载脚本,但不应妨碍页面中的其它操作(即页面主体内容与脚本同时进行加载,互不影响,但脚本加载完成后会立即执行),所以并不保证脚本会按照其先后顺序执行,建议异步脚本不要在加载期间修改DOM,同样该属性只对外部脚本有效。

    4、Js引用的两种方法:
    向HTML页面中插入JavaScript的主要方法就是使用<script>元素的两种方式:直接在页面中嵌入JavaScript代码和通过其src属性指定包含JavaScript代码的外部文件路径。使用外部文件有如下优点:方便维护、可缓存(多页面引用只需加载一次),适应未来(HTML和XHTML包含外部文件的语法是相同的,即无需写兼容注释)。

    说白了就是JS的两种引用方式,以及外部引用的优点!

    5、置后加载Js:
    现代Web应用程序一般都把全部JavaScript引用放在<body>元素中页面内容的后面,这样在解析JavaScript代码之前,页面内容将完全呈现在浏览器之中,而用户也会因为浏览器窗口显示空白页面的时间缩短而感到打开页面的速度加快。

    JS置后加载,这是欺诈!

    6、CData片段:
    在XHTML中,CData片段是文档中的一个特殊区域,这个区域中可以包含不需要解析的任意格式的文本内容。由于XHTMl的严格性,有些HTML规则在XHTML中不适用,为保证相同的JS代码在XHTML中正常运行,我们通常会在兼容XHTML的浏览器中用CData片段来包含JS代码,在不兼容XHTNL的浏览器中,使用JS注释将CData片段注释就可以了。CData片段写法:

    <script>
    <![CDATA[
    function matchwo(a,b)
    {
    if (a < b && a < 0) then
      {
      return 1;
      }
    else
      {
      return 0;
      }
    }
    ]]>
    </script>
    

    7、<noscript>元素:
    <noscript>元素,用以在不支持JS的浏览器中显示替代的内容,内容可以包含除<script>元素外文档中的任何HTMl元素,且只会在浏览器不支持脚本或脚本被禁用时显示出来。

    8、isFinite() 函数:
    isFinite() 函数用于检查其参数是否是无穷大。

    如果 number 是有限数字(或可转换为有限数字),那么返回 true。否则,如果 number 是 NaN(非数字),或者是正、负无穷大的数,则返回 false。

    9、parseInt() 函数与parseFloat() 函数:
    parseInt() 函数解析一个字符串参数,并返回一个指定基数的整数 (数学系统的基础)。

    a、有两个参数,第一个必须,第二个可选,但始终指定此参数可以保证转换结果可预测。
    b、第一个参数如果不是一个字符串,则将其转换为字符串。第二个参数是一个介于2和36之间的整数,表示上述字符串的基数,比如参数"10"表示十进制数值系统。当未指定基数时,通常将值默认为10。ECMAScript 5 移除了八进制解析。
    c、字符串开头的空白符将会被忽略。如果参数字符串的第一个字符不能被解析成为数字,则返回NaN。

    parseFloat() 函数解析一个字符串参数并返回一个浮点数。

    a、只有一个参数,且只解析为十进制。
    b、如果参数字符串的第一个字符不能被解析成为数字,则返回NaN。参数字符串首位的空白符会被忽略。

    10、for...in 语句:
    for...in 语句是一种精准的迭代语句,可以用来枚举对象的属性。

    通俗来讲就是用来遍历对象的,就像用for语句来遍历数组一样。

    11、label 语句:
    label 语句,即标签语句,一般都要与循环语句配合使用。在循环语句中与break和continue语句联合使用,从而返回到代码中的特定位置,多用于退出循环嵌套的情况下。

    a、给我的感觉和a标签的锚点作用类似,label语句的标签可以自定义,但尽量避开关键字和保留字。
    b、break和continue语句常用在控制循环语句的流程上。

    12、switch语句:

    switch(n){
        case value1:
            执行代码块 1
            break;
        case value2:
           执行代码块 2
           break;
        default:
           n 与 case value1 和 case value2 不同时执行的代码
    }
    

    1、case值的含义是如果表达式(n)等于这个值(value),则执行后面的语句。case的值不一定是常量,可以是变量,甚至是表达式。
    2、break关键字是用来使代码执行流跳出switch语句,如果省略break会导致执行完当前case后继续执行下一个case。
    3、default关键字则用于在表达式不匹配前面任何一种情形的时候执行此代码。
    4、switch语句在比较值时使用的是全等操作符(===),因此不会发生类型转换。

    13 、 函数:

    • 函数可以封装任意多条语句,而且可以在任何地方,任何时候调用执行。
    • 任何函数在任何时候都可以通过return语句后跟要返回的值来实现返回值,函数会在执行完return语句之后停止并立即退出。
    • 如果return语句之后不带任何值则会返回undefined值。
    • 推荐的写法是要么让函数始终返回一个值,要么永远不返回值。

    14、参数:

    • 函数的参数始终是个数组。
    • 在函数中可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
    • arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。
    • 命名参数的值与对应的arguments对象位置的值保持同步,但它们在内存中的空间相互独立。

    15、变量:

    • 变量包含两种不同的数据类型:基本数据类型和引用类型,定义变量类型的方式是创建一个变量并为该变量赋值。
    • 访问变量有按值访问和按引用访问,而Js不允许直接访问内存中的位置,因此引用类型的值是按引用访问的。
    • 变量为引用类型的值时,我们可以为其添加可以属性和方法,基本类型是不可以的。
    • 变量复制时,基本类型的两个变量值是相对独立的个体,可以参与任何操作而互不影响;引用类型的两个变量值都是指向同一个对象的指针,改变其中一个变量会影响另一个。

    16、传参:

    • 所有函数的参数都是按值传递的,但引用类型的值复制时是指向同一个对象的指针,因此如果传递的参数是一个引用类型值时,传入内部的值与外部的值是指向同一个全局对象的,但如果函数内部改变了值,则内部值变为局部变量值是不会影响到外部值的引用的。
    • 可以把Js函数的参数想象成局部变量。

    17、检测类型:

    • instanceof 操作符用来检测变量是否为某种对象的实例(所有引用类型的值都是对象的实例),返回true或false。

    colors instanceof Array //变量 colors 是 Array 吗?

    • typeof 操作符用来检测基本数据类型

    确定一个值是哪种基本类型可以使用 typeof 操作符,而确定一个值是哪种引用类型可以使用 instanceof 操作符。

    18、执行环境与作用域:

    • 执行环境定义了变量或函数有权访问的数据,决定了它们各自的行为。
    • 每个执行环境都有一个与之关联的变量对象,它保存了环境中定义的所有比变量和函数。全局执行环境是最外围的一个执行环境,在Web浏览器中,全局执行环境被认为是Window对象,因此所有全局变量和函数都是作为Window对象的属性和方法创建的。
    • 每个函数都有自己的执行环境,当代码在环境中执行时,会为变量创建一个作用域链,作用域链最前端的始终都是该环境中的变量,而全局环境的变量对象始终都是作用域链的最后一个对象。
    • 内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境,即作用域只可向上搜索,不可向下查找。

    19、延长作用域链:

    • 执行环境的类型总共只有两种——全局和局部(函数),但还是有办法来延长作用域链,是因为有些语句可以在作用域前端临时增加一个变量对象,该变量对象会在代码执行完毕后移除。
    • try - catch语句的 catch 块和 with 语句可以延长作用域链,对 with 语句来说,会将指定的对象添加到作用域链中,而 catch 语句则是创建一个新的变量对象添加到作用域链中,其中可能包含错误声明。

    20、垃圾收集:

    • JavaScript 具有自动垃圾收集机制,也就是说执行环境会负责管理代码执行过程中使用的内存。
    • 最常见的方式是标记清除,垃圾收集器会在运行时给所有内存中的变量加上标记,然后去掉环境中和被环境引用的变量的标记,而在此之后再被加上标记的变量则视为准备删除的变量。
    • 另一种不太常见的收集策略叫做引用计数,即跟踪记录每个值被引用的次数,声明并赋值给一个变量时,这个值被引用次数是1,如同一个值被赋值给另一个变量时,则该值引用次数加1,相反如包含这个值的变量取得新值,则这个值的次数减1,。如此当这个值的引用次数为0时,则说明此值无法再被访问,将会被回收,但此策略会在变量的循环引用中出错,循环引用是指对象 A 中包含一个指向对象 B 的指针,而对象 B 中也包含一个指向对象 A 的引用。
    • 确保占用最少的内存可以让页面获得更好的性能,而优化内存占用的最佳方式就是执行中的代码只保存必要的数据,一旦数据不再使用,最好设置其值为 null 来释放引用,即解除引用。
    • 解除引用不仅有助于消除循环引用现象,而且对垃圾收集制也有好处。

    相关文章

      网友评论

          本文标题:《JavaScript高级程序设计(第3版)》

          本文链接:https://www.haomeiwen.com/subject/gnjfsxtx.html