《Javascript权威指南-第6版》
第3章 类型、值和变量
3.2 文本
3.2.1 字符串直接量
建议:在javascript中使用单引号表示字符串,在HTML中使用双引号表示字符串;
3.2.2 转义字符
\n 换行符
\r 回车符
3.3 布尔值
undefined null 0 -0 NaN "" 会转化为false,其他值转化为true
3.6 包装对象
字符串通过new String()构造函数创建一个临时对象,这个对象继承了字符串的方法,并被用来处理属性的引用,一旦引用结束,这个对象自动销毁。
数字和布尔值也具有各自的方法 Number()  Boolean()
null和undefined没有包装对象
3.10 变量作用域
在函数体内,局部变量的优先级高于同名的全局变量
第5章 语句
严格模式和非严格模式之间的区别:
- 严格模式中禁止使用with语句
- 严格模式中所有变量要先声明,否则将会抛出一个引用错误异常
- 严格模式用调用的函数中的一个this值是undefined,在非严格模式中,this值总是全局变量。这可以用来判断是否支持严格模式var hasStrictMode = (fuction(){"use strict";return this === undefined}())
- 严格模式中,当通过call()或apply()来调用函数时,其中的this就是call()或apply()传入的第一个参数
- 严格模式中,给只读属性和给不可扩展的对象创建新成员都将抛出一个类型错误
- 严格模式中,传入eval()的代码不能再调用程序所在的上下文中声明变量或定义函数
- 严格模式中,函数里的arguments对象拥有传入函数值的静态副本,在非严格模式中,arguments里的数组元素和函数参数都指向同一个值的引用
- 严格模式中试图删除一个不可配置的属性将抛出一个类型错误
- 严格模式中,在一个对象直接量中定义两个或多个同名属性将产生一个语法错误
- 严格模式中,函数声明中存在两个或多个同名参数将产生一个语法错误
- 严格模式中,不允许使用八进制直接量
- 严格模式中,arguments,caller和arguments.callee都将抛出一个类型错误。
第6章 对象
6.1 创建对象
6.1.3 原型
object.prototype没有原型对象,它不继承任何属性,所有内置函数都继承自它
6.1.4 Object.create()
使用Object.create()创建一个新对象,其中第一个参数是这个对象的原型
var o = Object.create(null); //o是一个没有原型的对象
6.2 属性的查询和设置
当使用方括号([])运算符来获取属性的值时,方括号内的表达式必须返回字符串,或者是一个可以返回字符串的值
6.3 删除属性
delete运算符只能删除自有属性,不能删除继承属性。
delete表达式删除成功后,返回true
6.4 检测属性
propertyIsEnumerable()只有检测到是自有属性,且这个属性的可枚举性为true时才返回true
6.5 枚举属性
对象继承的内置方法不可枚举,但在代码中给对象添加的属性都是可枚举的(除非将他们转换为不可枚举的)
ECMAScript5定义了两个用以枚举属性名称的函数:
- Object.keys(),返回一个由对象中可枚举的自有属性的名称组成的数组
- Object.getOwnPropertyNames(),只返回对象的所有自有属性的名称
第7章 数组
7.5 数组元素的添加和删除
用delete删除数组元素与为其赋undefined值是类似的,注意:使用delete删除数组元素的时候不会修改数组的length属性
7.8.3 sort()
为了按照其他方式而非字符顺序进行数组排序,必须给sort()方法传递一个比较函数,该函数决定了它的两个参数在排好序的数组中的先后顺序。假设第一个参数在前,比较函数应该返回一个小于0的数,第一个参数在后,比较函数返回一个大于0的数
7.9 ECMAScript5中定义的数组方法
- forEach() 该方法遍历数组,为每个元素调用指定的函数
- map()该方法调用数组的每个元素传递给指定的函数,并返回一个数组。
var a = [1,2,3];
 b = a.map(function(x){
 return x*x
 }); //b = [1,4,9]
 
- filter()该方法返回的数组元素是调动的数组的一个子集,传递的函数是用来逻辑判定的
var a = [1,2,3,4,5];
 samllValue = a.filter(function(x){
 return x < 3
 }); //[1,2]
 
- every()和some()
 every()当且仅当针对数组中所有元素调用判定函数都返回true,它才返回true。
 some()当针对数组中所有元素调用判定函数都返回false,它才返回falsevar a = [1,2,3,4,5];
 a.every(function(x){ return x < 0 }) //true
 a.every(function(x){ return x % 2 === 0}) //false
 a.some(function(x){ return x % 2 === 0 }) //true
 a.some(isNaN) //false
 
