JavaScript高级程序设计(第三版) 5/25
第三章
基本概念
1.任何语言的核心都必然会描述这门语言最基本的工作原理。而描述的内容通常都要涉及这门语言的语法、操作符、数据类型、内置功能等用于构建复杂解决方案的基本概念。
2.浮点数值,该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。
3.保存浮点数值需要的内存空间是保存整数值的两倍。
4.浮点数值的最高精度是17位小数。经典问题0.1 + 0.2 !== 0.3。
5. Number.MIN_VALUE, 5e-324. Number.MAX_VALUE,1.7976931348623157e+308. 超过被自动转换成Infinity(正无穷),或者-Infinity(负无穷)。
6.isFinite()判断是否有穷
7.任何数除以0会返回NaN,(实际只有0/0是NaN,正数/0是正无穷,负数/0是负无穷)
Object类型
8.Object类型是所有它的实例的基础。Object的每个实例都具有下列属性和方法。
construtor:保存着用于创建当前的对象的函数。
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。
isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句
toLocaleString():返回对象的字符串表示。(需要打印不然没输出)
toString():返回对象的字符串表示。
valueOf:返回对象的字符串,数值,布尔值的表示。
第四章
变量、作用域和内存问题
1.只能给引用类型动态的添加属性。
2.值传递 引用传递,基本类型是值传递,引用类型,因为复制的至少一个指针,指针指向存储在堆中的一个对象,所以堆中的对象改变都变。基本类型存储在栈内存中。
3.
function setName(obj) {
obj.name = "Nicholas";
obj = new Object();
obj.name = "Greg"
}
var person = new Object();
setName(person);
alert(person.name);
结果alert的是“Nicholas”,实际上,在函数内部重写obj的时候,这个变量引用就是一个局部对象了,而这个局部对象会在函数执行完毕后立即被销毁。
4. result = variable instanceof constructor
5.全局执行环境被认为是window对象(),全局执行环境直到应用程序退出,例如关闭网页或浏览器,时才会被销毁。
6.JavaScript具有自动垃圾收集机制,原理:找出那些不再继续使用的变量,然后释放其占用的内存。为此,垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间),周期性地执行这一操作。
7.JavaScirpt中最常用的垃圾收集方式是标记清除(mark-and-sweep),垃圾收集器在运行时会给存储在内存中的所有变量都加上标记,然后,它会去掉环境中的变量以及被环境中的变量引用的变量的标记。而在此之后再被加上标记的变量被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。最后,垃圾收集器完成内存清除工作,销毁那些带标记的值并回收他们所占用的内存空间。
8.另外一种不太常用的垃圾收集策略叫做引用计数(reference counting),变量赋值给另一个变量,引用次数加1,如果是取得另一个值,那么引用次数减1,当这个值的引用次数为0时,则说明无法再访问这个值,因而可以将其占用的内存空间回收回来。
引用计数的问题,循环引用:对象A包含了指向B的指针,B包含了指向A的指针。
function problem(){
var objectA = new Object();
var objectB = new Object();
objectA.someOhterObject = objectB;
objectB.anohterObject = objectA;
};
problem();
引用次数永远不为0.
9.一旦数据不再有用,最好通过将其值设为null来释放引用——这个做法叫做解除引用(dereferencing)。这一做法适用于大多数全局变量和全局对象的属性。局部变量会在它们离开执行环境时自动被解除引用。
10.解除一个值的引用并不意味着自动回收该值所占用的内存。解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其回收。
第五章
引用类型
1.引用类型是一种数据结构,用于将数据和功能组织在一起。它也常被称为类。
2.Object类型的创建方法,第一种使用new操作符后跟Object构造函数 var person = new Object(); 第二种对象字面量表示法 var person = { name: ''fa"};
3.访问对象的属性时可以用方括号,比如alert(person["name"];等价于alert(person.name);
如果属性名中包含会导致语法错误的字符,或者属性名使用的是关键字或保留字,也可以用方括号表示法。比如person["first name"]="Nicholas";有空格,.不能访问
通常,除非必须使用变量来访问属性,否则建议用点表示法
4.数组也是有上限的,最多4294967295个项
5.instanceof操作符的问题在于,它假定只有一个全局执行环境。
为了解决这个问题ES5新增了Array.isArray()
6.日期,正则表达式
7.Function,没有重载,后面覆盖前面
8.解析器会优先解析函数声明,再解析函数表达式。
9.函数有两个特殊的对象:arguments和this,
递归算法,因为函数体内会调用自身函数,紧密耦合了,所以最好用arguments.callee替代。
10.基本包装类型:Boolean,Number,String。
访问字符串时候的步骤,
var s1 = "some text"
var s2 = s1.substring(2); //可以看成
var s1 = new String("some text");
var s2 = s1.substring(2);
s1 = null;
(1)创建String类型的一个实例 (2)在实例上调用指定的方法 (3)销毁这个实例。
11.引用类型和基本包装类型的主要区别是对象的生存期,new操作符创建的引用实例在执行流离开当前作用域之前一直保存在内存中。而自动创建的基本包装类型的对象,只存在代码的执行瞬间,然后立即销毁,意味着不能添加属性方法。
JavaScript高级程序设计(第三版) 5/25的更多相关文章
- JavaScript高级程序设计第三版.CHM【带实例】
从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...
- javascript高级程序设计第三版书摘
在HTML 中使用JavaScript <script>元素 在使用<script>元素嵌入 JavaScript 代码时,只须为<script>指定 type 属 ...
- 22.1 高级函数【JavaScript高级程序设计第三版】
函数是JavaScript 中最有趣的部分之一.它们本质上是十分简单和过程化的,但也可以是非常复杂和动态的.一些额外的功能可以通过使用闭包来实现.此外,由于所有的函数都是对象,所以使用函数指针非常简单 ...
- DOM 操作技术【JavaScript高级程序设计第三版】
很多时候,DOM 操作都比较简明,因此用JavaScript 生成那些通常原本是用HTML 代码生成的内容并不麻烦.不过,也有一些时候,操作DOM 并不像表面上看起来那么简单.由于浏览器中充斥着隐藏的 ...
- 21.1 XMLHttpRequest 对象【JavaScript高级程序设计第三版】
IE5 是第一款引入XHR 对象的浏览器.在IE5 中,XHR 对象是通过MSXML 库中的一个ActiveX对象实现的.因此,在IE 中可能会遇到三种不同版本的XHR 对象,即MSXML2.XMLH ...
- JavaScript高级程序设计第三版-读书笔记(1-3章)
这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript 提供核心语言功能 DOM 提供访问 ...
- 14.5 富文本编辑【JavaScript高级程序设计第三版】
富文本编辑,又称为WYSIWYG(What You See Is What You Get,所见即所得).在网页中编辑富文本内容,是人们对Web 应用程序最大的期待之一.虽然也没有规范,但在IE 最早 ...
- JavaScript高级程序设计第三版学习笔记(一)之数据类型区分详谈
null.NaN.undefined三者的区别是什么? 在初次接触到JavaScript的时候,傻傻的分不清null.NaN.undefined三者到底区别何在,在实际的项目开发中也因为这个问题而困惑 ...
- 4.2 执行环境及作用域【JavaScript高级程序设计第三版】
执行环境(execution context,为简单起见,有时也称为“环境”)是JavaScript 中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环 ...
- 13.4.3 鼠标与滚轮事件【JavaScript高级程序设计第三版】
鼠标事件是Web 开发中最常用的一类事件,毕竟鼠标还是最主要的定位设备.DOM3 级事件中定义了9 个鼠标事件,简介如下. click:在用户单击主鼠标按钮(一般是左边的按钮)或者按下回车键时触发.这 ...
随机推荐
- 什么才是市场急需的前端工程师?要价1.8W,HR不敢还嘴!
据统计,国外的前端开发人员和后端开发人员比例约1:1,但是在国内比例却在1:3以下, Web前端开发职位人才缺口巨大.前端工程师的发展之路十分有“钱”景. 每天,HR 群都有人在吐槽招不到前端工程师. ...
- 探讨NET Core数据进行3DES加密或解密弱密钥问题
前言 之前写过一篇<探讨.NET Core数据进行3DES加密和解密问题>,最近看到有人提出弱密钥问题,换个强密钥不就完了吗,猜测可能是与第三方对接导致很无奈不能更换密钥,所以产生本文解决 ...
- 每日一题 - 剑指 Offer 49. 丑数
题目信息 时间: 2019-07-03 题目链接:Leetcode tag:动态规划 小根堆 难易程度:中等 题目描述: 我们把只包含质因子 2.3 和 5 的数称作丑数(Ugly Number).求 ...
- h5移动端实现图片文件上传
PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现. JS代码 ...
- centos7安装Mysql爬坑记录
centos7安装Mysql爬坑记录 查看是否已安装 使用下列命令查看是否已经安装过mysql/mariadb/PostgreSQL 如果未安装,不返回任何结果(ECS的centos镜像默认未安装 ...
- Spark 两种方法计算分组取Top N
Spark 分组取Top N运算 大数据处理中,对数据分组后,取TopN是非常常见的运算. 下面我们以一个例子来展示spark如何进行分组取Top的运算. 1.RDD方法分组取TopN from py ...
- CF833A The Meaningless Game 题解
题目 Slastyona and her loyal dog Pushok are playing a meaningless game that is indeed very interesting ...
- 关于flask(前后端分离)的后端开发的小白笔记整理(含postman,jwt,json,SQLAlchemy等)
首先是提醒自己的一些唠嗑: 学会劳逸结合,文档看累了可以看视频,动手操作很关键,遇到问题先动脑子冷静地想,不要跟着步骤都不带脑子,想不出来了再查一查!有时候打出来的代码很虚,但是实践不花钱,实践出真知 ...
- python 面向对象专题(八):特殊方法 (一)__get__、__set__、__delete__ 描述符(一)
https://www.cnblogs.com/flashBoxer/p/9771797.html 实现了 __get__.__set__ 或 __delete__ 方法的类是描述符.描述符的用法是, ...
- HotSpot的对象模型(6)
接着上一篇,我们继续来讲oopDesc相关的子类. 3.instanceOopDesc类 instanceOopDesc类的实例表示除数组对象外的其它对象.在HotSpot中,对象在内存中存储的布局可 ...