【红宝书】第5章引用类型
Object类型
1.使用构造函数创建
let person = new Object()
2.对象字面量创建
let person = {}
访问对象属性
obj.name obj["name"]
Array类型
let arr = new Array()
let arr = new Array(20)
let arr = new Array("red","blue","green")
let arr = ["red","blue",""green]
数组的length属性不是只读的。设置这个属性可以从数组的末尾移除项或添加项
检测数组
console.log(arr instanceof Array) // 返回布尔
但是网页多个框架实际上有多个作用域其Array构造函数不是相等的,解决方案
Array.isArray(arr)
转换方法
所有对象都由toLocaleString()、toString()、valueOf()方法
let arr = [1, 2, 3]
console.log(arr.toString())
console.log(arr.valueOf())

join()实例方法,返回拼接后的字符串,默认用,拼接
console.log(arr.join())
console.log(arr.join('-'))

栈LIFO(last-in-first-out),后进先出
push()实例方法,末尾添加,改变原数组,返回修改后数组的长度
pop()实例方法,末尾移除,改变原数组,返回移除项
队列FIFO(first-in-first-out),先进先出
shift()实例方法,头移除,改变原数组,返回移除项
unshift()实例方法,头添加,改变原数组,返回修改后数组的长度
重排序
reverse()实例方法,原数组反转
sort()实例方法,原数组排序
sort()方法默认会调用每个数组项的toString()转型方法,然后比较得到的字符串再排序
arr.sort((a,b)=>a-b) // 升序
arr.sort((a,b)=>b-a) // 降序
操作方法
concat(arr1,arr2,...)实例方法,不改变原数组,返回拼接后的数组
slice(a,b)实例方法,不改变原数组,返回截取后的数组 [a,b)
splice(要删除的第一项位置,删除的项数,插入项1,插入项2,...),不改变原数组,返回操作后的数组
位置方法
indexOf(查找项,查找起始位置),有返回index,没有返回-1
lastIndexOf()
迭代方法
every(),每一项都满足返回true,否则false
some(),任一项满足返回true,否则false
filter(),过滤满足条件的项,返回过滤后的数组
map(),对每一项进行操作,返回操作后的数组
forEach(),对每一项进行操作,没有返回值
归并方法
reduce()
reduceRight()
let sum = arr.reduce((prev,cur,index,array)=>prev+cur)
Function类型
函数名为指向函数的指针。
解析器率先读取函数声明,提升到顶部,而函数表达式必须等到解析器执行到它所在的代码行才会真正被解释执行
// 函数声明
function sum() {}
// 函数表达式
let sum = function(){}
没有重载,重复声明则覆盖
函数内部特殊对象arguments和this
arguments是一个类数组对象,包含着传入函数中的所有的参数,其有一个callee属性,该属性是一个指针指向arguments对象的函数
function factorial(num) {
if(num <= 1){
return 1
}else{
return num*arguments.callee(num-1)
}
}
this引用的是函数执行的环境对象,在网页的全局作用域中调用函数时this对象引用的就是window
函数对象属性caller
保存着调用当前函数的函数的应用,如果在全局作用域调用当前函数它的值为null
function outer() {
inner()
}
function inner() {
console.log(inner.caller) // 指向函数outer
console.log(arguments.callee.caller) // 实现更松散的耦合
}
outer()
严格模式下访问arguments.callee会导致错误,ES5定义了arguments.caller严格模式下访问导致错误,非严格模式始终为undefined。加强语言安全性,避免第三方代码在相同环境里窥视其他代码。
严格模式下不能为函数的caller属性赋值否则导致错误
函数属性和方法
length属性表示函数希望接收的命名参数的个数
prototype属性保存它们实例方法的所在,不可枚举,无法用for-in发现
非继承来的方法apply()和call(),用途是再特定的作用于调用函数,实质上等于设置函数体内this对象的值。
apply(作用域,参数数组Array实例或者arguments对象)
call(作用域,参数1,参数2,...)
window.color="red"
let obj={color:"blue"}
function sayColor(){
console.log(this.color)
}
sayColor() //red
sayColor.call(this) //red
sayColor.call(window) //red
sayColor.call(obj) //blue
bind()方法,创建一个函数实例,其this值会被绑定到传给bind函数的值
window.color = "red"
let obj = { color: "blue" }
function sayColor() {
console.log(this.color)
}
let newFn = sayColor.bind(obj)
newFn() // blue
基本包装类型的方法
Number类型
num.toFixed(x) 保留x位小数位
num.toExponential(x) 指数表示法,保留x位小数 1.0e+1
num.toPrecision(x) 可能返回固定大小格式或返回指数格式,保留x位
let num = 99
console.log(num.toPrecision(1)) // 1e+2
console.log(num.toPrecision(2)) // 99
console.log(num.toPrecision(3)) // 99.0
String类型
let srt = 'aecde'
str.length //5
字符方法
srt.charAt(1) //e 返回字符
str.charCodeAt(1) //101 返回字符编码
str[1] //e
String.fromCharCode()方法把字符编码转换为字符返回
操作方法,不修改原字符,返回操作后的新字符
str.concat()
str.slice(a,b) [a,b)
str.substring(a,b) [a,b)
str.substr(index,num) 从index开始截取num位
位置方法
str.indexOf()
str.lastIndexOf()
trim()方法,创建新字符去两端空格
大小写转换
str.toLowerCase()
str.toUpperCase()
正则相关
str.match(pattern)
let str = 'assdwer ewwerqeqw'
console.log(str.match(/dw/))

let str = 'dwsdwerdwewwerqeqw'
console.log(str.match(/dw/g))

str.search(pattern),有返回第一个匹配的index,没有返回-1
str.replac(pattern,newStr)
str.replac(pattern,item=>{})

localeCompare()方法比较两个字符串,返回下列之中的一个
1.str中排在参数前,返回-1
2.等于返回0
3排在参数之后,返回1
let str = 'd'
console.log(str.localeCompare('g')) //-1
console.log(str.localeCompare('d')) //0
console.log(str.localeCompare('a')) //1
单体内置对象
Global对象
在全局作用域定义的属性和方法都是Global对象的属性,比如isNaN(),isFinite(),parseInt(),parseFloat()
1.url编码
encodeURI() 对应decodeURI()
encodeURIComponent()对应decodeURIComponent()

2.eval()方法,就像完整的ECMAScript解析器,只接受一个参数,即要执行的js字符串
eval("alert('hi)")
3.Globald对象的属性

4.window对象
Math

Math.min()
Math.max()
Math.ceil()向上取整
Math.floor()向下取整
Math.round()四舍五入
Math.random() [0,1]


浙公网安备 33010602011771号