一旦every()和some()确认返回什么值他们就会停止遍历数组元素
5. reduce()和reduceRight() 使用指定的函数将数组元素进行组合,生成单个值
javascript     var a = [1,2,3,4,5];     var sum = a.reduce(function(x,y){return x + y },0); //15     var max = a.reduce(function(x,y){ return (x>y) ? x : y;})  //5     
reduce()第一个参数执行化简操作的函数,该函数的x参数是数组的元素,y参数是上一次操作的结果值,第二个参数是一个传递给函数的初始值,当没有初始值时默认为数组第一个元素
reduceRight()按照数组的索引从高到低处理数组
7.11 类数组对象
javascript数组的一些特性是其他对象所没有的:
- 当有新的元素添加到列表时,自动更新length属性
- 设置length属性为一个较小值时将截断数组
- 从Array.prototype中继承一些有用的方法
- 其类属性为Array
第8章 函数
8.7 函数的属性方法和构造函数
8.7.3 call()和apply()
要想以对象o的方法来调用f函数,可以这样使用:
f.call(o)
f.apply(o)
call()和apply()的第一个实参是要调用函数的母体,在函数内通过this来获得它的引用
区别:
对call()来说,第一个实参之后的所有实参都是要传入待调用函数的值,所传入参数一一列出
apply()第一个实参之后的参数可以以参数数组的形式传入
8.7.4 bind()
当在函数f()上调用bind()方法并传入一个对象o作为参数,这个方法将返回一个新函数。新函数将会把原始函数f()当做o的方法来调用,传入新函数的任何实参都将传入原始函数
function f(y){ return this.x + y; }
var o = { x : 1};
var g = f.bind(o);
g(2)  //3
第9章 类和模块
9.2 类和构造函数
9.2.1 构造函数和类的标识符
a instanceof b 本质是检测a对象是否继承自b.prototype
第10章 正则表达式的模式匹配
10.1 正则表达式的定义
一个正则表达式直接量会在执行到它时转化为一个正则对象,同一段代码每次运算都返回同一个对象
10.1.1 直接量字符
^ $ . * + ? = ! : | \ / () [] {}
在正则表达式中使用这些字符的直接量进行匹配,则必须使用前缀\
10.1.2 字符类
将直接量字符单独放进方括号内就组成了字符类,一个字符类可以匹配它所包含的任意字符
/[abc]/        匹配a,b,c中任意一个
/[^abc]/       匹配abc之外的所有字符
/[a-zA-Z0-9]/  匹配拉丁字母表中任何字母和数字
/[...]/        匹配方括号内任意字符
/[^...]/       匹配不在方括号内任意字符
/./            匹配除换行符和其他Unicode行终止符之外的任意字符
/\w/           匹配任何ASCII字符组成的单词  等价于/[a-zA-Z0-9]/
/\W/           匹配任何不是ASCII字符组成的单词  等价于/[^a-zA-Z0-9]/
/\d/           匹配任何ASCII数字   等价于/[0-9]/
/\D/           匹配除ASCII数字之外的任何字符   等价于/[^0-9]/
/\s/           匹配任何Unicode空白符
/\S/           匹配任何非Unicode空白符
10.3 重复
正则表达式的重复字符语法
{n,m}          匹配前一项至少n次,但不能超过m次
{n,}           匹配前一项n次或者更多
{n}            匹配前一项n次
?              匹配前一项0次或1次  等价于{0,1}
+              匹配前一项1次或多次  等价于{1,}
*              匹配前一项0次或多次  等价于{0,}
使用?,*时要注意,由于这些字符串可能匹配0个字符,因此他们允许什么都不匹配
非贪婪的重复
非贪婪的重复即尽可能少的匹配,只须在待匹配的字符后跟随一个问号即可
10.1.4 选择分组和引用
字符"|"用于分隔供选择的字符
/\d{3}|[a-z]{4}/匹配的是三位数字或者四个小写字母
注意选择项的匹配次序是从左到右,直到发现匹配项,如果左边的选择项匹配,就忽略右边的匹配项
正则表达式圆括号的多种用途:
- 把单独的项组成子表达式,以便通过"*+?|"进行修饰 /java(script)?/
- 允许在同一正则表达式的后部引用前面的子表达式 \1引用的是第一个带圆括号的子表达式
|       匹配的是该表达式左边或右边的子表达式
(...)   将几个项组合为一个单元,这个单元可通过“*”,“+”,“?”和“|”等符号加以修饰,而且可以记住和这个组合相匹配的字符串以供此后的引用使用
(?...)   只组合,把项组合带一个单元,但不记忆与该组相匹配的字符
\n      和第n个分组第一次匹配的字符相匹配,组是圆括号中的子表达式
10.1.5 指定匹配位置
^       匹配字符串的开头,在多行检索中匹配一行的开头
$       匹配字符串的结尾,在多行检索中匹配一行的结尾
\b      匹配一个单词的边界,简言之就是位于字符\w和\W之间的位置,或位于字符\W和字符串的开头或者结尾之间的位置
\B      匹配非单词边界的位置
(?=p)   零宽正向先行断言,要求接下来的字符都与p匹配,但不包括匹配p的那些字符
(?=p)   零宽负向先行断言,要求接下来的字符都不与p匹配
10.1.6 修饰符
- i 执行不区分大小写的匹配
- g 执行一个全局匹配
- m 多行匹配模式
10.2 用于模式匹配的string
search() 返回第一个与之匹配的子串的起始位置,如果找不到匹配则返回-1。该方法不支持全局检索
"javascript".search(/script/i);  //4
replace() 用于检索与替换操作
第一个参数是一个正则表达式,第二个参数是要进行替换的字符串。如正则表达式不带修饰符g,则只替换所匹配的第一个子串
text.replace(/javascript/gi,"JavaScript");
var quote = /"([^"]*)"/g;
text.replace(quote,'"$1"');
match(正则表达式) 返回的是一个由匹配结果组成的数组
"1 plus 2 euqals 3".match(/\d+/g);   //["1", "2", "3"]
split() 这个方法用以将调用它的字符串拆分为一个子串组成的数组
"1, 2, 3, 4".split(/\s*,\s*/);   //["1","2","3","4"]
《Javascript权威指南-第6版》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
		最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ... 
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
		前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ... 
