JS 引用类型
object类型:
js中大多数引用类型都是Object类型的实例。创建object实例有两种方法:第一种是使用new操作符后跟Object构造函数。
var obj = new Object();
obj.name = 'long';
第二种是对象字面量。
var obj = {
name:'long',
'la la':111
};
访问对象属性,一般优先使用 ‘.’ 操作符,在属性名是变量或者属性名不符合ECMAScript标识符规范时,可以用 ‘[ ]’访问,如果不是变量需要给属性名加上引号。
Array类型:
JS中数组每项可以保存任意类型的值。
创建数组有两种方式:第一种是使用Array构造函数。
var arr = new Array(); //不推荐
var arr = Array(); //不推荐
第二种是字面量。
var arr = ["red","blue","green"];
数组的length属性可以读写。
检测数组:
在没有框架的情况下,检测数组:
if(value instanceof Array){
//do something
}
ES5新增Array.isArray()方法。不管是在哪个全局执行环境中创建的数组,都能检测到底是不是数组。支持的浏览器:IE9+、Firefox 4+、Safari 5+、Opera 10.5+、Chrome。
if(Array.isArray(value)){
//do something
}
转化方法:
数组调用toString()方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。value()返回的还是数组。join()方法可以以指定的分隔符将数组分割成字符串。
var arr = ["red","green","blue"]; arr.toString(); //"red,green,blue" arr.valueOf(); //["red","green","blue"]
arr.join('|'); //"red|green|blue"
console.log(arr); //["red","green","blue"]
这些方法都不改变原数组。
栈方法:
push()在数组的末尾添加一项,返回数值修改后的长度。pop()删除数组的最后一项,并返回删除的项。两个方法都改变原数组。
var arr =["red","green","blue"]; console.log(arr); //["red","green","blue","yellow"] var move = arr.pop(); //"yellow" console.log(arr); //["red","green","blue"]
队列方法:
shift()删除数组的第一项,并返回该项。unshift()在数组的开头添加一项,并返回新数组的长度。
重排序方法:
reverse()方法反转数组,sort()按照从小到大的方式将数组排序(将每项作为字符串排序)。两个方法都改变原数组并返回改变后的数组。
var arr = [1,2,3,4,11,20]; arr.reverse(); //[20,11,4,3,2,1] arr.sort(); //[1,11,2,3,4,20]
sort()还可以接受一个比较函数作为参数。该函数接受两个参数:数组每次比较的两个项,如果函数返回-1,则两参数不改变位置,如果返回1,则两参数颠倒位置。
var arr = [1,2,3,4,11,20,5];
arr.sort(function(prev,next){
return prev > next ? 1 : -1;
}) //[1,2,3,4,5,11,20]
sort()方法还可以给数组对象根据不同的属性进行排序:
var arr = [
{
name : "long",
age : 20,
time : "2017 11 13"
},
{
name : "tom",
age : 18,
time : "2015 11 1"
},
{
name : "air",
age : 22,
time : "2018 11 11"
},
]
function reSort(arr,type){
return arr.sort(function(prev,next){
return prev[type] > next[type] ? 1 : -1;
})
}
reSort(arr,'name'); //[{name:'air'...},{name:'long'...},{name:'tom'...}]
reSort(arr,'age'); //[{name:'tom'...},{name:'long'...},{name:'air'...}]
reSort(arr,'time'); //[{name:'tom'...},{name:'long'...},{name:'air'...}]
操作方法:
concat()拼接数组。不改变原数组。返回拼接后的数组。
var colors = ["red"];
var colors2 = colors.concat("yellow",["green","black"]);
console.log(colors); //["red"]
console.log(colors2); //["red","yellow","green","black"]
slice() 基于数组中的一项或多项创建一个新数组,接受一个或两个参数,一个参数时,新数组从参数位置到数组末尾,两个参数时,分别代表数组的开始和结束位置。不改变原数组,返回创建的新数组。
var colors = ["red","black","green","yellow"];
colors.slice(1); //["black","green","yellow"]
colors.slice(1,3); //["black","green"]
splice() 最强大的数组方法。主要用途向数组中部插入项。
删除任意项,两个参数,第一个参数:要删除项的开始位置,第二个参数:删除项的长度。如果只有一个参数时,会从开始位置一直删除到结束。
插入任意项:三个参数,第一个:起始位置,第二个:要删除项的长度,第三个:要插入的项,如果要插入多项,可以接受第四、第五、、、..任意多项。
替换:同上。
splice() 会改变原数组,返回删除的项组成的数组,如果没有删除则返回空数组。
位置方法:
ES5:indexOf()、lastIndexOf() 没有找到返回-1。查找时使用全等操作符。
迭代方法:
ES5:
every():每一项都返回true,则返回true;
filter():将返回true的项组成数组返回;
forEach():没有返回结果;
map():返回每次调用的结果组成的函数;
some():任意一项为true,则返回true;
归并方法:
ES5:reduce()、reduceRight()
两个方法会迭代数组的每一项。然后构建一个最终返回的值。接受两个参数:一个在每一项上调用的函数和作为归并基础的初始值。传入改方法的函数接受四个参数:前一个值、当前值、项的索引和数组对象。函数的任何值都会作为第一个参数自动传给下一项,第一次迭代发生在第二项。
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,array){
return prev + cur;
})
console.log(sum); //15
var sum2 = values.reduce(function(prev,cur,index,array){
return prev + cur ;
},10)
console.log(sum2); //25
Date类型:
var time = new Date();
构造函数可以接受一个参数,日期格式(“yyyy-MM-dd hh:mm:ss”),返回该时间的日期对象。Date()接受参数时,其实是后台默认调用Date.parse()方法或Date.UTC()方法。
ECMAScript没有定义应该支持哪种日期格式,所以一般的写法都可以。
var now = new Date("2017 11 13"); //Mon Nov 13 2017 00:00:00 GMT+0800 (中国标准时间) 调用的是Date.parse()
var now2 = new Date(2017,11,13); //Wed Dec 13 2017 00:00:00 GMT+0800 (中国标准时间) 调用的是Date.UTC()
Date.UTC() 方法是基于0的月份。
ES5新增了Date.now()方法,返回当前时间的毫秒数。其实也可以通过+操作符将Data对象转成成毫秒数。
var start = +new Date(); console.log(start); //1510567596510 number类型
继承方法:
Date类型也重写了toLocaleString()、toString()、valueOf()方法。valueOf()会返回日期对象的毫秒数。可以直接用日期对象比较大小。
日期格式化方法:
....
日期、时间组件的方法:
F12——打开控制台(Console)——输入:Date.prototype——回车,即可看到该浏览器支持的所以Date方法。
RegExp类型:
通过下面方法就可以创建一个正则表达式:
var reg = /pattern/flags;
pattern(模式)部分可以是任何简单或者复杂的正则表达式。
flags:g(全局)、i(不区分大小写)、m(表示多行)。
模式中的元字符必须转义:(){}[]\^$|?*+.
另一种创建正则表达式的方法是用RegExp构造函数。接受两个参数,一个是要匹配的字符串模式,一个是标志字符。可以使用字面量创建的正则,都可以用构造函数创建。模式中包含变量时,用构造函数创建。构造函数模式中的某些字符串需要双重转义。
var str = 'at'; var reg = RegExp(str,g);
RegExp实力属性:
没用
RegExp实例方法:
exec():专门为捕获组设计的。接受一个参数,即要匹配的字符串,返回包含第一个匹配项信息的数组,没用匹配项时返回null。返回的数组实例包含两个额外的属性:index和input,index:匹配项在字符串中的位置,input表示应用正则表达式的字符串。数组中第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串。如果没有捕获组,则该数组只有一项。
var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;
var matches = pattern.exec(text);
console.log(matches.index); //0
console.log(matches.input); //"mom and dad and baby"
console.log(matches[0]); //"mom and dad and baby"
console.log(matches[1]); //" and dad and baby"
console.log(matches[2]); //" and baby"
exec()即使在模式中设置了g,它每次也只会返回一个匹配项,如果多次调用的话,则每次调用都会在字符串中继续查找。
test() 接受一个字符串参数。返回true或者false
RegExp构造函数属性:
$1、$2、..$_、$+、$*、....
Function类型:
今天先到这里- -.
JS 引用类型的更多相关文章
- 从一个简单例子来理解js引用类型指针的工作方式
<script> var a = {n:1}; var b = a; a.x = a = {n:2}; console.log(a.x);// --> undefined conso ...
- JS引用类型之——数组
前言 数组作为JS中非常常用的引用类型,其功能是非常强大滴,今天小猪就彻底的看了下它.为了防止猪脑子不够用所以记录在案呐 1.数组的创建 var arrayObj = new Array(); //创 ...
- js引用类型数组去重-对象标记法
前言 Js数组去重已经有很多种实现方式:包括逐个检索对比(使用Array.property.indexOf),先排序后对比,使用hash表,利用ES6中的Set()等.这些数组去重办法中速度最快的是h ...
- js引用类型之valueof和tostring(三)
一.摘要: <javascript高级程序设计第三版>一书中单独有一章对js的引用类型(Object.Array.RegExp.Function:基本包装类型:Boolean.Number ...
- js——引用类型和基本类型
js中的数据类型有以下几种: 基本类型:Number Boolean String undefined null Symbol 引用类型:Object(Array, Function, Date ...
- js引用类型赋值,深拷贝与浅拷贝
JS中引用类型使用等号“=” 赋值,相当于把原来对象的地址拷贝一份给新的对象,这样原来旧的对象与新的对象就指向同一个地址,改变其中一个对象就会影响另外那个对象,也就是所谓的浅拷贝.例如: var ar ...
- js引用类型深拷贝、浅拷贝方法封装
引用类型的深拷贝.浅拷贝在前端领域一直是个很重要的知识点,不仅在业务中频繁使用,也是面试官们喜欢考的的知识点之一.本篇将封装引用类型的深拷贝.浅拷贝方法,并解决在封装过程中出现的问题. 一.浅拷贝 浅 ...
- JS引用类型之——RegExp
前言 之前小猪分享过关于正则表达式的一些内容,具体请看传送门,今天小猪来分享怎么在js中使用正则表达式. 定义 ECMAScript通过RegExp类型来支持正则表达式.使用下面类似Perl的语法,就 ...
- js 引用类型比较
看到别人提的一个问题,说为什么,他们是fasle 然后自己也测试了一番觉得应该是这样的, var a=[1,2,3,4]; var b=a; var c=[1,2,3,4]; if(a==b){ al ...
随机推荐
- 关于AVALON总线动态地址对齐
在NIOS的使用中,我们往往要用到自定义外设,然后通过AVALON交换架构和NIOSII进行通信. AVALON总线,其实是一种交换架构的协议,在自定义外设挂在AVALON总线上时,一定要注意地址对齐 ...
- HDU1081 最大字段和 压缩数组
最大字段和题型,推荐做题顺序: HDU1003 HDU1024 HDU1081 zoj2975 zoj2067 #include<cstdio> #include< ...
- IDL 数组相关函数
1.信息获取 Size()函数能够获取数组的相关信息.不设置关键字是,函数返回变量的基本信息:第一个返回值是变量的维数N_dims,但当变量是敞亮或未定义是返回值为0:第二个 到第N_dims+1个返 ...
- JSONP、图片Ping、XMLHttpRequest2.0等跨域资源请求(CORS)
跨域:当协议.主域名.子域名.端口号中任意一个不相同时都不算同一个域,而在不同域之间请求数据即为跨域请求.解决方法有以下几种(如有错误欢迎指出)以请求图片url为例: 1.通过XMLHttpReque ...
- 【学习】js学习笔记:数组(二)
二维数组 例子:矩形反转: <script> var arr=[[1,1,1,1,1],[2,2,2,2,2],[3,3,3,3,3],[4,4,4,4,4],[5,5,5,5,5]]; ...
- Fiddler使用总结(一)
与后端数据通信是前端日常开发的重要一环,在与后端接口联调的时候往往需要通过查看后端返回的数据进行调试.如果在PC端,Chrome自带的DevTools就已经足够用了,Network面板可以记录所有网络 ...
- maven overlays 合并多个war
http://kyfxbl.iteye.com/blog/1678121 http://jdonee.iteye.com/blog/794226
- LINUX 笔记-free命令
free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer. focus@ubuntu:~$ free -h total used free shared b ...
- Python3中urllib详细使用方法(header,代理,超时,认证,异常处理) 转
urllib是python的一个获取url(Uniform Resource Locators,统一资源定址器)了,我们可以利用它来抓取远程的数据进行保存哦,下面整理了一些关于urllib使用中的一些 ...
- MongoDB关系与数据库引用
MongoDB关系: MongoDB 的关系表示多个文档之间在逻辑上的相互联系.文档间可以通过嵌入和引用来建立联系. 1. 嵌入关系: 形式:把一个文档嵌入到另一个文档中. 优点:数据保存在单一的文档 ...