引用类型详解

Object(对象):

  • 创建:
var obj = new Object();
obj.name = "lyn";   //new操作符 + Object构造函数
var obj = {name: "lyn", age = 12, sex: "famale"};//字面量方法
  • 引用:

(1)方括号表示法:obj[“name”];或者var x = “name”;obj[x];优势是可以用变量来表示属性名,如果属性名中包含会导致语法错误的字符,可以使用方括号表示法。
(2)点引用法:obj.name;点引用法更快,因为方括号引用需要根据属性名去遍历对象的每个属性名。

Array(数组):

在ECMAScript中,可以动态调整数组的length,数组中的每一项可以是任意类型的值。

  • 创建:
 var arr = new Array();
 new Array(3);
 new Array("lyn", "name", 12);       //new操作符 + Array构造函数
var arr = ["lyn", "name", 12];  //对象字面量
  • 引用:
arr[2]; //下标表示法
  • 检测数组类型:
value instanceof Array   //同一个作用域
Array.isArray(value)     //不同作用域也可以检测是不是数组类型
  • 转换方法:
value.toString();   //将数组用逗号隔开返回字符串。
value.valueOf();   //返回数组本身。
value.toLocaleString(); //按照当前地区的本地格式返回字符串。Date、超过4位的数字等等。
value.join("~");        //以“~”为分隔符返回数组的字符串形式,默认分隔符是逗号。
  • 插入和删除项:

1)栈方法:栈:后进先出(LIFO) ,从数组后面进,从数组后面出

var arr = ["lyn", "er", 12];
arr.push("3", "4"); //将这两项放在arr数组的后面,改变了arr数组。返回值是改变后的数组的length值。
arr.pop(); //移除arr数组的最后一项。返回值是被移除的内容。

2)队列方法:先进先出(FIFO),从数组后面进,前面出

var arr = ["lyn", "er", 12];
arr.push("3");              //将3加在arr数组的后面,改变原数组,返回新数组的长度
arr.shift();                //将数组最前面的一项移除,返回被移除的项

模拟队列:
unshift(“3”)、pop()和push(“3”)、shift()
模拟栈:
push(“3”)、pop()和shift()、unshift(“3”)

重排序方法:

(1)value.reverse():颠倒数组的顺序;
(2)value.sort(compare):compare是比较函数,默认将数组的每个值toString()进行比较,并按照升序排序。

[1,3,15].sort()  //[1,15,3] 

比较函数的作用:
比较函数有两个参数,若是第一个参数应该在第二个参数的前面,则返回负数;
若是第一个参数应该在第二个参数的后面,则返回一个正数。否则返回0;

//(1)升序排序:(大数在后面)
function com(a, b) {
	if(a < b){
		return -1;
     }else if(a > b) {
        return 1;
     }else{return 0;}
}
[1,4,2,6,3,0,9,4].sort(com);
//(2)简洁写法:
function com(a, b) {
	return a-b;
}                     //返回b-a则是降序

操作方法:

(1)连接数组:value.concat(value2)
不改原数组,复制当前数组,并把value2加到value后面形成新数组。若value2是一个数组,则把数组中的每一项都添加进去。
(2)value.slice(a,b)
a必需,b可选,不改变原数组,返回起始位置和结束位置之间的项的数组。(不包括结束位置)
结束位置小于开始位置,返回空数组。
若参数有负数,则表示是从尾部开始计算。-1:倒数第一个数
(3)value.splice(a, b, c):
删除、替换、插入,可以改变原数组,返回的是被删除的项。 a:起始位置(必选)b:删除的项数(必选) c:插入的内容(可选)

var x = [1,2,3,4];
y = x.splice(1,1,"red");    //x:[1,"red",3,4]   y:2

位置方法:

var arr = [1,2];
arr.indexOf(2);
arr.lastIndexOf(1);

注意事项:

(1)按照全等(===)来做比较,indexOf:从前面往后面找;lastIndexOf:从后面往前面找。

(2)接收两个参数,indexOf(a,b) a:要查找的项,必需;b:查找的起始位置(索引,从哪里开始查找),可选。

(3)返回值:查找的项的位置索引;没找到的话,返回-1。

迭代方法

  • 对数组的每一项进行同样的处理,这些方法接收2个参数,第一个就是每一项进行的函数;第二个可选,是运行该函数的作用域对象,影响this的值。
  • 每一项进行的函数接收3个参数,(1)数组项的值 (2)该项在数组中的位置 (3)数组对象本身
  • 以下方法都不会改变原数组的值
    (1)every():
    返回布尔值,对数组的每一项处理都返回true,则every()返回true;否则返回false。
    (2)some():
    返回布尔值,对数组的每一项处理,只要有一项返回true,则some()返回true;否则返回false。
    every()和some()用于查询数组中的项是否满足于某一个条件。
var arr = [1,2,3,4,3,2,1];
var result = arr.every(function(item, index, array) {
	if(item > 2) {
		return true;
	}
});
console.log(result);   //false

(3)filter():
返回由执行函数返回为true的项组成的数组。
(4)map():
返回每一项处理后的结果。
(5)forEach():
没有返回值,直接对数组的每一项进行处理、相当于for循环处理数组。

缩小方法:

