1. Object类型
创建对象的方式
1) 构造函数方式 var obj = new Object(); // Object为构造函数
2)字面量方式 var obj = {}
2. Array类型
ECMAscript数组的每一项可以保存任何类型的数据
创建数组的方式
1)var color = new Array();
如果预先知道数组要保存的项目数量,可以给构造函数传递改数量,该数量会自动变成length属性的值
var arr = new Array(20);
也可以向构造函数中传递数组中应该包含的项
var arr = new Array('xhk', 'coco', 'lover');
如果给构造函数传递一个值
这个值是数字, 创建包含给定项数的数组,
这个值是其他类型参数,创建包含这个值只有一项的数组
使用Array构造函数的时候可以省略new操作符
var arr = Array(3);
2) 数组字面量 var arr = [];
检测数组
instanceof Array
栈方法(后进先出)
push(): 接受任意数量的参数,把他们逐个添加到数组末尾,并返回修改后的数组的长度。
pop(): 从数组末尾移除最后一项,减少数组的长度,并返回被移除的项。
队列方法(先进先出)
队列在列表的末端添加项,从列表的前端移除项。
shift(): 从数组前端移除项,并返回该项。
unshift(): 在数组前端添加任意个项并返回新数组的长度。
重排序方法:reverse() sort()
reverse(): 反转数组项的顺序, 返回重新排序后的数组。
sort(): 默认按升序排列数组项,小到大,为了实现排序sort()方法会调用每个数组项的toString()转型方法,然后比较得到字符串,以确定如何排序,即使数组中的每一 项都是数值,sort()方法比较的也是字符串。返回重新排序后的数组。
var arr = [0, 1, 5, 15, 20]; // [0, 1, 15, 20, 5]
操作方法
concat(): 先创建一个当前数组的副本,然后将接收到的参数追加到这个副本的末尾,返回新构建的数组。如果传递给concat()方法的是一个或多个数组,该方法会将这 些数组中的每一项都添加到结果数组中。原数组不变。
slice(): 基于当前数组的一个或多个项创建一个新数组。接受一个或两个参数,参数一:返回项的起始位置;参数二:返回项的结束位置;
不会影响原始数组
如果只有一个参数,则返回从该参数指定位置到数组末尾的所有项。
如果两个参数,返回起始和结束位置之间的项, 不包含结束位置的项。
如果slice()方法的参数中有一个是负数,则用数组长度加上该数来确定相应的位置,eg: arr.length = 5; slice(-2, -1); 实际上应该返回slice(3, 4)这一段新数组;
splice(): 向数组中部插入项。返回包含从原始数组中删除的项。如果没有删除任何项,则返回一个空数组。
1)删除:删除任意数量的项:返回被删除的项;两个参数,参数一,要删除的第一项的位置,参数二,要删除的项数。
2)插入:指定位置插入任意数量的项,参数一,起始位置;参数二,0(要删除的项数);参数三,要插入的项
3) 替换:向指定位置插入任意数量的项,且同时删除任意数量的项。参数一,起始位置;参数二,要删除的项数;参数三,要插入的任意数量项。
位置方法
indexOf(): 参数:参数一,要查找的项,参数二,(可选)表示查找起点位置的索引;从数组的二开头向后开始查找, 返回查找的项在数组中的位置
lastIndexOf():参数:参数一,要查找的项,参数二,(可选)表示查找起点位置的索引;从数组的末尾开始向前查找,返回查找的项在数组中的位置
迭代方法
每个方法都接受两个参数,参数一,在每一项上运行的函数,参数二,(可选),运行该函数的作用域对象——影响this的值
every(): 对数组中的每一项运行给定的函数,如果该函数的每一项都返回true,则返回true;
filter(): 对数组中的每一项运行给定的函数,返回该函数会返回true的项组成的数组;查询符合某些条件的所有数组项有用。
forEach(): 对数组中的每一项运行给定的函数,没有返回值。
map():对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组。适合创建包含的项与另一个数组一一对应的数组。some():对数组中的每一项运行给定的函数,如果该函数对任一项返回true,则返回true。
归并方法
都是两个参数,参数一,在每一项上调用的函数;参数二,(可选),作为归并基础的初始值。第一次迭代发生在数组的第二项。
reduce(), reduceRight():接受四个参数,参数一,前一个值;参数二,当前值;参数三,项的索引;参数四,数组对象。函数返回的任何值都会作为第一个参数传 给下一项。
reduce():从数组的第一项开始,逐项遍历到最后,
reduceRight():从数组的第一项开始,逐个遍历到最后。
Date类型
var date = new Date();
Date.parse():根据字符串参数返回相应的日期毫秒数;
Date.now(): 返回调用这个函数时的日期和时间的毫秒数;
var start = +new Date(); // 使用+操作符获取Date对象的时间戳;
RegExp类型
var pattern = new RegExp('匹配的字符串模式', '可选的标志字符串');
RegExp实例方法
exec(要应用模式的字符串):专门为捕获而设计,返回包含第一个匹配项信息的数组,没有匹配项的情况下返回null;
test(字符串参数):在模式与改参数匹配的情况下返回true,否则返回false。是否匹配,不需要知道内容的情况下使用。
Function类型
由于函数是一个对象,所以函数名是一个指向函数对象的指针;
函数名只是指向函数的指针;
使用不带圆括号的函数名只是访问函数指针,不是调用函数;
ECMAScript中没有函数重载的概念
解析器在向执行环境加载数据的时候,对函数声明和函数表达式并非一视同仁,解析器会率先解析函数声明,使其在执行任何代码之前可用。函数表达式,必须等解 析器执行到他所在的代码行,才会被真正的解析执行。
根据某个对象属性对数组进行排序
function compareProperty(propertyName) {
return function(obj1, obj2) { var val1 = obj1[propertyName]; var val2 = obj2[propertyName]; if(val1 < val2) { return -1; } else if (val1 > val2) { return 1; } else { return 0; } } }vra data = [{name: 'xhk', age: 35}, {name: 'coco', age: 23}];
data.sort(compareProperty('age'));
函数内部属性 arguments, this
arguments: 一个类数组对象,包含传入函数中的所有参数;主要用途有: 1)保存函数参数,arguments对象上有一个callee属性,该属性是一个指针,指向拥有这个arguments对象的函数。
function factorial (num) {
if(num <= 1) { return 1;} else {
return num * factorial(num -1); } }factorial(5) // 120
如果函数有名字,并且以后函数名字不会变的情况下,这样写没有问题,但是这样写函数的执行和函数名紧紧的耦合在一起,使用arguments.callee;
function factorial (num) {
if(num <= 1) { return 1;} else {
return num *arguments.callee(num -1); } }factorial(5) // 120
this: this引用的是函数执行的环境对象,全局对象是window。
函数名只是一个包含指针的变量,即使在不同的环境下也是调用同一个函数。
函数的属性和方法
每个函数都有两个属性length(表示函数希望接收的命名参数的个数), prototype()
function xhk(coco, lover) {
return; }xhk.length // 2
每个函数都包含两个非继承而来的方法(扩充函数赖以运行的作用域)
apply(): 在特定的作用域中调用函数,相当于设置函数体内this对象的值。两个参数,参数一,在其中运行函数的作用域;参数二,参数数组(可以使Array实例也可以是arguments)
function callaSum2 (num1, num2) {
return sum.apply(this, [num1, num2]); }function callaSum1 (num1, num2) {
return sum.apply(this, arguments); }call(): 在特定的作用域中调用函数,相当于设置函数体内this对象的值。参数一this, 参数二数组(必须逐个列出来)
function callaSum3 (num1, num2) {
return sum.apply(this, num1, num2); }bind(): 创建一个函数的实例,this值绑定到传给bind的值;
var color = 'red';
var o = { color: 'blue' }function sayColor() {
return this.color; }var _color = sayColor.bind(o);
_color(); // blue
基本包装类型
3个特殊的引用类型: Boolean, Number, String
每当读取一个基本类型的值时, 后台会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。
在读取模式中访问字符串的时候,后台自动完成下列处理:
1)创建基本类型的一个实例;
2)在实例上调用指定的方法;
3)销毁这个实例;
eg. var s1 = new String('xhk');
var s2 = s1.substring(2);
s2 = null;
引用类型和基本包装类型的主要区别在于对象的生存期。
使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前一直保存在内存中;自动创建的基本包装类型的对象,只存在于一行代码执行的瞬间,然后立 即销毁。所以我们不能在运行时为基本类型添加属性和方法
Boolean类型
所有基本包装类型的对象在转换为布尔类型时值始终为true.
Number类型
toFixed(): 按照指定的小数位数返回数值的字符串表示;
var num = 10;
num.toFixed(3); // 10.000
如果数值本身包含的小数位多于指定的位数,接近最大小数位的值会四舍五入
var num = 10.1219;
num.toFixed(3); // 10.122
toFixed()标准实现的范围是0~20位小数
toExponential(): 返回指数表示法(e的表示法)
num.toExponential(2); // 1.01e+1 参数表示小数位数
toPrecision(): 得到表示某个数值最合适的格式
num.toPrecision() // 10.1219 参数表示数值的所有数值的位数(不包括指数部分)
num.toPrecision(3) // 10.1
String类型
每一个String实例都包含length属性,表示字符串中包含多少个字符;
var str = 'xhk coco';
str.length; // 8
用于访问字符串中特定字符的方法
charAt(): 以单字符字符串的形式返回给定位置的字符
var str = 'xhk coco';
str.charAt(2); // 'k'
charCodeAt(): 返回指定位置的字符编码
str.charCodeAt(2); // 107
str[0]; // 'x'
concat()将一个或多个字符串拼接起来,返回拼接得到的新字符串;接收任意多个参数
var str = 'xhk';
var _str = str.concat('coco');
_str; // 'xhkcoco'
str; // 'xhk'
var _str = str.concat('lover', 'coco', 'more and more');
_str // xhklovercocomore and more
下面三个方法返回被操作字符串的一个子字符串(对原始字符串没有影响):
slice(开始位置, 得到子字符串的后一个位置):
substr(开始位置, 返回的字符串个数)
substring(开始位置, 得到子字符串的后一个位置)
var str = 'xhk love coco';
str.slice(3); // ' love coco';
str.substr(3); // ' love coco';
str.substring(3); // ' love coco';
str.slice(3, 6); // ' lo'
str.substr(3, 6) ; // ' love '
str.substring(3, 6); // ' lo'
以上三个方法的参数有负值的时候
slice()会将传入的负值与字符串长度相加
substr()将负的第一个参数加上字符串长度, 负的第二个参数转换为0;
substring()将所有负值参数都转换为0;
var str = 'xhk love coco';
str.slice(-3); // -3 + 13 = 10; 'oco'
str.substring(-3); // 负数转换为0 'xhk love coco'
str.substr(-3); // -3 + 13 = 10; 'oco'
str.slice(3, -4); // str.slice(3, 9); " love "
str.substring(3, -4); // str.substring(3, 0)由于这个方法会将较小的数字作为开始位置,实际上是str.substring(0, 3) 'xhk'
str.substr(3, -4); // str.substr(3, 0); '' 第二个参数是0所以获取0个字符 是空字符串
字符串位置的方法
从一个字符串中搜索指定的字符串,方法如下:
indexOf(): 返回字符串的位置,没有找到该字符串返回-1。从前向后搜索。参数一,要查找的字符串, 参数二, 从字符串的哪个位置开始向后搜索。
lastIndexOf():返回字符串的位置,没有找到该字符串返回-1。从后向前搜索。参数一,要查找的字符串, 参数二, 从字符串的哪个位置开始向前搜索。
var str = 'xhk love coco';
str.indexOf('o'); // 5
str.lastIndexOf('o'); // 12
str.indexOf('o', 5); // 10
str.lastIndexOf('o', 7); // 5
找到所有匹配的字符串的位置
var arr = [];
var pos = str.index('o');
while(pos > -1) {
arr.push(pos);pos = str.index('o', pos + 1);
}arr // [5, 10, 12]
trim(): 去掉两端空格,然后返回结果。原字符串保持不变。
var str = ' xhk ';
var val = str.trim();
val // 'xhk'
非标准的方法:
trimLeft(): 去除前端空格
trimRight():去除后端空格
str.trimLeft(); // 'xhk '
str.trimRight(); // ' xhk'
toUpperCase() : 转换为大写
str.toUpperCase(); // ' XHK '
str.toLocaleUpperCase(); // " XHK "
var str = 'COCO';
str.toLowerCase(); // 'coco'
str.toLocaleLowerCase(); // 'coco'
字符串模式匹配方法
str.match(): 参数: 正则表达式或者一个RegExp对象
str.search(): 参数: 正则表达式或者一个RegExp对象,返回字符串中第一个匹配项的索引,如果没有找到匹配项返回-1。始终从字符串开头向后查找。
str.replace(); 参数一,RegExp对象或一个字符串;参数二,一个字符串或一个函数;
var txt = 'cat, bat, sat, fat';
txt.replace('at', 'ond'); // "cond, bat, sat, fat"
txt.replace(/at/g, 'ond'); // "cond, bond, sond, fond"
var vals = txt.replace(/(.at)/g, 'word($1)'); // "word(cat), word(bat), word(sat), word(fat)"
str.split(); 参数一,字符串或RegExp对象(分割符),参数二,指定数组的大小,确保返回的数组不会超过既定大小。
var colorTxt = 'red, blue, green, yellow';
var color = colorTxt.split(',', 2); // ["red", " blue"]
fromCharCode():接收一个或多个字符编码,并将他们转换成字符串。
String.fromCharCode(104, 101) // he
内置对象:不依赖宿主环境,不需要显示实例化。内置对象:
Object、Array、String、Global、Math
Math.min():获取一组值中的最小值、
Math.max():获取一组值中的最大值
var minNum = Math.min(0, 6, 4, 9, 2); // 0
var maxNum = Math.max(0, 6, 4, 9, 2); // 9
var minNum = Math.min.apply(Math, arr); // 0
var minNum = Math.min.call(Math, 0, 6, 4, 9, 2); // 0
Math.ceil(): 向上取整
Math.floor(): 向下取整
Math.round(): 四舍五入
Math.ceil(1.9); // 2
Math.floor(1.9); // 1
Math.round(1.9); // 2
Math.random(): 返回大于等于0小于1的随机数
从某个整数范围随机选择一个数
值 = Math.floor(Math.random() * 可能值的总数 + 第一个可能的值)
function selectForm(lowerValues, upperValues) {
var choices = upperValues - lowerValues + 1; return Math.floor(Math.random() * choices + lowerValues); }var colors = ['red', 'green', 'blue', 'yellow', 'grap'];
var color = colors[selectForm[0, colors.length -1]] // 随机获取数组值