引用类型

Posted liqian-front-end-engineer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了引用类型相关的知识,希望对你有一定的参考价值。

  1. Object类型:创建对象可采用new操作符或者对象字面量的方式,采用对象字面量的方式不会调用Object构造函数,可以用方括号访问对象[属性]或者通过点表示法访问对象.属性;
  2. Array类型:创建数组也可以采用new操作符或者数组字面量的方式,可以通过数组下标的方式访问数组元素,可以通过修改length属性的大小来移除或者添加数组末尾元素,如果length属性的大小超过了原本设定的大小,则未设定的元素默认是undefined。它存在以下方法:①检测数组:判断某个值到底是不是数组,Array.isArray(value),返回布尔值;②转换方法:数组会继承toLocaleString(),toString(),valueOf()方法,返回一个以逗号分隔开的的字符串,不同的是,toLocaleString()方法会对数组的每个项调用toLocaleString()方法,而toString()则会对数组的每个项调用toString()方法,如果想更换分隔符,可以使用 数组实例.join(字符串形式的分隔符);来替换分隔符,注意:alert()函数参数默认是字符串,因而会在后台调用toString()方法;③栈方法:pop(参数)、push(参数),pop返回移除的项,push返回修改后数组的长度;④队列方法:shift()、unshift(),shift能够在数组前端移除一个项并返回该项,而unshift()能够在数组前端添加任意个项并返回修改过后数组的长度;⑤重排序方法:reverse()、sort(),reverse能够把数组元素顺序倒序,而sort()方法会调用toString()方法,将每个数组元素项按照字符串比较的方法进行排序,因而需要在sort()方法里面添加一个比较函数,function compare(value1,value2)if(value1<value2)return -1;else if(value1>value2)return 1;else return 0;;将此函数作为参数传给sort即可,当然对于纯数值的数组,比较函数可以采用return value1-value2即可;⑥操作方法:实例.concat(参数),会在原本数组的基础上复制数组再在数组的末尾添加上参数构成新的数组并返回新数组;实例.slice(开始位置,结束位置),通过传入数组开始位置和结束位置的数值,返回一个从开始位置到结束位置,但不包括结束位置的项一个新的数组,如果参数有负数,实际位置=数组长度+该参数,该方法还可以插入参数,实例.slice(开始位置,要删除项的数,插入项1....),可以从开始位置插入指定的项,如果要删除项,则相当于替换掉这些项;⑦位置方法:indexIOf(要查找的字符,开始查找的位置),lastIndexOf(要查找的字符,开始查找的位置),分别从数组前和末尾开始找,找到则返回该字符的位置,否则返回-1;⑧迭代方法:5个迭代方法都有两个参数,分别是函数和运行该函数的作用域对象,函数的有三个参数,分别代表数组项的值,数组项的位置,数组对象本身,every()如果每个项的函数都返回ture则返回ture,some()如果有一个项返回ture,则返回ture,filter(),返回一个由ture值的项组成的数组,forEach()没有返回值,map()返回函数调用结果组成的数组;⑨归并方法:reduce()、reduceRight(),这两个方法会一次遍历数组中的每个项,一个从左边开始遍历,一个从右边开始遍历,有两个参数分别是作用于每一个数组项的函数以及作为归并基础的初始值,函数有四个参数,分别是前一个值,当前值,数字项索引,数组对象,这个函数的返回值会作为下一个项函数的第一个参数。
  3. Date类型:使用new Date()即可创建日期对象,构造函数里可以直接传日期格式的字符串,系统会自动调用Date.parse()方法将日期转成该日期的毫秒数,当然使用Date.now()可以返回调用这个方法的当前时间,注意月份是基于0开始的,获取和设置年月日星期时分秒的方法,get/setFullYear/Month/Date/Day/Hours/Minutes/Seconds/Milliseconds();
  4. RegExp类型:语法:/模式/标志  标志有三个:g(全局匹配)/i(不区分大小写)/m(多行匹配),模式里面所有的元字符(()$.+*^\?[])都需要转义,这是通过字面量的形式来定义正则表达式,也可以通过new RegExp(“模式”,”标志串”)来创建正则表达式,元字符需要双重转义,因为传入的是字符串,注意:使用构造函数和字面量表达式创建的正则表达式会创建新的实例;实例具有以下属性:global(g标志是否设置)、ignoreCase(是否设置i标志),multiline(是否设置m标志),source(返回正则表达式的字符串形式)、lastIndex(下一次匹配时开始的位置);实例具有以下方法:①正则实例.exec(模式的字符串);该方法会返回匹配成功的第一个字符串数组,该数组包含两个属性:index和input,index表示匹配成功的位置,input标志正则表达式的字符串,数组的第一项是完整的匹配的字符串,无论是否设置了g标志只返回一个匹配成的字符串,设置g标志后继续调用该方法则会返回第二个匹配的字符串;②正则实例.test(要测试的字符串);匹配成功返回ture,否则false;RegExp构造函数具有以下属性:①input属性返回原始字符串;②leftContext属性返回匹配字符串之前的字符串;③lastMatch属性返回最近一次与整个正则表达式匹配的字符串;④lastParen属性返回最近一次匹配的捕获组
  5. Function类型:函数是对象,函数名是指针,访问函数指针而不执行需要把函数名的括号去掉;①函数没有重载:②函数声明与函数表达式:函数声明会函数执行之前解析并可以使用,而函数表达式只有函数执行到它的代码才执行;③函数内部属性:arguments和this,argument对象是一个类数组,这个类数组包含所有的参数,同时还有一个callee属性,指向函数本身,this的指向在代码的执行过程中可能会指向不同的对象;④函数的caller属性则返回调用该函数的函数的引用,也可以使用arguments.callee.caller表示;⑤函数的属性和方法:length和prototype,length属性表示函数希望接受参数的个数,prototype属性拥有对象所有实例的方法,函数有两个方法:apply(参数1:在其中运行的函数作用域this,参数2:参数列表可以是arguments对象或者数组)和call(this,逐个列出参数),这两个方法都相当于扩充了对象的实例的作用域,比如对象.call(对象实例)即可将对象中的this指向该对象实例,ES5定义了一个新的方法对象.bind(对象实例),这个方法而可以创建一个函数的实例,this将会指向传给bind函数的值
  6. 基本包装类型:String/Number/Boolean,在创建字符串数值布尔值,后台都会创建相应类型的实例然后调用指定的方法,最后销毁该实例;String类型的操作方法:charAt(基于0的字符串位置)将会返回相应的字符,charCodeAt(基于0的字符串位置)返回相应的字符的字符编码,实例.concat(字符串)返回一个拼接的字符串,slice(字符串开始位置,字符串结束位置),substr(字符串开始位置,字符串结束位置),它们都返回字符串,substring(字符串开始位置,返回的字符串个数),如果参数为负值,只有substr的第二个参数为默认为0,其余参数均与字符串长度相加得到新的参数,字符串位置的方法:实例.indexOf(要搜索的字符串),实例.lastIndexOf(要搜索的字符串),它们都返回相应的字符串所在的位置,当然也可以设置第二个参数表示开始搜索的位置;trim()方法返回字符出的副本,并删除所有前缀和后缀的空格,字符串大小写转换方法:toUpperCase()、toLowerCase();字符串的模式匹配方法:字符串.match(正则表达式),这个方法相当于RegExp的exec方法;字符串.search(正则表达式)该方法返回字符串中第一个匹配项的索引;字符串替换方法:字符串.replace(字符串或者正则表达式,字符串中要替换的字符),如果第一个参数是字符串,那么只会替换第一个匹配的字符项,第二个参数也可以是函数,此时函数的第一个参数表示匹配项,第二个参数表示当前索引,第三个参数表示原始字符串;字符串的分隔方法:字符串.split(指定的分隔符/RegExp对象,指定分隔后的数组大小(可选参数))该方法将会把字符串按照字符串中的标识即分隔符分割成多个子字符串并存入数组中;字符串比较的方法:字符串.localeCompare(字符串),如果参数中的字符串与需要比较的字符串相等,则返回0,否则返回-1/1
  7. 单体内置对象:①Global对象:该对象拥有URI编码的方法:encodeURI()只替换空格,encodeURIComponent()替换所有非字母数字字符,解码的方法:decodeURI(),decodeURLComponent()②Math对象:Math.min()/Math.max()能够比较并返回一组数据中的最大值和最小值,如果想传入数组则为Math.min.apply(Math,数组);舍入方法:ceil()向上舍入,floor()向下舍入,round()四舍五入;Math.random()*可能值的总数+第一个可能的值,返回随机数

以上是关于引用类型的主要内容,如果未能解决你的问题,请参考以下文章

JS基本数据类型和引用数据类型

JAVA中值类型和引用类型的区别

c#中值类型和引用类型的区别

JAVA的基本数据类型和引用数据类型的区别

值类型和引用类型 区别

java引用类型的类型转换规则是啥?