资讯专栏INFORMATION COLUMN

基本类型String和引用类型Array

Invoker / 1908人阅读

摘要:区分基本类型和引用类型基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。基本包装类型类型类型是字符串的对象包装,可以使用构造函数来创建。对数组中的每一项运行给定函数,返回该函数返回的项组成的数组。

区分基本类型和引用类型

基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。
基本类型包含Undefined、Null、Boolean、Number、String,这5种基本数据类型是按值访问的,因为可以操作保存在变量中的实际值。
而在操作对象时,实际上是在操作对象的引用而不是实际的对象。
为了方便操作基本类型值,ECMAScript 还提供了 3 个特殊的引用类型:Boolean、NumberString,以便于使用对象方法操作基本类型值,引用类型与基本包装类型的主要区别就是对象的生存期,基本包装类型自动创建,并在代码执行后自动销毁实例。

基本类型 String类型 定义:

Sring类型用于表示由零个或多个16位Unicode字符组成的字符序列,即字符串。

表示:

字符串可以由单引号和双引号组成,两者没有区别

var firstName = "Nicholas";
var lastName = "Zakas";
字符串的特点:

ECMAScript中的字符串是不可变的。字符串一旦创建,它们的值就无法改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后在用一个包含新值的字符串来填充该变量。

转化为字符串:

把一个值转化为一个字符串有两种方式。
第一种使用toString()方法,数值,布尔值,对象,和字符串值 。但是nullundefined值没有这个方法。

var age = 11;
age.toString();
var bool = true;
bool.toString();

//可以传递参数,代表输出数值的基数。
age.toString(2);//11
基本包装类型 String类型

String类型是字符串的对象包装,可以使用String构造函数来创建。

var stringObject = new String("hello world");​

所有String对象的方法也可以在所有基本的字符串值中访问到,其中继承的value()toLocaleString()toString()方法,都返回对象所表示的基本字符值。

String类型的方法

(一)字符方法
charAt()charCodeAt(),都接收一个参数,基于0的字符位置。charAt()返回给定位置的字符,charCodeAt()返回字符编码。
(二)字符串操作方法
concat()方法,接收任意多个参数,返回一个新的字符串,不改变原字符串。可以使用+代替。

var str = "hello";
var res =  str.concat("world")//helloworld
//str仍为hello

还提供3个基于字符串创建新字符串的方法:
slice(),substr(),substring()。都接收一个或两个参数。第一个参数指定子字符串的开始位置,而slice(),substring()第二个参数表示字符串到哪里结束,substr()第二个参数指定返回的个数。都不会修改原字符串。推荐使用slice()

var str = "hello world";
str.slice(3);       //"lo world"
str.substring(3);   //"lo world"
str.substr(3);      //"lo world"
str.slice(3,7);     //"lo w"
str.substring(3,7); //"lo w"
str.substr(3,7);    //"lo worl"
  

(三)字符串位置方法
indexOf()lastindexOf(),两个方法都是从一个字符串中搜索给定的子字符串,然后返回字符串的位置。如果没有找到则返回-1。一个从头开始,另一个从尾开始。

(四)trim()方法
这个方法会创建一个字符串的副本,删除前置和后缀的空格。不改变原字符。

var str = "  hello   ";
str.trim();//hello

还有非标准的trimLeft(),trimRight(),用于删除字符串开头或末尾的空格

(五)字符串的模式匹配方法
1.search()
查找字符串,接受一个参数为正则表达式或字符串,返回一个与之匹配的子串的起始位置。若未找到返回-1。
例 :javaScript.search(/script/i);//返回4
search属性不支持全局属性检索,所以会忽略修饰符g
2.replace()
用以执行检索与替换操作,接受两个参数,第一个参数是正则或字符串,第二个参数是要进行替换的字符串或一个函数,不修改原字符串 。
若第一个参数是字符串,replace()则会直接搜索这个字符串
如果想要替换所有子字符串,唯一办法就是提供一个正则表达式。而且还要指定(g)标志。

var text = "cat, bat, sat";
var res = text.replace(/at/g,"ond")
res//"cond, bond, sond"
text//"cat, bat, sat"

