这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程。

第一章 - JavaScript主要由以下三个不同的部分构成

  • ECMAScript   提供核心语言功能
  • DOM     提供访问和操作网页内容的方法和接口
  • BOM     浏览器对象模型,提供浏览器交互的方法和接口

第二章

  • 关于<script>加了空格是否算报错

    不会报错,但是这个标签会被解析失败,比如 <s cript></s>最后解析的会是删除线 s.效果如下:



    另外吐槽一句,现在已经不推荐使用<s></s>这个标签了,如果可以,最好使用<del></del>

    再吐槽一句,如果是其他的标签元素的<test>1 2</test>中间有再多的空格最后都会变成一个空格。

  • 关于标签的大小写写错是否要紧

    不要紧,但最好是对的。

    <scripT></Script> //这样是没有错的,但是我们还是按照规范写比较好

  • <noscript>当script不允许被执行时才会被显示出来

  • 嵌入代码与外部文件

    在 html 中嵌入代码虽然没有什么问题,但用外部文件有以下的一些好处。

    • 1.可维护性,遍及不同的 html 文件会造成维护问题,但如果将 JS 放在一个文件夹下就轻松多了。
    • 2.可缓存,浏览器可以根据具体的设置缓存所有外部 JS 文件,如果有两个页面都用一个文件,那么这个文件只需要加载一次。
  • 很关键:script 的 defer 属性和 async 属性

    当浏览器没有解析到 defer 和 async 时,浏览器会立即 下载并且执行 指定的脚本。

    "立即"指在渲染该script标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行。

上面这个知识点我觉得还挺有必要深究的,它是 RequireJS 出现的原因,以下两篇文章非常非常非常推荐。

  1. - https://www.cnblogs.com/jiasm/p/7683930.html (script标签中的 defer 和 async)
  2. - https://www.cnblogs.com/linxuehan/p/4180285.html (HTML5中 async 和 defer 的区别)

第三章A

  • 关于标识符,第一个字符必须是

    • 一个字母
    • 下划线_
    • 一个美元符号$ ------------这一点也许相对特殊
  • ECMASCRIPT的变量是松散类型的

    换句话说,每个变量仅仅是一个用于保存的占位符而已,它不像C++,每一个值有确定的类型

  • 用var操作符定义的变量将会成为定义该作用域中的局部变量

    1. function test() {
    2. var a = 1;
    3. alert(a);
    4. }
    5. test(); //输出1
    6. alert(a); //错误!!!!!
    7. function test2() {
    8. a = 1;
    9. alert(a);
    10. }
    11. test(); //输出1
    12. alert(a); //输出1

    上面若是不用var定义,则创建了一个全局变量a。虽然省略var操作符可以定义全局变量,但不推荐这样的做法

  • 在严格模式下,不能定义eval或者arguments的变量,否则会导致语法错误

  • 数据类型:有5种简单数据类型(基本数据类型)

    • Undefined(表示该值未定义)
    • Null
    • Boolean
    • String
    • Number
    • 还有1种复杂数据类型: Object
    • ES6后新增了 Symbol 类型

