基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。
基本类型包含Undefined、Null、Boolean、Number、String
,这5种基本数据类型是按值访问的,由于能够操做保存在变量中的实际值。
而在操做对象时,其实是在操做对象的引用而不是实际的对象。
为了方便操做基本类型值,ECMAScript 还提供了 3 个特殊的引用类型:Boolean、Number
和String
,以便于使用对象方法操做基本类型值,引用类型与基本包装类型的主要区别就是对象的生存期,基本包装类型自动建立,并在代码执行后自动销毁实例。java
Sring类型用于表示由零个或多个16位Unicode字符组成的字符序列,即字符串。正则表达式
字符串能够由单引号和双引号组成,二者没有区别数组
var firstName = 'Nicholas'; var lastName = "Zakas";
ECMAScript中的字符串是不可变的。字符串一旦建立,它们的值就没法改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,而后在用一个包含新值的字符串来填充该变量。函数
把一个值转化为一个字符串有两种方式。
第一种使用toString()
方法,数值,布尔值,对象,和字符串值 。可是null
和undefined
值没有这个方法。this
var age = 11; age.toString(); var bool = true; bool.toString(); //能够传递参数,表明输出数值的基数。 age.toString(2);//11
String类型是字符串的对象包装,可使用String构造函数来建立。编码
var stringObject = new String("hello world");
全部String对象的方法也能够在全部基本的字符串值中访问到,其中继承的value()
,toLocaleString()
和toString()
方法,都返回对象所表示的基本字符值。url
(一)字符方法charAt()
和charCodeAt()
,都接收一个参数,基于0的字符位置。charAt()返回给定位置的字符,charCodeAt()
返回字符编码。
(二)字符串操做方法concat()
方法,接收任意多个参数,返回一个新的字符串,不改变原字符串。可使用+代替。code
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。一个从头开始,另外一个从尾开始。blog
(四)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"
和其余语言同样,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; });