3.match()
接受唯一一个参数,就是正则表达式,返回一个由匹配结果组成的数组。
例:“1 plus 2 equal 3”.match(/d+/g/);//返回["1","2","3"]
如果没有设置修饰符,,就不会进行全局检索,也会返回一个数组,数组的第一个元素保存匹配的字符串,余下的元素保存正则表达式中用圆括号括起来的子表达式。
例:解析一个url

var url = /(w+)://([w.]+)/(S*)/;
var text = "Visit my blog at http://www.example.com/-david";
result = text.match(url);
if(result != null){
    var fullurl = result[0];//"http://www.example.com/-david"
    var protocol = result[1];//"http"
    var host = result[2];//"www.examplr.com"
    var path = result[3];//"-david"
}

4.split()
用以将调用它的字符串拆分为子串组成的数组,使用分隔符是split()的参数,返回一个数组。
参数为字符串

“123,456,789”.split(","); //返回["123,"456","789"];

参数为正则

“1,2  3,4 ,5”.split(/s*,s*/)//返回["1","2","3","4","5"]  

(六)localeCompare()方法
如果字符串在字母表中排在参数前,返回一个负数。
如果相等,则返回0;
如果字符串在字母表中排在参数之后,返回一个正数。

(七)fromCharCode()方法
接收一个或多个字符编码,返回一个字符串

String.fromCharCode(104,101,101,108,111)//"hello"
引用类型Array

和其他语言一样,javaScript中的数组是一个有序列表。但和其他语言不同的是,javaScript数组的每一项可以保存任何类型的数据。

创建数组

有两种基本方式,第一种使用Array构造函数,用new创建数组数组(new可以省略)

var colors = new Array("red","blue","green");

第二种使用字面量创建

var colors = ["red","blue","green"];
栈方法

javaScript为数组专门提供push()pop()方法,以便实现类似栈的行为。
push()可以接收任意数量的参数,把他们添加到数组末尾,返回修改后数组的长度。
pop()方法从数组末尾移除一项,减少数组的length值,返回移除的项。

队列方法

结合使用shift(),push(),可以像使用队列一样的数组。
同时使用unshift()pop()方法,可以从相反的方向来模拟队列。
shift():从数组头部删除一个元素,返回被移除的元素。
unshift():从数组头部添加一个元素,返回数组的长度。

重排序方法

数组中已经存在两个可以直接用来重排序的方法:reverse()sort()。

valvalues=[1,2,3,4,5];
values.reverse();
alert(values);//5,4,3,2,1

sort()方法按升序排列数组项,sort()方法可以接收一个函数作为参数,修改排序。

function compare(a,b){
    if(a < b){
        return -1;
    }
    else if(a > b){
        return 1
    }
    else{
        return 0;
    }
}
var values = [4,5,1,3,2];
values.sort(compare);
alert(values);//1,2,3,4,5
对于数值型可以直接写成
function compare(a,b){
    return a-b;//降序
}
操作方法

concat(),将接收到的参数添加到数组的末尾,返回一个新数组,不修改原数组。

var colors  = ["red","green","blue"];
var colors2 = colors.concat("yellow","red");
alert(colors);//red,green,blue
alert(colors2);//red,green,blue,yellow,red

slice():能够基于当前数组中的一个多项创建一个新数组。slice()方法可以接收一个或两个参数,即返回项的起始和结束位置。不会影响原始数组。
splice()方法有很多种用法,始终都是返回一个数组。直接修改原数组

var colors = ["red","green"];
//删除:指定2个参数:删除第一项的位置,和删除的项数,返回删除的项
 var colors4 = colors.splice(0,2);
 //插入:提供三个参数,起始位置,0(要删除的项数),要插入的项,返回空数组
 var colors5 = colors.splice(0,0,"1","2");
 //替换:提供3个参数,起始位置,要替换的项数,要插入的项,返回替换的项
 var colors6 = colors.splice(0,2,"red","green");​
位置方法

indexOf()lastIndexOf().两个方法都接收两个参数要查找的项和(查找的起始位置)。
在比较第一个参数中的每一项时,会使用全等操作符。

迭代方法