第三章B

  • 关于 typeof 的返回值(注意其格式可以为typeof variable也可以为 typeof(varaibale),返回的是字符串

    • "undefined"----如果这个值未定义
    • "boolean"----如果这个值是bool值
    • "string"----如果这个值是字符串
    • "number"----如果这个值是数字
    • "object"----如果这个值是对象或者null(特殊值null被认为是一个空的对象引用)
    • "function"----如果这个值是函数
  • 关于undefined

    1. var message; //声明之后未赋值,默认获得undefined
    2. //age变量在程序中并没有得到声明
    3. alert(message); //"undefined"
    4. alert(age); //程序出错
    5. alert(typeof message); //"undefined"
    6. alert(typeof age); //"undefined"
  • 关于null类型

    • var car = null; alert(typeof car); //"object"
    • 实际上,undefined的值派生于null,因此 alert(null==undefined); //true
  • 关于Boolean

    • 要将一个数值转换为对应的Boolean值,可以调用转型函数Boolean().返回值是true还是false,取决于要转化值的数据类型及其实际值。具体如下表:

      数据类型 转换为true的值 转换为false的值
      boolean true false
      String 任何非空字符 ""(空字符)
      Number 任何非零字符(无穷大也是) 0和NaN
      Object 任何对象 null
      Undefined 不适用 undefined
  • 关于Number

    1. var test = 070; //八进制的56
    2. var test = 079; //无效的八进制,会被解析为79
    3. var test = 08; //无效的八进制,会被解析为8
    • 十六进制前跟0x,后面跟0-9和a-f(大小写均可)
    • 在算数计算中,八进制和十六进制表示的数值最终都会被转换成十进制。
    • 关于浮点数
      • 0.1+0.2最终结果不会等于0.3(这是基于IEEE754的通病)
    • NaN与任何值都不相等,甚至是NaN本身
    • 一些重要的相关函数介绍
      • 我们常用的是parseInt()

        Number()转换字符串比较复杂且有些不合理,所以我们用parseInt().

        其工作原理是:

        • 如果第一个字符不是数字或者负号就结束。
        • 找到最后一个不是字符的字符,然后结束.

        这是一个很常用的函数,因为前端常常会出于需要把offsetWidth,clientWidth之类的字符转化为数字。另外,实际上parseInt()这个函数有两个参数。

        1. var num1 = parseInt("10", 2); //2
        2. var num2 = parseInt("10", 8): //8
        3. var num3 = parseInt("10", 10); //10
        4. var num4 = parseInt("10", 16); //16
      • 顺带提一句 parseFloat

        • 如果第一个字符不是数字或者负号就结束
        • 解析到末尾,或者无效字符。第一个小数点有效,第二个小数点是无效的
        1. parseFloat('3.3.3'); // 3.3
  • 关于String类型

    • ECMASCRIPT中的字符串是不可变的。

      字符一旦创建,它们就不可改变。所以要改变一个字符串,就要先销毁原来的字符串,然后再创建。特殊值null被认为是一个空的对象引用

      1. var lang = "Java";
      2. lang = lang + "Script";
      3. // 它的实现过程是:
      4. // 1.创建一个能容纳十个字符串的新字符串
      5. // 2.然后将"Java"和"Script"填充进字符串中
      6. // 3.最后销毁原来的字符串"Java"和"Script"
      7. // (这是旧版的浏览器中拼接字符串很慢的原因
  • Object类型,包括

    • constructor:保存着创建当前对象的函数。
    • hasOwnProperty(propertyName):用于检查给定的属性是否在当前对象存在。

      而不是在实例的原型中,如下例中 toString 来自 Object 的原型中

      1. var o = new Object();
      2. o.prop = 'exist';
      3. console.log(o.hasOwnProperty('prop')); // true
      4. console.log(o.hasOwnProperty('toString')); // false

      常用于过滤掉非自身的元素

      1. var obj = {
      2. name:"AAA",
      3. age:18,
      4. sex:"male",
      5. __proto__:{Lastname:"Pan"}
      6. };
      7. for(var key in obj) {
      8. // 只打印来自自身的
      9. if(obj.hasOwnProperty(key)){
      10. console.log(obj[key]); // result: AAA, 18, male
      11. }
      12. }
    • isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型

      功能类似于 instanceof,建议学习继承后再深究。

    • propertyIsEnumerable(propertyName): 用于检查给定的属性是否能够使用for-in来枚举.
    • toLocalString:返回对象的字符串表示,与执行地区对应
    • toString:返回字符串表示
    • valueOf:返回对象的字符串、数值或者布尔值表示

complete

JavaScript高级程序设计第三版-读书笔记(1-3章)的更多相关文章

  1. JavaScript高级程序设计第三版学习笔记(一)之数据类型区分详谈

    null.NaN.undefined三者的区别是什么? 在初次接触到JavaScript的时候,傻傻的分不清null.NaN.undefined三者到底区别何在,在实际的项目开发中也因为这个问题而困惑 ...

  2. JavaScript高级程序设计第三版.CHM【带实例】

    从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...

  3. Javascript高级程序设计第三版-笔记

    1.JS数值最大值最小值: >Number.MIN_VALUE <5e-324 >Number.MAX_VALUE <1.7976931348623157e+308 判断数值是 ...

  4. javascript高级程序设计第三版书摘

    在HTML 中使用JavaScript <script>元素 在使用<script>元素嵌入 JavaScript 代码时,只须为<script>指定 type 属 ...

  5. 22.1 高级函数【JavaScript高级程序设计第三版】

    函数是JavaScript 中最有趣的部分之一.它们本质上是十分简单和过程化的,但也可以是非常复杂和动态的.一些额外的功能可以通过使用闭包来实现.此外,由于所有的函数都是对象,所以使用函数指针非常简单 ...

  6. 21.1 XMLHttpRequest 对象【JavaScript高级程序设计第三版】

    IE5 是第一款引入XHR 对象的浏览器.在IE5 中,XHR 对象是通过MSXML 库中的一个ActiveX对象实现的.因此,在IE 中可能会遇到三种不同版本的XHR 对象,即MSXML2.XMLH ...

  7. 14.5 富文本编辑【JavaScript高级程序设计第三版】

    富文本编辑,又称为WYSIWYG(What You See Is What You Get,所见即所得).在网页中编辑富文本内容,是人们对Web 应用程序最大的期待之一.虽然也没有规范,但在IE 最早 ...

  8. DOM 操作技术【JavaScript高级程序设计第三版】

    很多时候,DOM 操作都比较简明,因此用JavaScript 生成那些通常原本是用HTML 代码生成的内容并不麻烦.不过,也有一些时候,操作DOM 并不像表面上看起来那么简单.由于浏览器中充斥着隐藏的 ...

  9. 4.2 执行环境及作用域【JavaScript高级程序设计第三版】

    执行环境(execution context,为简单起见,有时也称为“环境”)是JavaScript 中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环 ...

随机推荐

  1. php断点续传

    http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html

  2. Solaris/Linux 命令手册

    无意翻到之前收藏的一个文档,共享一下. Solaris/Linux 命令手册 1. 系统 # passwd:修改口令 # exit:退出系统 2. 文件 # cp:复制文件或目录,参数:-a递归目录, ...

  3. netsh wlan start hostednetwork

    常用的无线网命令: 一.开启系统承载网络模块和新建无线网络命令: netsh wlan set hostednetwork mode=allow ssid=wifi key=12345678说明:ss ...

  4. ACM学习历程—HDU5422 Rikka with Graph(贪心)

    Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...

  5. IDEA发布运行web项目(曾经遇到的项目启动报404)

    问题: 配置: 配置 facets ,此步很重要,配置 web resource directories ,路径配错,就会报 404 ,一定要定位到项目根目录,也就是下面有整个项目源码的地方 下面是配 ...

  6. CF 293E Close Vertices——点分治

    题目:http://codeforces.com/contest/293/problem/E 仍旧是点分治.用容斥,w的限制用排序+两个指针解决, l 的限制就用树状数组.有0的话就都+1,相对大小不 ...

  7. selenium如何获取已定位元素的属性值?

    HTML源代码: <div class="res-status" data-fortune="5" data-selfsos="" d ...

  8. VisualGDB系列6:远程导入Linux项目到VS中

    根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 本文介绍如何将Linux机器上的Linu ...

  9. 6.JasperReports学习笔记6-jasperreports和ssh工程整合

    转自:http://www.blogjava.net/vjame/archive/2013/10/12/404908.html 一.导入jasperreport相关jar包,这里采用当前比较稳定的5. ...

  10. python 基础 列表 增删改查

    names = ["aaron", "alex", "james", "meihengfan"]names2 = [1, ...