学习笔记:《JavaScript高级程序设计》
第1章 JavaScript简介
1.一个完整的JavaScript实现应该由三部分组成:核心(ECMAScript),文档对象模型(DOM)和浏览器对象模型(BOM)。
2.Web浏览器只是ECMAScript实现可能的宿主环境之一。宿主环境不仅提供基本的ECMAScript实现,同时也会提供该语言的扩展,以便语言与环境之间对接交互。而这些扩展——如DOM,则利用ECMAScript的核心类型和语法提供更多更具体的功能,以便实现针对环境的操作。其他宿主环境包括Node(一种服务端JavaScript平台)。
3.DOM也是应用编程接口(API)。
第2章 在HTML中使用JavaScript
1.带有src属性的<script>元素不应该在其<script>和</script>标签之间再包含额外的JavaScript代码。
第3章 基本概念
1.如果在函数中使用var定义一个变量,那么这个变量在函数推出后就会被销毁。
2.虽然省略var操作符可以定义全局变量,但这不是我们推荐的做法。
3.ECMAScript中有5种简单数据类型(也成为基本数据类型):Undefined、Null、Boolean、Number和String。还有1种复杂数据类型——Object,Object本质上是由一组无序的名值对组成的。Object类型不等于对象。ECMAScript种对象其实就是一组数据和功能的集合。
4.包含undefined值的变量与尚未定义的变量还是不一样的。对于后者,只能执行一项操作,即用typeof操作符检测其数据类型。
5.只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。
6.永远不要测试某个特定的浮点数值(即像这样:a + b === 0.3)。
7.parseInt():不指定基数意味着让parseInt()决定如何解析输入的字符串,因此为了避免错误的解析,我们建议无论在什么情况下都明确指定基数。
8.按位非操作的本质:操作数的负值减1。虽荣用一元减操作符和加法操作符也能实现同样的效果,但由于按位非是在数值表示的最底层执行操作,因此速度更快。
9.我们可以利用逻辑或的短路行为来为变量赋值提供后备值,以避免为变量赋null或undefined值。
10.忽视加法操作中的数据类型是ECMAScript编程中最常见的一个错误(比如用字符串和数值相加,数值会先被转换成字符串)。
11.如有有一个操作数是NaN,则相等操作符返回false。即使两个操作数都是NaN,相等操作符也返回false;因为按照规则,NaN不等于NaN。
12.由于相等和不相等操作符存在类型转换问题,而为了保持代码中数据类型的完整性,我们推荐使用全等和不全等操作符。
13.我们建议如果使用label语句,一定要使用描述性的标签,同时不要嵌套过多的循环。
14.在函数体内可以通过arguments对象来访问参数数组,从而获取传递给函数的每一个参数。
15.ECMAScript函数有一个重要特点:命名的参数只提供便利,但不是必需的。
16.通过访问arguments对象的length属性可以获知有多少个参数传递给了函数。开发人员可以利用这一点让函数能够接收任意个参数并分别实现适当的功能。虽然这个特性算不上完美的重载,但也足够弥补ECMAScript的这一缺憾了。
17.函数:没有传递值的命名参数将自动被赋予undefined值。这就跟定义了变量但又没有初始化一样。
18.ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数。
第4章 变量、作用域和内存问题
1.当从一个变量向另一个变量复制引用类型的值时,和复制基本类型的值一样,也会将存储在变量对象中的值复制一份放到为新变量分配的空间中。不同的是,这个值的副本实际上是一个指针,两个变量实际上将引用同一个对象。即基本类型的值是按值按值访问的,引用类型的值是按引用访问的。
2.ECMAScript中所有函数的参数都是按值传递的。
3.执行环境(execution context,有时也称为“环境”或“作用域”)是JavaScript中最为重要的一个概念。执行环境的类型总共只有两种——全局和局部(函数)。
4.JavaScript没有块级作用域。在其他类C的语言中,由花括号封闭的代码块都有自己的作用域(用ECMAScript的话来讲,就是它们自己的执行环境)。
5.确保占用最少的内存可以让页面获得更好的性能。而优化内存占用的最佳方式,就是为执行中的代码只保存必要的数据。一旦数据不再有用,最好通过将其值设置为null来释放其引用——这个做法叫做接触引用(dereferencing)。这一做法适用于大多数全局变量和全局对象的属性。局部变量会在它们离开执行环境时自动被解除引用。
第5章 引用类型
1.引用类型的值(对象)是引用类型的一个实例。在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起。它也常被称为类,但这种称呼并不妥当。
2.对象字面量是向函数传递大量可选参数的首选方式。一般来讲,命名参数虽然容易处理,但在有多个可选参数的情况下就会显得不够灵活。最好的做法是对那些必需值使用命名参数,而使用对象字面量来封装多个可选参数。
3.通常,除非必须使用变量来访问对象的属性,否则我们建议使用点表示法而不是方括号表示法。
4.使用不带圆括号的函数名是访问函数指针,而非调用函数。
5.this引用的是函数执行的环境对象。在调用函数之前,this的值并不确定。
6.一定要牢记,函数的名字仅仅是一个包含指针的变量而已。
7.对于ECMAScript中的引用类型而言,prototype属性是保存它们所有实例方法的真正所在。换句话说,注入toString()和valueOf()等方法实际上都保存在prototype名下,只不过是通过各自对象的实例访问罢了。
8.每个函数继承的toLocaleString()和toString()方法始终都返回函数的代码(在调试代码时很有用)。
9.基本类型值不是对象(引用类型值才是),因而从逻辑上讲它们不应该有方法,但从表面上看它们确实有方法。实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型(特殊的引用类型,包括Boolean、Number和String),从而让我们能够调用一些方法来操作这些数据。
10.静态方法:只能被构造函数本身调用,而不能被实例调用。实例方法反之。
11.Global(全局)对象可以说是ECMAScript中最特别的一个对象了,因为不管你从什么角度上看,这个对象都是不存在的。ECMAScript中的Global对象在某种意义上是作为一个终极的“兜底儿对象”来定义的。换句话说,不属于任何其他对象的属性和方法,最终都是它的属性和方法。事实上,没有全局变量或全局函数;所有在全局作用域中定义的属性和函数,都是Global对象的属性。ECMAScript虽然没有指出如何直接访问Global对象,但Web浏览器都是将这个全局对象作为window对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,就都成为了window对象的属性和方法。JavaScript中的window对象除了扮演ECMAScript规定的Global对象的角色外,还承担了很多别的任务。以下代码是取得Global对象的另一种方法(末尾有一对括号表示是一个立即调用的函数表达式)。
var global = function() {
return this;
} ();
12.Math.random()方法返回大于等于0小于1的一个随机数。套用下面的公式,就可以利用Math.random()从某个整数范围内随机选择一个值。
值 = Math.floor(Math.random() * 可能的值的总数 + 第一个可能的值)
13.函数实际上是对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上是一个指向函数对象的指针。
14.函数通常是使用函数声明语法定义的,这与使用函数表达式定义函数的方式相差无几,最后一种定义函数的方式是使用Function构造函数(从技术的角度讲,这也是函数表达式)。
学习笔记:《JavaScript高级程序设计》的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
随机推荐
- 进程中t.start(), t.daemon() t.jion()的使用
#!/usr/bin/env python import multiprocessing import time def f1(a1): time.sleep(2) print(a1) if __na ...
- BKMyFAQ
邮箱配置如图 发送格式: { "bk_app_code": "bk_monitor", #该字段可以查看文件:/data/install/.app.token ...
- Spark SQL 读到的记录数与 hive 读到的不一致
问题:我用 sqoop 把 Mysql 中的数据导入到 hive,使用了--delete-target-dir --hive-import --hive-overwrite 等参数,执行了两次. my ...
- 解读人:朱月琴,Hippocampal proteomic alteration in triple transgenic mouse model of Alzheimer’s disease and implication of PINK 1 regulation in donepezil treatment
文章中文名:阿尔茨海默病三联转基因小鼠模型的海马蛋白质组学改变及Donepezil治疗中PINK 1调节的意义 发表时间:(2019年4月) IF:3.95 单位:澳门大学,威斯康星大学,暨南大学,广 ...
- IT兄弟连 JavaWeb教程 jQuery对AJAX的支持经典面试题
1.简述对Ajax的理解 AJAX是Asynchronous JavaScript and Xml异步的JavaScript和Xml.它一种用来改善用户体验的技术其实质是使用XMLHttpReques ...
- phonegap for andriod之phonegap 环境的搭建
1.环境搭建 1.1安卓的环境搭建 可以参考http://www.cnblogs.com/xuzhiwei/p/3277529.html 1.2PhoneGap下载 我这里下载2.90版本 http: ...
- 说一说solr在tomcat,jetty上的运行和安装优缺点
本文是我从别的文章中组合而成的,结合自己实际操作进行了修改. Solr是什么 Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lu ...
- 背包DP【bzoj2287】: 【POJ Challenge】消失之物
2287: [POJ Challenge]消失之物 Description ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN. 由于她的疏忽, 第 i 个物品丢失了. &q ...
- [USACO08JAN]跑步Running dp
题目描述 The cows are trying to become better athletes, so Bessie is running on a track for exactly N (1 ...
- JS如何在本地读取json等文件
JS使用ajax等在本地读取文件的时候,会报如下的错误: 解决方法一: npm install http-server -g 全局安装 http-server 下载完成之后再在目标文件中cmd中输入 ...