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

第一章

JavaScript主要由以下三个不同的部分构成
  • ECMAScript   提供核心语言功能
  • DOM     提供访问和操作网页内容的方法和接口
  • BOM     浏览器对象模型,提供浏览器交互的方法和接口

第二章

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

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

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

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

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

  • 嵌入代码与外部文件

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

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

    当浏览器没有解析到 defer 和 async 时,浏览器会立即 下载并且执行 指定的脚本。
    “立即”指在渲染该script标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行。

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

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

第三章A

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

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

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

  • 用var操作符定义的变量将会成为定义该作用域中的局部变量
    function test() { var a = 1; alert(a); } test(); //输出1 alert(a); //错误!!!!! function test2() { a = 1; alert(a); } test(); //输出1 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
    var message; //声明之后未赋值,默认获得undefined //age变量在程序中并没有得到声明 alert(message); //"undefined" alert(age); //程序出错 alert(typeof message); //"undefined" 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
    var test = 070; //八进制的56 var test = 079; //无效的八进制,会被解析为79 var test = 08; //无效的八进制,会被解析为8

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

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

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

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

          var num1 = parseInt("10", 2); //2
          var num2 = parseInt("10", 8): //8
          var num3 = parseInt("10", 10); //10
          var num4 = parseInt("10", 16); //16
      • 顺带提一句 parseFloat
        • 如果第一个字符不是数字或者负号就结束
        • 解析到末尾,或者无效字符。第一个小数点有效,第二个小数点是无效的
        parseFloat('3.3.3'); // 3.3
  • 关于String类型
    • ECMASCRIPT中的字符串是不可变的。

      字符一旦创建,它们就不可改变。所以要改变一个字符串,就要先销毁原来的字符串,然后再创建。特殊值null被认为是一个空的对象引用
      var lang = "Java"; lang = lang + "Script"; // 它的实现过程是: // 1.创建一个能容纳十个字符串的新字符串 // 2.然后将"Java"和"Script"填充进字符串中 // 3.最后销毁原来的字符串"Java"和"Script" // (这是旧版的浏览器中拼接字符串很慢的原因

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

      而不是在实例的原型中,如下例中 toString 来自 Object 的原型中
      var o = new Object(); o.prop = 'exist'; console.log(o.hasOwnProperty('prop')); // true console.log(o.hasOwnProperty('toString')); // false
      常用于过滤掉非自身的元素
      var obj = { name:"AAA", age:18, sex:"male", __proto__:{Lastname:"Pan"} }; for(var key in obj) { // 只打印来自自身的 if(obj.hasOwnProperty(key)){ console.log(obj[key]); // result: AAA, 18, male } }

    • 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. 22.1 高级函数【JavaScript高级程序设计第三版】

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

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

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

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

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

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

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

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

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

  9. 13.4.3 鼠标与滚轮事件【JavaScript高级程序设计第三版】

    鼠标事件是Web 开发中最常用的一类事件,毕竟鼠标还是最主要的定位设备.DOM3 级事件中定义了9 个鼠标事件,简介如下. click:在用户单击主鼠标按钮(一般是左边的按钮)或者按下回车键时触发.这 ...

随机推荐

  1. JDK和环境配置

    1. JASE : J2SE 这个就是我们现在在学的东西,他是一切Java的核心基础 JAME :J2ME : 他是Java的一个微型版,主要用来做移动开发 JAEE :J2EE Java企业版本,主 ...

  2. php实现SESSION跨域

    稍微大一点的网站,通常都会有不只一个服务器,每个服务器运行着不同的功能模块或者不同的子系统,他们使用不同的二级域名,比如www.a.com.i.a.com.bbs.a.com.而一个整体性强的网站,用 ...

  3. javascript 布尔类型值判断

    javascript中,值非null的对象在if()中都会被判断为true: if([]) {// true} if({}) {// true} if(null) {// false} if(&quo ...

  4. HTML5 canvas绘制雪花飘落动画(需求分析、知识点、程序编写分布详解)

    看到网上很多展示html5雪花飞动的效果,确实非常引人入胜,我相信大家也跟我一样看着心动的同时,也很好奇,想研究下代码如何实现:虽然哦很多地方也能下载这些源码,不过也不知道别人制作此类动画时的思路及难 ...

  5. 一封推荐信——android培训机构

    我,男,23岁,即将毕业的大四学生,就读于天津一所二本院校,计算机科学与技术专业.大一期间,进入新校园,和同学到各个宿舍推销陶瓷杯,国美电器饮水机促销员,组团蹬车游市区,不断地去探索.尝试,追求内心向 ...

  6. &lt;poj - 2139&gt; Six Degrees of Cowvin Bacon 最短路径问题 the cow have been making movies

    本题链接:http://poj.org/problem?id=2139 Description:     The cows have been making movies lately, so the ...

  7. python时间模块datetime

    datetime模块 datetime在python中比较常用,主要用来处理时间日期,使用前先倒入datetime模块.下面总结下本人想到的几个常用功能. 1.当前时间(日期.小时.字符串时....) ...

  8. window安装ab压力测试并使用

    ab是Apache HTTP server benchmarking tool的缩写,可以用以测试HTTP请求的服务器性能,也是业界比较流行和简单易用的一种压力测试工具包 1.下载ab工具 进入apa ...

  9. ios 在使用 SDWebimage UIButton setBackgroundimage

    解决方法 : 有法为此在 SDWebImage: SDWebImage / SDWebImage / UIButton+WebCache.h 导入此文件在您的类: #import <SDWebI ...

  10. SP5973 SELTEAM - Selecting Teams

    SP5973 SELTEAM - Selecting Teams [题目描述] 他已经有 n 个心仪的妹子了,但随着时间的流逝,只有 m(1<=m<=k)个直伴随在他的身边,而小小迪发现他 ...