[TOC]javascript
建立object实例有两种 第一种:new操做符后跟Object构造函数var person = new Object();
第二种:对象字面量前端
var person = { name = "yohann"; age = 22; };
使用对象字面量语法,属性名也能够用字符串 开发人员更青睐对象字面量语法java
alert(person["name"]); alert(person.name);
方括号语法的优势能够经过变量名来访问属性 若是属性包含致使语法错误的字符,或者属性名是关键字或保留字,可使用方括号法 一般,除非必须使用变量来访问属性,建议使用点表示法正则表达式
var colors = new Array();
第二种:使用数组字面量var colors = ["red", "blue", "green"];
数组length属性不是只读的,能够对其读写肯定某个对象是否为数组,能够用Array.isArray()
方法,不用管是哪一个全局环境中建立的 兼容IE9+,Firefox4+,Safari 5+,Opera 10.5+,Chromeexpress
数组的toString方法会返回有数组中每一个值字符串拼接而成的以一个逗号分开的字符串 valueOf方法,toLocaleString方法 调用数组的toLocaleString方法会建立一个以逗号分开的字符串 使用join()方法,可使用不一样的分隔符来构建这个字符串数组
ECMAScript为数组提供push()方法和pop()方法,实现相似栈的行为 push()方法接收任意数量的形参,逐个添加到数组末尾,并返回修改后的长度 pop()方法从数组移出最后一项,减小数组length值,而后返回移出的项浏览器
队列的访问规则是先进先出 shift()
方法,移除数组的第一个项并返回该项,同时数组长度减一。 unshift()
方法,在数组前端添加任意个项,并返回数组的长度 用unshift方法和pop方法能够相反的模拟队列app
数组中存在两个直接用来重排序的方法:reverse(
)和sort()
reverse()方法
:反转数组项的顺序 sort()方法能够接收一个比较函数做为参数值,以便咱们指定哪一个值在哪一个值前面 比较函数经过返回一个小于零,等于零或大于零的值来影响排序结果dom
concat()
方法:基于当前数组中的全部项,建立一个数组。传递给该方法是一个或多个数组,则将每一项添加到结果数组中 slice()
方法: 基于当前数组中的一个或多个项建立数组。接收一个或者两个参数。一个参数返回从这个参数开始到数组末尾的数组。两个参数返回起始和结束位置的项,但不包含结束位置项 splice()
方法:向数组中部插入项函数
indexOf方法和lastIndexOf方法 两个方法都接收两个参数:要查找的项和表示查找起点位置的索引 前者从数组的开头位置(0)开始向后查找,后者从数组的末尾开始向前查找 要查找的项必须严格相等
every()
: 对数组中的每一项运行给定函数,若是函数对每一项都返回true,则返回truefilter()
: 对数组的每一项运行给定函数,返回给函数会返回true的项组成的数组forEach()
: 对数组中的每一项运行给定函数,没有返回值map()
: 对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组some()
: 对数组中的每一项运行给定函数,若是函数对任一项返回true,则返truereduce()和reduceRight()。迭代数组的全部项,构建一个最终的返回值。 reduce()
方法从数组的第一项开始,reduceRight()
则从数组的最后一项开始 接收两个参数:一个在每一项调用的函和(可选的)做为归并基础的初始值 传递的函数接收四个参数:前一个值,当前值,项的索引和数组对象 例如用此方法执行求数组中全部值之和操做
建立日期对象,使用new操做符和Data构造函数便可 不传递参数,自动得到当前的日期和时间。 若根据特定的日期和时间建立时间,必须传入表示该日期的毫秒数 简化这一计算过程提供了两个方法:Data.parse()
和Data.UTC()
前者接收一个表示日期的字符串参数,根据这个字符串参数返回相应日期的毫秒数 Data.parse()
日期格式:
Data.UTC()
方法一样返回日期的毫秒数,不一样的是 Data.UTC()
的参数分别是年份,基于0的月份(一月是0,二月是1),月中的那一天(1到31),小时数(0到23),分钟,秒以及毫秒数 例:var allFIves = new Data(Data.UTC(2005, 4, 5, 17, 55, 55));
Data构造函数会模仿Data.UTC()
,有一点明显不一样,日期和时间丢失基于本地时间而非GMT建立 ECMAScript5添加了Date.now()
方法,返回表示调用这个方法时的日期和时间的毫秒数Data类型也重写了toLocaleString(),toString()和valueOf()方法 前两个方法在不一样的浏览器中返回的日期和时间格式截然不同
Data类型有专门用于将日期格式化为字符串的方法
直接取得和设置日期值中特定部分的方法
ECMAScript经过RegExp类型来支持正则表达式
var expression = /pattern/flags ;
正则表达式的匹配模式支持下列的3个标志
RegExp的主要方法是exec(),专门为捕获组而设计的。exec()接受一个参数,即要应用模式的字符串,而后返回包含第一个匹配项信息的数组;或者在没有匹配项的状况下返回null。返回的数组包含两个额外的属性:index和input。 index表示匹配项在字符串的位置,input表示应用正则表达式的字符串 RegExp的第二个方法是tes(),它接受一个字符串参数,在模式与该参数匹配的状况下返回true,不然返回false RegExp实例继承的toString
和toLocaleString
方法都会返回正则表达式的字面量
构造函数包含一些属性,基于所执行的最近一次正则表达式操做而变化。这些属性分别有一个长属性名和短属性名
ECMAScript正则表达式有一些不支持的特性
每一个函数都是Function类型的实例。 使用函数表达式定义函数,不必使用函数名
建立第二个函数会覆盖引用第一个函数变量
函数声明和函数表达式并不是彻底一致,
alert(sum (10, 10)); function sum(num1 + num2) { return num1 + num2; }
alert (sum (10,10)); var sum = function (num1, num2) { return num1 + num2; };
第一个代码不会出错,第二个代码就会出错
能够将一个函数做为另外一个函数的结果返回
function callSomeFunction (someFunction, someArgument) { return someFunction (someArgument); }
函数内部有两个特殊的对象,就是arguments和this。arguments主要用途是保存函数参数,它有一个名叫callee的属性,该属性是一个指针,指向拥有arguments对象的函数
function factorial (num) { if (num < 1) { return 1; } else { return num * factorial (num - 1); } }
函数执行与函数名牢牢耦合在一块儿,为了消除这种紧密耦合现象可使用arguments.callee
function factorial (num) { if (num < 1) { return 1; } else { return num * arguments.callee(num - 1); } }
this引用的是函数执行的环境对象 函数的名字是一个包含指针的变量
每一个函数都包含两个属性:length和prototype。 在建立自定义引用类型和实现继承是,prototype属性极为重要 每一个函数都包含两个非继承而来的方法:apply()
和call()
,实际上等于设置函数体内this对象的值 apply()方法接收两个参数:一个是运行函数的做用域,另外一个是参数数组
function sum(num1, num2) { return num1 + num2; } function callsum (num1, num2){ return sum.apply(this, arguments); }
call方法和apply方法相同。第一个参数没有变化,不过第二个参数要逐个枚举出来 它们真正强大的地方在于可以扩充函数赖以运行的做用域
window.color = "red"; var o = { color: "blue"}; function sayColor(){ alert (this.color); } sayColor(); //red sayColor.call(this); //red sayColor.call(window) //red sayColor.call(o); //blue
另外一个方法bind()
这个方法会建立一个实例,其中this的值会被绑定传给bind()函数的值
window.color = "red"; var o = { color: "blue"}; function sayColor(){ alert (this.color); } var objectSayColor = sayColor.bind(o); objectSayColor(); //blue
ECMAScript提供三个特殊的引用类:Boolean、Number、String. 每读取一个基本类型值,后台会建立一个对应的基本包装类型的对象 基本类型值不是对象,于是不应有方法,其实后台会自动进行处理,定义对象 引用类型与基本包装类的主要区别在于对象的生存周期 new操做符建立的引用类型实例,在离开当前做用域前会一直保存在内存里。而自动建立的基本包装类型的对象,只存在于代码的执行瞬间,而后当即被销毁 使用new调用基本包装类型的构造函数与直接调用同名的转型函数是不同的 例如:
var value = "25"; var number = Number(value); //转型函数 alert (typeof number); //number var obj = new Number(value); //构造函数 alert (typeof obj); //object
基本类型与引用类型的布尔值有很大的区别。 建议永远不要使用Boolean对象
此类型提供了一些用于将数值格式化为字符串的方法 toFixed()
按照指定的小数位返回字符串 toExponential()
返回以指数表示法 toPrecision()
可能返回固定大小(fixed)格式,也可能返回指数格式(Exponential)
charAt()
和charCodeAt()
其中charCodeAt()
会返回特定位置的字符编码 ECMAScript5提供一种用方括号加数字索引来访问字符串中特定字符concat()
方法:将一个或多个字符串拼接,返回拼接获得的新字符串 但实践中使用最多的仍是加号操做符 三个基于字符串建立新字符串的方法:slice()
、substr()
和substring()
slice和substring第一个参数指定字符串开始的位置,第二个参数指定字符串最后一个字符后面的位置。 substr第二个参数值指定返回的字符个数 若给定参数是负数,它们的行为不尽相同 slice()
方法会将传入的负值与字符串长度相加,substr()
会将负的第一个参数加上字符串的长度,第二个负的参数转化为0,substring()
方法会将全部负值转化为0indexOf()
和lastIndexOf()
方法 其中indexOf是从前向后查找。lastIndexOf是从后向前查找。 均可以接收可选的第二个参数,表示从那个位置开始查找 将返回的位置保存在数组positions中,以便未来调用toLowerCase()
、toUpperCase()
和toLocaleLowerCase()
、toLocaleUpperCase()
后二是针对特定地区实现match()
方法,只接受一个参数,要么是一个正则表达式,要么是一个RegExp对象 search()
方法,参数与match相同。此方法返回字符串第一个匹配项的索引;若是没有匹配项,则返回-1 replace()
方法,替换字符串 split()
方法,基于指定的分隔符将一个字符串分割成多个字符串ECMA-262定义了两个单体内置对象
全部在全局做用域中定义的属性和函数都是Global对象的属性
encodeURI()
主要用于整个URI,encodeURIComponent()
用于URI的某一段 encodeURI()
不会对自己属于URI的特殊字符进行编码,而encodeURIComponent()
对任何非标准字符进行编码 与两者对应的解码分别是decodeURI()
和decodeURIComnent()