前言:
大致花费了一个星期的时间把这本书认真看了半本,下面是我做的阅读笔记,希望能够让看这本书的人有个大致的参考。目前可能写得较乱不够全面,后续我会整理添加。(2017-7-17)
第一章 JavaScript简介
第二章 HTML中使用JavaScript
第三章 基本概念
3.1.语法
区分大小写
标识符(建议用驼峰大小写myCar)
注释// /**/
严格模式(use strict)
语句 建议var diff-a-b;要用分号,以及 if( test ) { alert(test); }一句话也要用{}
3.2 关键字和保留字
3.3 变量
未初始化undefined var message = “hi”; message = 100; 类型随便换
Function test(){ Var a = “hi”; 局部 b = “hi”; 全局 }
Test(); alert(a); 错误 alert(b); hi
3.4 数据类型
typeof
Undefined (定义但未被赋值)
Null(空对象指针)
Boolean(布尔值 true false 流程控制语句会自动执行相应boolean转换)
Number
(八进制 0 十进制 十六进制 0x 浮点数值 数值范围 NaN 数值转换Number parseInt )
String(字符串,单双引号没区别,转义序列,字符串特点,toString String)
Object(对象 所有对象的基础 var o = new Object();)
函数在ES中是对象,不是一种数据类型。
3.5操作符
一元操作符 ++ -- 、+ -(可用于转换数据类型)
位操作符 按位非~num1 按位与& 按位或| 按位异或^ 左移<< 右移>> 无符号右移>>
布尔操作符 ! && || 乘性操作符 * / % 加性操作符 + - 关系操作符 < > <= >=
相等操作符 == != === !== 条件操作符 ?:
赋值操作符 = *= /= %= += -= <<= >>= >>>=
逗号操作符
3.6 语句
3.7 函数
arguments 没有重载
第四章 变量、作用域和内存问题
4.1 基本类型和引用类型的值
动态的属性 (引用类型能动态地添加属性)
复制变量值 (基本类型是不同的空间,引用类型是引用相同的空间)
传递参数 (一样)
检测类型 (typeof instanceof)
4.2执行环境及作用域
作用域链 延长作用域链(try-catch with) 没有块级作用域(if for 声明变量 查询标识符)
4.3垃圾收集
策略(标记清除 引用计数) 性能问题 管理内存
第五章 引用类型
5.1 Object类型
Var person = {};(适合给函数传入大量参数) var parson = new Object();
Person[“name”](使用变量来代表属性时用) person.name(推荐)
5.2 Array类型
Var colors = new Array(); var colors = Array(); var colors =[*****];
Colors[*] = *****; colors.length
检测数组: instanceof Array.isArray()
转换方法: toString() valueOf() toLocaleString() join()
栈方法: push() pop()
队列方法: shift() unshift()
重排序方法: reverse() sort(可加入比较函数这个参数)
操作方法:concat()原没变 添加 slice()原没变 截取段 splice()原变了 可删可添
位置方法: indexOf() lastIndexOf() 返回项的位置
迭代方法:every() filter() forEach() map() some() 对每个项都进行处理,但原数组不会变
并归方法:reduce()顺序 reduceRight()反序 对两项一直遍历到最后
5.3 Date类型
New Date() 里面parse(“May 25,2004”) UTC(2005,0) Date.now()
继承的方法:toLocaleString() toString() valueOf()
日期格式化方法:toDateString() toTimeString() toLocaleDateString() toLocaleTimeString() toUTCString()
日期/时间组件方法:太多具体看书
5.4RegExp类型
字面量 var pattern1 = / [bc]at / i;
构造函数 var pattern2 = new RegExp(“ [bc]at ”, ” i ”);
RegExp实例属性 global ignoreCase lastIndex multiline source 没什么卵用
RegExp实例方法:exec() 捕获组(捕获多组匹配项) text() 一次看是否匹配
RegExp构造函数属性:有点多,用来看最近一次匹配的相关信息
模式的局限性:缺少某些语言(Perl)所支持的高级正则表达式特性,但是绝大多数情况够用
5.5 Function类型 函数是对象(也是Function的实例),函数名是指针。
function sum(num1,num2) { }
Var sum = function(num1,num2){ };
没有重载:函数是对象,函数名是指针。
函数声明与函数表达式:function ******* 函数声明提升 var sum = ******* 不会提升
函数内部属性:arguments对象(属性callee指向函数) this对象(指向函数执行的环境对象) 属性caller (指向调用当前函数的函数,如果是全局作用域的函数则值为null)
函数属性和方法:
属性(length声明参数个数 prototype继承)
非继承方法: call() apply() bind()
a.apply( b, c); a.call( b, d );
在环境对象b里运行函数a ,顺便给a传入参数c( argument或者 数组) / d( 每项写 出来 )
Var a = b.bind(c);
a 是在c环境对象里运行的函数
5.6基本包装类型:
Boolean类型:var booleanObject = new Boolean(true); 建议永远不要使用Boolean对象。
Number类型:var numberObject = new Number(10); toFixed() toExponential() toPrecision()
也建议不要直接实例化Number类型。
String 类型:var stringObject = new String(“hello world”); length属性
1.字符方法:charAt()或者string[] 返回对应字符 charCodeAt() 返回对应字符编码
2.字符串操作方法:
concat() 或者 +操作符 和数组的concat()看起来一样
Slice() substring() substr() 截取字符串,三个很灵活
3.字符串位置方法:indexOf() lastIndexOf()
4.trim()方法 删除前置及后缀的所有空格 trimLeft() trimRight()
5.字符串大小写转换方法
toLowerCase() toUpperCase() 经典方法
toLocaleLowerCase() toLocaleUpperCase() 特定地区 这种更加稳妥
6.字符串的模式匹配方法
match() 和RegExp的exec()本质一样 返回匹配到字符串的数组
search() 返回第一个匹配项的索引 否则返回-1
replase() 匹配且替换字符串
split() 匹配分隔符生成数组
7.localeCompare() 比较两个字符串
8.fromCharCode() 静态方法 将多个字符编码变成字符串
9.HTML方法 比如big() string
5.7 单体内置对象
1.Global对象
URL编码方法:
encodeURI() 整个 encodeURIComponent() 某一段 编码
decodeURI() 整个 decodeURIComponent() 某一段 解码
eval()方法 非常强大 也非常危险 ECMAScript解析器
Global对象的属性 undefined、Array.........都是属性
Web浏览器是将全局对象作为window对象的一部分加以实现的
2.Math对象
Math对象的属性 一些特殊值比如π
min() max() 方法
舍入方法:小数值变整数
Math.ceil(25) 进一 Math.floor(25) 退一 Math.round(25) 四舍五入
random()方法 [0,1) 之间的随机数
其它方法 太多看书
第六章 面向对象的程序设计
6.1理解对象
6.1.1属性类型:
数据属性:4个特性
访问器属性:不包含数据值 4个特性 通过Object.defineProperty()定义
6.1.2定义多个属性: Object.defineProperties() 可以是数据属性,也可以是访问器属性。
6.1.3读取属性的特性:Object.getOwnPropertyDescriptor()
6.2创建对象
6.2.1工厂模式(看书)
6.2.2构造函数模式(看书 new constructor )
6.2.3原型模式:
1.理解原型对象
2.原型与in操作符( in for-in )
3.更简单的原型语法( 对象字面量来访问对象 )
4.原型的动态性( 原型可以换成另外一个对象,但对已经创建的实例无效了 )
5.原生对象的原型( 就是用原型模式,可以定义新方法在里面,但是不推荐)
6.原型对象的问题:没有属于实例自己的属性
6.2.4组合使用构造函数模式和原型模式
最常见的模式,实例有自己的属性和方法,也有共享的。
6.2.5动态原型模式
在上面的模式再加一个判断语句,来动态在原型中加入方法。
6.2.6寄生构造函数模式
和工厂模式的区别就一个new,还有它有多个return。返回的对象和构造函数没有关系,导致不能用instanceof操作符来确定对象的类型。不太建议使用。
6.2.7稳妥构造函数模式
跟寄生构造函数模式有相似处,但不用this和new。instanceof也检测不出
6.3继承
6.3.1原型链 原型搜索机制
1.别忘了默认的原型:所有函数的默认原型都是Object的实例。
2.确定原型和实例的关系:instanceof isPrototypeOf()
3.谨慎地定义方法:必须在实例替换原型之后才能定义新的方法。
4.原型链的问题:
在原型外的属性也给继承了
在创造子类型的实例时,不能向超类型的构造函数中传递参数。
很少单独使用。
6.3.2借用构造函数 利用call或apply 来继承和传递参数 但是只能使用构造函数模式。
也很少单独使用。
6.3.3组合继承
原型链实现 原型属性和方法的继承
借用构造函数实现 对实例属性的继承
最常用的继承方式
6.3.4原型式继承(看书)
没有用到构造函数 保持类型可以用用,但是会跟原型模式一样共享引用类型的属性。
6.3.5寄生式继承(看书)
不考虑构造函数 可以用用 但是不能做到函数复用
6.3.6寄生组合式继承(看书)
组合继承有问题:调用了两次超类型的构造函数,导致实例和原型中重复了属性。
寄生组合式继承解决了这个问题,成为了最理想的继承范式。
第七章 函数表达式
定义函数方式:
函数声明( 函数声明提升 有name)
函数表达式( name为空 匿名函数/命名 一般函数表达式都是匿名函数 )
7.1递归
严格模式不能用 arguments.callee 可以用命名函数表达式。
7.2闭包:有权访问另一个函数作用域中的变量的函数
自我总结:闭包是函数,一般用匿名函数
1.闭包可以访问返回外部函数中的变量。
2.另一个函数的活动对象会被保存,直到闭包的作用域链被销毁。
7.2.1闭包和变量
副作用:闭包的作用域链上保存的是整个变量对象,所以返回的变量是保存的最后一个值。
比如在for循环中,则会出现不如意的情况。
7.2.2关于this对象
闭包中的this对象,闭包可能在某些特殊情况被放到全局对象上,从而this变却不自知。
7.2.3内存泄漏
使用闭包,确保正常回收内存
7.3模仿块级作用域
用匿名自执行函数来模仿。
自我总结作用:
1.内部执行完就会摧毁。
2.匿名自执行函数可以减少污染全局方法和属性。
闭包就有一个内存的问题,用这个结合很舒适。
7.4私有变量
对象上的都是公有的 函数里面的都是私有的
通过闭包来创建函数的公有方法(特权方法) ---------用来获取私有变量
在构造函数中创建 -------- 构造函数this 浪费内存
例子:this.****** = function(){ **** };
但是每个实例化都会重新构建一组方法,浪费。
7.4.1静态私有变量 ---------原型 每个实例没有自己的私有属性
静态就用 私有作用域 通过闭包在全局的构造函数的原型里面来创建特权方法。
增进了代码的重用性,但是每个实例没有自己的私有变量。(因为这个叫静态私有变量)
使用实例变量,还是静态私有变量,看具体需求。
7.4.2模块模式 ---------return返回对象字面量 一个实例对象
为单例创建私有变量和特权方法(单例:只有一个实例的对象)
在匿名函数内部定义私有变量和方法,然后将一个对象字面量作为函数的返回值。
7.4.3增强的模块模式
必须是某种类型的实例,同时还必须添加某些属性或方法。
以上是JavaScript高级程序设计介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

Python和JavaScript的未来趋势包括:1.Python将巩固在科学计算和AI领域的地位,2.JavaScript将推动Web技术发展,3.跨平台开发将成为热门,4.性能优化将是重点。两者都将继续在各自领域扩展应用场景,并在性能上有更多突破。

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。

是的,JavaScript的引擎核心是用C语言编写的。1)C语言提供了高效性能和底层控制,适合JavaScript引擎的开发。2)以V8引擎为例,其核心用C 编写,结合了C的效率和面向对象特性。3)JavaScript引擎的工作原理包括解析、编译和执行,C语言在这些过程中发挥关键作用。

JavaScript是现代网站的核心,因为它增强了网页的交互性和动态性。1)它允许在不刷新页面的情况下改变内容,2)通过DOMAPI操作网页,3)支持复杂的交互效果如动画和拖放,4)优化性能和最佳实践提高用户体验。

C 和JavaScript通过WebAssembly实现互操作性。1)C 代码编译成WebAssembly模块,引入到JavaScript环境中,增强计算能力。2)在游戏开发中,C 处理物理引擎和图形渲染,JavaScript负责游戏逻辑和用户界面。

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3汉化版
中文版,非常好用