5. 引用类型
- 引用类型的值是引用类型的一个实例 —> 对象
 - 引用类型是一种数据结构,用于将数据和功能组织在一起,引用类型描述一类对象所具有的属性和方法 —> 类(对象定义)
 
5.1 Object
- 在应用程序中存储和传输数据的理想选择
 - 创建Object实例    
- 构造函数 new Object()
 - 字面量      
var a = {}与new Object()一致,只保留默认的属性和方法
 
 - 上下文    
- 表达式上下文 expression context
 - 语句上下文 statement context
 
 - 属性引用    
- 点引用
 - 方括号引用(优点:可以使用变量,动态)
 
 
5.2 Array
- 动态调整大小; 可以保存任意类型
 - length 属性可以截取数组
 - 检测数组    
- instanceof Array 一个全局执行环境
 - Array.isArray() 多个全局执行环境,不同版本的Array构造函数
 
 - 栈方法    
- push & pop
 - unshift & shift
 
 - 队列方法    
- push & shift
 - unshift & pop
 
 - 重排序方法    
- reverse
 - sort      
- 默认调用元素的toString方法,比较的得到的字符串
 - 传入比较函数
(a,b) => a - b 
 
 - 操作方法    
- concat 创建一个副本,传入数组会将解构元素添在末尾,其他非数组直接添在末尾
 - slice 创建副本,含首不含尾
 - splice 功能强大      
- 删除
 - 插入
 - 替换
 - 返回被删除的数组
 
 
 - 位置方法    
- indexOf(searchValue, fromIndex) 第二个参数表示从索引几开始搜索
 - lastIndexOf
 
 - 迭代方法    
- 五个方法都需要两个参数 需要迭代的函数(currentValue, index, array) 和 该函数运行作用域对象thisArg
 - every
 - some
 - filter
 - map
 - forEach 无返回值,本质上与使用for循环迭代一样
 - 五个方法都不会修改原数组
 
 - 归并方法    
- reduce 内含函数(accumulator/total,currentValue,currentIndex,array)和初始值initialValue
 - reduceRight
 - 经典应用:求数组和
 
 
5.3 Date
- 国际协调时间UTC Coordinated Universal Time
 - 太平洋标准时间PST Pacific Standard Time
 - 日期格式化方法(没什么用)    
- toDateString
 - toTimeString
 - toLocaleDateString
 - toLocaleTimeString
 - toUTCString
 
 
5.4 RegExp
- 标志 flags    
- g 全局匹配所有字符串 Global
 - i 忽略大小写 Case-Insensitive
 - m 多行匹配 multiline
 
 - 模式 pattern    
- 元字符(必须转义)
 - ([{^$|}])?*+.
 
 - 创建正则表达式的两种方式    
- 字面量 和使用构造函数一样,每次都创建新的实例
 - 构造函数 
new RegExp(pattern, flag) 
 - 实例属性    
- global、ignoreCase、multiline 布尔值,表示是否设置了标志
 - lastIndex 整数,表示下一个次匹配时的字符位置
 - source 模式的源信息
 
 - 实例方法    
- exec 专门为捕获组设计的      
- 返回数组,Array实例,包含index和input两个额外属性
 - index表示匹配项在字符串中的位置
 - input输出源字符串
 - 数组内容依次为模式匹配结果和捕获组匹配结果
 - 每次只匹配一个,不加g不更新lastIndex,每次从头匹配,所以每次返回匹配到的第一个
 - 非全局模式下,lastIndex始终不变
 - 如果有g标志,会更新lastIndex
 
 - test 匹配true否则false
 - toString 返回字面量
 - valueOf 返回正则本身
 
 - exec 专门为捕获组设计的      
 - 构造函数属性(静态属性)    