reduce()和reduceRight()
迭代数组,最后构建一个返回的值。函数的区别是从左开始还是从右开始遍历数组。

  • 两个参数:
    运行函数、作为缩小基础的初始值(可选)。
  • 运行函数四个参数:
    前一个值、当前值、索引值、数组对象。前一个值指的是前一个运行函数的返回值。第一次迭代是从数组的第二个项开始的。
var arr = [1,2,3];
var result = arr.reduce(function(prev, cur, index, array) {
    return prev + cur ; 
}, 100);
console.log(result);     //106

Date类型:

var date = new Date(); //返回当前时间的对象
  • 创建指定时间的对象:
new Date() //传入时间参数

上述函数的参数是 UTC时间(国际协调时间)1970年1月1日到指定时间的毫秒数,此毫秒数通过Date.parse()和Date.UTC()获得。
(1)Date.parse()的参数是表示日期的字符串
例如“May 23, 2004”等
(2)Date.UTC()的参数是数值:年,月,日,时,分,秒 (年、月必需,0表示一月,1表示2月)

Date.UTC(2019,3,2,17,55,55);  201932日下午55555
  • Date.now():返回当前时间的毫秒数;
   //常用于查看某段代码执行的时间:
   var start = Date.now(); 
   doingSomething(); 
   var stop = Date.now();
   time = stop - start ;

注:Date.now()和+new Date()返回值一样,在不支持now()方法的时候可以使用+new Date()来代替。

  • 日期格式化方法:

将日期转换为字符串表示
toDateString()
toTimeString()
toLocaleDateString()
toLocaleTimeString()
toUTCString()

  • 日期时间组件方法:

直接取得和设置日期值中特定的部分

RegExp类型:

  • 创建方法:
 var expresstion = / pattern/ flag ;(字面量形式)
 var expresstion  = new RegExp(pattern, flag);(构造函数形式定义)

flag标志:
g: 全局模式global;
i:不区分大小写;
m:多行匹配;
元字符转义:
若匹配的字符串要匹配这些元字符,需要对其进行转义“\”;使用new RegExp()方法的时候,字符串模式需要加“\”进行双重转义。

ES6规定,无论使用哪种方法创建,每次创建都是新的实例。比如for()循环中。
RegExp实例属性:lastIndex:下一次匹配开始的位置;

  • RegExp实例方法:

var re = /cat/g;
(1)re.exec()获取捕获组的方法
返回数组,虽然是Array的实例,但是包含index和input两个属性,index是匹配项在原字符串的位置坐标。Input是原始输入的字符串。
返回的数组的第一项是匹配的字符串,之后是相应的捕获组。
(2)re.test();返回布尔值,用于检测输入的内容是否匹配模式。
toString()和toLocaleString()返回正则的字面量的字符串形式(“/cat/g”)。valueOf()返回其本身(/cat/g)。
构造函数的属性:RegExp

Function类型:

函数定义的三种方式:
(1)函数声明: function f1() {}
(2)函数表达式:var f1 = function() {}
(3)Function构造函数:var f1 = new Function()

String类型-操作方法:

  • (1)字符操作:
var x = "lyne";
x.charAt(3); //e
x.charCodeAt(3); //101(e的字符编码)
x[3];  //e,方括号加下标表示法
String.fromCharCode("101"); //e (将编码转换为字符)
  • (2)字符串操作:var x = “lyne34rd”;
x+"123"; //lyne34rd123  字符串拼接
x.slice(1,2)、x.subString(1,2)、x.subStr(1,3); //不改原string,取一部分string。subStr的第二个参数是新字符串的长度
  • (3)字符串位置操作:var x = “lener”;
x.indexOf("e");  //1(没找到返回-1)
  x.lastIndexOf("e");  //3(从后往前找)
  • (4)字符串删除空格前后缀:var x = " hello ";
  x.trim(); //"hello"
  • (5)字符串大小写操作:var x = “yn”, y = “EE”;
   y.toLowerCase();//ee   x.toUpperCase(); //YN
  • (6)正则匹配、子字符串替换:

匹配:match()
和数组的exec()一样,返回捕获组的内容。参数是正则表达式或者正则对象
查找:search()
参数和match()一样,返回数值(找不到返回-1)

var x = "cat,bat"; x.search(/at/);  //1

替换:replace()

var x = "cat,bat,hat";
x.replace("at","o"); //"co,bat,hat"
x.replace(/at/g,"o); //"co,bo,ho"
x.replace(/at/g, function(match, index, text){switch(){case:......}}); //根据匹配项的不同选择不同的文本替换
x.replace(/(.at)/g, "word($1)");  //特殊字符:将最近匹配的结果插入替换项

分割:split()
string 转换为 Array

x.split(","); // 用逗号分割字符串,保存为数组
x.split(",", 2); //限制分割后的数组长度
x.split(/[^\,]+/); //["", ",", ",", ",", ""] 分隔符不同,可以使用正则来做分隔符,[^]表示匹配未包含的任意字符

字符串比较:

str.localeCompare(anotherStr); //返回0、正值、负值.

按照字母表中的大小顺序。1表示str在anotherStr的前面。

Global对象和Math对象:

Math.ceil():向上舍入
Math.floor():向下舍入
Math.round():四舍五入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值