javaScript定义了5个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(运行该函数对象的作用域——影响this的值)。传入这些方法的函数会接收三个参数。数组项的值,该项在数组中的位置,数组对象本身。都不会修改数组的值。
every():对数组中的每一项运行给定函数,如果该函数每一项都返回true,则返回true。
filter():对数组中的每一项运行给定函数,返回该函数返回true的项组成的数组。
forEach():对数组中的每一项运行给定函数,没有返回值。
map():对数组中的每一项运行给定函数,返回每次函数调用结构组成的数组。
some():对数组中的每一项运行给定函数,如果该函数对任意一项返回true,则返回true

var number = [1,2,3,4,5,4,3,2,1];
var everyResult = number.every(function(item,index,array){
    return (item>2);
});
alert(everyResult);//false

var someResult = number.some(function(item,index,array){
    return (item>2);
});
alert(someResult);//true

var filterResult = number.filter(function(item,index,array){
    return item>2;
});
alert(filterResult);//[3, 4, 5, 4, 3]

var mapReuslt = number.map(function(item,index,array){
    return item*2;
});
alert(mapResult);//[2, 4, 6, 8, 10, 8, 6, 4, 2]

var num = [];
var forEachResult = number.forEach(function(item,index,array){
    if(item!=0){
        num += item;
    }
});
alert(num);//"123454321"
alert(forEachResult)//undefined
缩小方法

Reduce()reduceRight(),这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。reduce()方法从数组的第一项开始,逐个遍历到最后。reduceRight()则相反.
都接收两个参数:一个在每一项上调用的函数和(作为缩小基础的初始值)。调用的函数接收4个参数:前一值,当前值,项的索引和项的数组。这个函数返回的任何值都会作为参数返回。

//执行求和操作
var arr = [1,2,3,4,5];
var sum = arr.reduce(function(prev,cur,index,array){
    return prev + cur;
});

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91084.html

相关文章

  • 温故js系列(1)-基本数据类型引用数据类型判断&存储访问&类型转换

    摘要:引用数据类型引用数据类型值指保存在堆内存中的对象。访问方式是按引用访问。数据类型检测操作符是检测基本类型的最佳工具。未定义布尔值字符串数值对象或函数用于检测引用类型,可以检测到它是什么类型的实例。 前端学习:教程&开发模块化/规范化/工程化/优化&工具/调试&值得关注的博客/Git&面试-前端资源汇总 欢迎提issues斧正:数据类型 回味,无穷! 数据类型定义 数据类型分类 基本数据...

    jone5679 评论0 收藏0
  • 1、自定义类型的定义及使用 2、自定义类的内存图 3、ArrayList集合的基本功能 4、随机点名

    摘要:自定义类的概述自定义类的概述代码映射成现实事物的过程就是定义类的过程。自定义类的格式自定义类的格式使用类的形式对现实中的事物进行描述。 01引用数据类型_类 * A: 数据类型 * a: java中的数据类型分为:基本类型和引用类型 * B: 引用类型的分类 * a: Java为我们提供好的类,比如说:Scanner,Random等。 * b: 我们自己创建的类...

    only_do 评论0 收藏0
  • 细数判断数据类型的各种方法

    摘要:可用于判断多种数据类型基本数据类型和内置对象,然而对于一些自定义构造函数生成的对象就不能进行判断了。判断是不是所有数据类型中,只有不等于它本身判断数组的方法除了上文提到的三种方法可判断外,还有一个构造函数自带的方法可判断。 数据类型的分类 要想判断数据类型,首先要知道数据类型的分类。数据类型分为基本数据类型和引用数据类型。 基本数据类型 基本数据类型有 五 种,ES6中新加了第 六 种...

    hoohack 评论0 收藏0
  • 基础回顾-javascript数据类型

    摘要:栈区由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。属性返回对创建此对象的构造函数的引用。所有的和都是宿主对象参考高级程序设计堆和栈的概念和区别全面解析中的数据类型与类型转换 数据类型 数据类型划分 javascript中定义了6中基本数据类型(原始值类型),和一种复杂数据类型(引用类型),所谓复杂类型,其本质是由无序的名值对(key:val...

    codergarden 评论0 收藏0
  • JavaScript的数据类型及其检测

    摘要:值的比较只进行值的比较会进行数据类型的转换。只要在当前实例的原型链上,我们用其检测出来的结果都是。但检测与不一样,还可以处理基本数据类型的检测。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有几种类型的值? Javascript有两种数据类型,分别是基本数据类型和引用数据类型。其中...

    starsfun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<