- 外网访问内网Docker容器
		外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ... 
- 外网访问内网SpringBoot
		外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ... 
- 外网访问内网Elasticsearch WEB
		外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ... 
- 怎样从外网访问内网Rails
		外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ... 
- 怎样从外网访问内网Memcached数据库
		外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ... 
- 怎样从外网访问内网CouchDB数据库
		外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ... 
- 怎样从外网访问内网DB2数据库
		外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ... 
- 怎样从外网访问内网OpenLDAP数据库
		外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ... 
随机推荐
- Quartz.NET基础知识概述
			Quartz.NET是什么 由于我现在使用的Quartz.NET2.2版本,相对2.x变化不大,主要是相对于1.x更新了很多东西,如下基础知识摘录网络. Quartz.NET是一个开源的作业调度框架, ... 
- 如何用ajax下载文件
			引子 在HTML5没来之前,浏览器想要下载文件,可能有这么几种方式: 借助a标签,<a href="学习资料.xlsx"></a> window.locat ... 
- gulp 使用入门
			什么是gulp? 用自动化构建工具增强你的工作流程! Gulp 是基于node.js的一个前端自动化构建工具,开发者可以使用它构建自动化工作流程(前端集成开发环境). 使用gulp你可以简化工作量,让 ... 
- Git 的4个阶段的撤销更改
			虽然git诞生距今已有12年之久,网上各种关于git的介绍文章数不胜数,但是依然有很多人(包括我自己在内)对于它的功能不能完全掌握.以下的介绍只是基于我个人对于git的理解,并且可能生编硬造了一些不完 ... 
- Solidity的delete操作
			Solidity中有个特殊的操作符delete用于释放空间,因为区块链技术做为一种公用资源,为避免大家滥用.且鼓励主动对空间的回收,释放空间将会返还一些gas. delete关键字的作用是对某个类型值 ... 
- PTA (Advanced Level) 1009 Product of Polynomials
			1009 Product of Polynomials This time, you are supposed to find A×B where A and B are two polynomial ... 
- SpringMvc @RequestParam 使用推荐使用包装类型代替包装类型
			SpringMvc 中@RequestParam注解使用 建议使用包装类型来代替基本数据类型 public String form2(@RequestParam(name="age" ... 
- 自制 Chrome Custom.css 设置网页字体为微软雅黑扩展
			自己做的將網頁自動替換為微軟雅黑的擴展.很好用. 將Customcss.rcx拖到擴展裏就可. 下載:Customcss.zip 
- wamp3.1.0  X64下载链接
			Wamp3.1.0 X64下载 链接:https://pan.baidu.com/s/1UUU62whfUtiH2_nGFKdQAg 密码:h92l 
- Docker 使用官方镜像
			Docker 使用官方镜像 如何使用官方镜像 Docker 中国官方镜像加速可通过 registry.docker-cn.com 访问.目前该镜像库只包含流行的公有镜像,而私有镜像仍需要从美国镜像库中 ... 
