辨别基本范例和援用范例
基本范例值指的是简朴的数据段,而援用范例值指那些可以由多个值构成的对象。
基本范例包括Undefined、Null、Boolean、Number、String
,这5种基本数据范例是按值接见的,由于可以操纵保留在变量中的现实值。
而在操纵对象时,现实上是在操纵对象的援用而不是现实的对象。
为了轻易操纵基本范例值,ECMAScript 还供应了 3 个特别的援用范例:Boolean、Number
和String
,以便于运用对象要领操纵基本范例值,援用范例与基本包装范例的重要区分就是对象的生存期,基本包装范例自动建立,并在代码实行后自动烧毁实例。
基本范例 String范例
定义:
Sring范例用于示意由零个或多个16位Unicode字符构成的字符序列,即字符串。
示意:
字符串可以由单引号和双引号构成,二者没有区分
var firstName = 'Nicholas';
var lastName = "Zakas";
字符串的特性:
ECMAScript中的字符串是不可变的。字符串一旦建立,它们的值就没法转变。要转变某个变量保留的字符串,首先要烧毁本来的字符串,然后在用一个包括新值的字符串来添补该变量。
转化为字符串:
把一个值转化为一个字符串有两种体式格局。
第一种运用toString()
要领,数值,布尔值,对象,和字符串值 。然则null
和undefined
值没有这个要领。
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;
});