引用类型(或者理解为类)----------(实例化)----------->对象
在javascript中,引用类型都是Object类型的实例。
-创建一个对象(Object实例)的方法有两种。
1)用new的一个Object类型的方式,如:
var obj = new Object()
2)对象字面量
var obj = {
name:'John',
age:'25'
}
var obj2 = {}
-两种调用的方法:
console.log(obj.name)//John
console.log(obj['name'])
Array类型用来创建数组,数组的每一项都可以存放任何类型的数据,数组的长度可以动态调整。
创建数组的方法有:
1)由Array类型构建
var colors = new Array()
var colors = new Array(20)//创建长度为20的数组
var colors = new Array('red','blue','green')//创建数组并赋值
var colors = Array(3)//也可省略new
var colors = Array('red','blue','green')//也可省略new
2)数组字面量表示法
var colors = ['red','blue','green']
var names = []
检测数组:Array.isArray(value)
转换方法:toLocaleString(),toString(),valueOf(),join()
valueOf()方法返回的仍然是数组。
在打印输出数组的时候,会隐式调用 toString() 方法。如 console.log() 和 alert()
join()方法可以设置分隔符。
var colors = ['red','blue','green']
console.log(colors.join('||')) //red||blue||green
栈方法:push(),pop()
排序方法:
reverse() //颠倒原数组项,直接改变原数组
sort() //按照字符串大小来排序,直接改变原数组
对于 sort() ,它可以设定一个函数来指定每两个数之间的比较方法,demo如下:
var values = [2,60,30,5,66]
values.sort(function(value1,value2){
return value1 - value2
})
console.log(values)//2,5,30,60,66
操作方法:
concat() //拼接数组,返回拼接后的数组
var arr = [1,2,3,4]
var arr2 = arr.concat(5,[6,7])
console.log(arr2)
slice() //截取数组的部分元素并返回,不改变原数数组
var arr = ['I','am','a','student','in','UESTC']
var arr1 = arr.slice(1)
var arr2 = arr.slice(1,3)
console.log(arr1)//am,a,student,in,UESTC
console.log(arr2)//am,a
splice()
//对数组进行删除、插入、替换操作,会影响原数组,返回被删除的项
var arr = ['I','am','a','student','in','UESTC']
var otherArr = arr.splice(2,1)//从第3项开始删除,删除1个元素
console.log(arr)//'I','am','student','in','UESTC'
console.log(otherArr)//'a'
otherArr = arr.splice(2,0,'a')//从第3项插入
console.log(arr)//'I','am','a','student','in','UESTC'
console.log(otherArr)//''
otherArr = arr.splice(2,2,'not','a','gay')//删掉第3、4项,并插入
console.log(arr)//["I", "am", "not", "a", "gay", "in", "UESTC"]
console.log(otherArr)//["a", "student"]
位置方法:
indexOf(),lastIndexOf()
通过值找到其在数组中的索引位置
迭代方法(对数组的每一项都运行的方法):
every() //数组的每一项在运行函数后,均返回true,则返回true
filter() //在每一项运行函数后,返回true的项组成数组,并返回
forEach() //每一项运行函数,无返回值
map() //对数组的每一项运行函数,函数返回的结果组成新的数组,并返回
some() //每一项运行函数,若有一项返回true,则最后返回true
var numArr = [1,2,3,4,5,6,5,4,3,2,1]
var everyResult = numArr.every(function(item,index,array){
//item,每一项;index,索引号;array,数组本身
return (item>2)
})
console.log(everyResult)//false
var someResult = numArr.some(function(item,index,array){
return (item>2)
})
console.log(someResult)//true
var filterResult = numArr.filter(function(item,index,array){
return (item>2)
})
console.log(filterResult)//[3,4,5,6,5,4,3]
var mapResult = numArr.map(function(item,index,array){
return item*2
})
console.log(mapResult)//[2,4,6,8,10,12,10,8,6,4,2]
numArr.forEach(function(item,index,array){
return item+1
})
console.log(numArr)//[1,2,3,4,5,6,5,4,3,2,1]
归并方法:
reduce() //迭代数组的所有项,返回一个最终值,从第一项开始迭代
rightReduce() //迭代数组的所有项,返回一个最终值,从最后一项开始迭代
var values = [1,2,3,4,5]
var sum = values.reduce(function(prev,cur,index,array){
//prev,前一项;cur,当前项;index,当前项索引;array数组对象
//第一次迭代时,prev === 1, cur === 2
//第二次时,prev ===3, cur === 4
return prev + cur
})
console.log(sum)
-Date类型
var now = new Date()
var now = Date.now() //毫秒表示
var now = +new Date() //毫秒表示
用的时候,查阅相关文档
-Function类型
每个函数都是Function类型的实例,函数名是指向该函数的指针
函数声明:
function sum(num1,num2){return num1+num2} //解析器预先解析
函数表达式:
var sum = function(num1,num2){return num1+num2} //解析器按顺序解析
sum 访问函数的指针, sum()则是直接调用函数
把函数作为值传递的示例:
var data = [{name:'John',age:28},{name:'Jam',age:20}]
function createCompareFunction(propertyName){
return function(obj1,obj2){
var value1 = obj1[propertyName]
var value2 = obj2[propertyName]
return value1 - value2
}
}
data.sort(createCompareFunction('age'))
函数内部属性:
arguments 函数的参数集合,这是一个看起来像数组的、可以用数组方法操作的对象
callee() 调用方法为 arguments.callee() ,指向 arguments 所属的函数本身,在回调的时候很有用
this 指向当前的执行环境所对应的对象
caller 找到引用当前函数的函数,用法如下:
function outerFn(){
innerFn()
}
function innerFn(){
console.log(innerFn.caller)//outerFn
}
outerFn()
函数的属性和方法:
属性: fnName.length 表示函数希望接受的命名参数的个数
fnName.prototype 指向函数的原型
方法:apply() 在使用该方法时,会直接调用函数,传入的参数为数组
call() 在使用该方法时,会直接调用函数,传入的参数要列举
bind() 不会直接调用函数,取而代之的是返回一个函数
这三种方法的第一个参数要传入一个对象(或this关键字)用以改变执行环境(作用域)
后面的参数作为被调用的函数的参数传入
call()示例:
var obj = {
saying:'Hi'
}
function sayHi(name){
console.log(name+'say:'+this.saying)
}
sayHi.call(obj,'John')//其中John作为函数sayHi()的参数传入
apply()示例:
function sum(num1,num2){
return num1+num2
}
function callSum1(num1,num2){
//return sum.apply(this,[num1,num2])
return sum.apply(this,arguments)//即使sum()函数中用不到this,但在这里,必须传入一个对象
}
callSum1(10,20)
bind()示例:
var obj = {
saying:'Hi'
}
function sayHi(name){
console.log(name+'say:'+this.saying)
}
var otherFn = sayHi.bind(obj,'John')//其中John作为函数sayHi()的参数传入
otherFn()
-基本包装类型
JavaScript提供了三个特殊引用类型:Boolean,Number,String,它们与各自的基本类型相对应
在读取一个基本值的时候,后台就会创建一个对应的基本包装类型。
在调用基本类型相对应的包装类型的方法时,像这样
var s1 = 'some text'
var s2 = s1.substring(2)
后台会产生如下的过程:
(1)创建String类型的一个实例
(2)在实例上调用指定的方法
(3)销毁这个实例
Boolean对象尽量不要用
String类型:
每一个String类型的实例都有一个length属性,用来得到字符串的字符个数
单个字符的操作方法:
根据位置访问字符串中单个字符的方法有 charAt() 和 charCodeAt()
charAt() 找到相应位置的单个字符
charCodeAt() 找到相应位置的单个字符并转换成字符编码
此外,字符串还可像数组一样访问单个字符,比如
var stringValue = 'hello world'
console.log(stringValue[1])
字符串操作方法:
concat() 字符串拼接
var stringValue = 'hello'
var result = stringValue.concat(' ','world','!!!')
console.log(result)//hello world!!!
slice(),substr(),substring()
这三种方法的用途是一样的,都是从字符串中截取一部分返回,且不改变原字符串,尽量用 slice()
字符串位置方法:
indexOf('substring',start),lastIndexOf()
第一个参数传入一个子字符串,找到其在原字符串中对应的位置;第二个参数传入搜索的起始位
在第一个找到 'substring' 的位置停下来不再搜索
trim()方法,返回去掉字符串两端空格后的副本。
字符串模式匹配方法 match() ,原书p126,看完再总结。
localeCompare() 方法,比较两个字符串,返回1,-1,0
string1.localeCompare(string2),不是很重要,用到的时候再去看api文档
fromCharCode() 方法, 将字符编码->字符串
console.log(String.fromCharCode(104,101,108,108,111)) //'hello'
-单体内置对象
内置对象的含义:已经实例化,无需程序员显式地实例化,比如 Object,Array,String
此外还有两个单体内置对象,Global,Math
eval() 传入一个字符串作为执行对象,该方法对其编译后执行
Math 对象
属性 Math.E, Math.Ln10, Math.Ln2, Math.LOG2E, Math.LOG10E, Math.PI, Math.SQRT1_2, Math.SQRT2
max(),min() 方法:
var max = Math.max(3,54,32,16)
console.log(max) // 54
var arr = [1,2,3,4,5,6,7,8,9,10]
var max = Math.max.apply(Math,arr)//Math必须传入以指定执行环境,这是固定格式
舍入方法:
Math.ceil() 向上取整
Math.floor() 向下取整
Math.round() 四舍五入
random() 方法:
Math.random() 创建一个数x,它的取值范围为 0<=x<1
随机创建一个从 lowerValue 到 upperValue
function selectFrom(lowerValue,upperValue){
var choices = upperValue - lowerValue + 1
return Math.floor(Math.random()*choices + lowerValue)
}
其他方法
Math.abs(n), Math.exp(n), Math.log(num), Math.pow(num,power), Math.sqrt(num), Math.acos(x)
Math.asin(x), Math.atan(x), Math.atan2(y,x), Math.cos(x), Math.sin(x), Math.tan(x)