$1~9存储捕获组- `$`` lastMatch之前的文本
 $'lastMatch之后的文本
 - 局限性    
- 支持前瞻lookahead,不支持后顾lookbehind
 - 支持编号捕获组,不支持命名捕获组
 
 
5.5 Function
- 函数是对象,跟其他引用类型一样具有属性和方法
 - 函数名实际上是一个指向函数对象的指针
 
var fun = function(x,y){return x+y};
// 或者 function fun(x,y){return x+y};
var obj = fun;
fun = null;
obj(1,2); // 3
  - 没有重载    
- 函数名是指针,所以重复申明只是 覆盖了前一函数
 
 - 函数声明与函数表达式    
- 函数声明提升 function declaration hoisting
 - 函数表达式 
var fun = function(){} 
 - 作为值的函数    
- 函数名本身就是变量,所以函数可以作为值来使用
 - 作为参数或者返回值(高阶函数)
 
 - 函数内部属性    
- arguments      
- callee 返回当前执行的函数(严格模式禁止,就是不推荐)
 - 经典应用:阶乘 factorial 递归实现
 - 函数名和函数体耦合
 
 - caller      
- 经典应用: 松散耦合 arguments.cllee.caller
 
 - this      
- 引用的是函数执行时的环境对象        
- 在函数调用之前,this的指向是不确定的
 - 函数名只是一个指针变量
 - 全局的sayColor与obj.sayColor指向的是同一个函数
 - 以对象方法的形式调用函数,一个this指向window;一个指向obj
 
 
 - 引用的是函数执行时的环境对象        
 
 - arguments      
 
var color = 'red';
var obj = {color: 'blue'};
function sayColor(){
	return this.color;
}
obj.sayColor = sayColor;
sayColor(); // red
obj.sayColor(); // blue
sayColor.call(obj); // blue
sayColor = null;
sayColor(); // Error
obj.sayColor(); // blue
  - 函数属性    
- length 命名参数的个数
 - prototype 不可枚举,for-in无法发现
 
 - 函数方法    
- apply() 在特定的作用域中调用函数,实际上等于设定函数内部this对象的值
 - call()      
- 扩充作用域
 - 使用apply和call扩充函数作用域的最大好处就是对象不用与方法有任何耦合关系。
 
 - bind()
 - toString()
 - valueOf()
 
 
5.6 基本包装类型
var str1 = 'hello world';
var str2 = str1.substring(6,11);
  - 在读取模式访问字符串时,后台自动完成类型包装    
- 创建一个实例 
var str1 = new String('hello world'); - 在实例上调用指定方法 
str1.substring(6,11); - 销毁这个实例 
str1 = null; 
 - 创建一个实例 
 - 引用类型和基本包装类型的主要区别就是对象的生存期    
- 使用new创建的引用类型的实例,在执行流离开当前作用域之前一直保存在内存中
 - 自动创建的基本包装类型的对象,只存在于执行代码的一瞬间,然后立即被销毁
 
 - Number    
- toFixed() 保留几位小数
 - toExponential() 指数表示
 - toPrecision() 有效数字
 
 - Boolean
 - String    
- length
 - chartAt()
 - charCodeAt()
 - concat() // 不修改原字符串
 - 子字符串      
- slice(start, end)
 - substr(start, howmany)
 - substring(start, end)
 - 不修改原字符串
 - 传入负值的不同处理        
- slice() 表示从尾倒着数
 - substring() 把负值转换为零,而且会自动调整参数,小的start,大的end
 - substr() 第一参数和slice()一致,倒着数;第二参转换为零
 
 
 - 字符串位置方法      
- indexOf(string, position)        
- 第二参数的经典应用:找到所有匹配的字符串的索引
 - 每次找到字符串后 
position++ 
 - lastIndexOf()
 
 - indexOf(string, position)        
 - trim() 去除前后空格      
- trimLeft()
 - trimRight()
 
 - 大小写转换方法      
- toUpperCase()
 - toLowerCase()
 
 - 字符串模式匹配方法      
- match(RegExp)        
- 非全局模式下,String.match() <–等价–> RegExp.exec()
 - match最大用处还是全局模式g下匹配字符串中所有模式
 
 - search(RegExp)        
- 与indexOf()的区别
 - indexOf 需要字符串参数
 - search 需要正则表达式参数
 
 - replace(RegExp/string, string/function)        
- 替换子字符串操作
 - 第一参数          
- string 匹配字符串的话只会替换第一个匹配到的
 - RegExp(g) 想要替换全部匹配项,只有通过正则表达式g的全局模式
 
 - 第二参数          
- 特殊字符
 - $& 匹配项
 - $n 捕获组
 - $’ 右
 - $` 左
 - function(match,position,originalText){ switch(match) … }
 
 
 - split(seperator, howmany)        
- seperator 可以是正则和字符串
 - 没有匹配项的捕获组在结果数组中用undefined表示
 
 - localeCompare(string)        
- 和参数字符串比较返回-1,0,1
 - ASIIC中,大写字母排在小写字母前面
 
 fromCharCode(104, 101, 108, 108, 111) // "hello"- 与charCodeAt()相反操作
 - 字符和编码间的转换
 
- HTML方法        
- JavaScript动态创建格式化HTML
 - 不推荐,无法表达语义
 
 
 - match(RegExp)        
 
 
5.7 单体内置对象
内置对象的定义
由ECMAscript实现提供的,不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了
开发人员不必显示地实例化单体内置对象,因为他们已经实例化了,ECMA提供两个单体对象:Global和Math
- Global    
- 终极‘兜底儿’对象      
- 任何不属于其他对象的属性和方法,最终都挂在Global对象上
 - 事实上,没有所谓 “全局函数” 和 “全局变量”
 - 全局函数和全局变量都是全局对象Global的方法和属性
 
 - 方法      
- isNaN()        
- 传入非数字时,结果并不可信
 
 - isFinite()
 - parseInt()        
- parseInt()和toString() 是一对进行进制转换的好基友
 
 - parseFloat()        
- parseFloat() 注意传入整数,输出还是整数,不会转成浮点数
 
 - URI编码方法        
- encodeURI()          
- 只有空格被替换成
%20 
 - 只有空格被替换成
 - encodeURIComponent()          
- 替换所有非字母数字字符
 
 - decodeURI()
 - decodeURIComponent()
 
 - encodeURI()          
 - eval()        
- eval执行后会被替换成真正的代码语句
 
 
 - isNaN()        
 - 属性      
- 特殊值        
- undefined
 - NaN
 - Infinity
 
 - 构造函数        
- Object
 - Array
 - Function
 - Boolean
 - String
 - Number
 - Date
 - RegExp
 - Error
 - EvalError
 - RangeError
 - ReferenceError
 - SyntaxError
 - TypeError
 - URIError
 
 
 - 特殊值        
 - window      
- window对象除了扮演ECMAScript规定的Global对象以外,还承担很多别的任务
 
 
 - 终极‘兜底儿’对象      
 - Math    
- 属性      
- Math.E
 - Math.LN10()
 - Math.LN2()
 - Math.LOG2E
 - Math.LOG10E
 - Math.PI
 - Math.SQRT1_2
 - Math.SQRT2
 
 - 方法      
- 大小        
- min()
 - max()
 
 - 舍入        
- ceil()
 - floor()
 - round()
 
 - 随机        
- random()
 
 - 数学计算        
- abs(num)
 - exp(num) // e指数
 - log(num) // e底数对数
 - pow(num, power)
 - sqrt(num)
 - acos(x) // 反余弦
 - asin(x)
 - atan(x) // 反正切
 - atan2(y,x) // y/x的反正切
 - cos(x)
 - sin(x)
 - tan(x)
 
 
 - 大小        
 
 - 属性      
 

京公网安备 11010502036488号