JS包含了少量可用在标准类型上的标准方法。

Array
Function
Number
Object
RegExp
String

Array

array.concat(item...)

concat方法返回一个新数组,它包含array的浅复制并将1个或多个参数item附加在其后。如果参数item是一个数组,那么他的每个元素会被本别添加。

var a = ['a', 'b', 'c'];
var b = ['x', 'y', 'z'];
var c = a.concat(b, true);
// c 是 ['a', 'b', 'c', 'x', 'y', 'z', true]

array的浅复制:

var p1={"name":"person1"};
var p2={"name":"person2"};
var arr=[p1];
var arr2=arr.concat(p2);
console.log(arr2[1].name);//person2
p2.name="person";
console.log(arr2[1].name);//person

array.join(separator)

join方法把array构造成一个字符串。

var a = ['a', 'b', 'c'];
a.push('d');
var c = a.join(''); // 'abcd';

array.pop()

pop和push使数组array像堆栈一样工作。如果array是空,pop会返回undefined。

var a = ['a', 'b', 'c'];
var c = a.pop( ); // a 是 ['a', 'b'] & c 是 'c'

pop可以这样实现:

Array.prototype.pop=function(){
return this.splice(this.length - 1, 1)[0];
}

array.push(item...)

var a = ['a', 'b', 'c'];
var b = ['x', 'y', 'z'];
var c = a.push(b, true);
// a 是 ['a', 'b', 'c', ['x', 'y', 'z'], true]
// c 是 5;

array.reverse()

var a = ['a', 'b', 'c'];
var b = a.reverse( );
//a和b都是 ['c', 'b', 'a']

array.shift()

移除数组中的第一个元素并返回该元素。如果数组array是空,它会返回undefined。shift通常比pop慢得多。

var a = ['a', 'b', 'c'];
var c = a.shift( ); // a 是 ['b', 'c'] & c 是 'a'

shift可以这样实现:

Array.prototype.pop=function(){
return this.splice(0, 1)[0];
}

array.slice(start,end)

slice方法对array中的一段做浅复制,从array[start]复制到array[end-1],end参数可选,默认为数组长度。不要和splice方法混淆。

var a = ['a', 'b', 'c'];
var b = a.slice(0, 1); // b is ['a']
var c = a.slice(1); // c is ['b', 'c']
var d = a.slice(1, 2); // d is ['b']

array.sort(comparefn)

JS默认比较函数假定所有要排序的元素都是字符串。

var n = [4, 8, 15, 16, 23, 42];
n.sort( );
// n is [15, 16, 23, 4, 42, 8]

可以自定义比较函数来代替默认的比较函数。比较函数包含2个参数,相等返回0,如果参数1 应该排在前则返回一个负数,如果参数2 应该排在前则返回一个正数。

n.sort(function (a, b) {
return a - b;
});
// n is [4, 8, 15, 16, 23, 42];
var m = ['aa', 'bb', 'a', 4, 8, 15, 16, 23, 42];
m.sort(function (a, b) {
if (a === b) {
return 0;
}
if (typeof a === typeof b) {
return a < b ? -1 : 1;
}
return typeof a < typeof b ? -1 : 1;
});
// m is [4, 8, 15, 16, 23, 42, 'a', 'aa', 'bb']

为对象数组排序:

var by = function (name) {
return function (o, p) {
var a, b;
if (typeof o === 'object' && typeof p === 'object' && o && p) {
a = o[name];
b = p[name];
if (a === b) {
return 0;
}
if (typeof a === typeof b) {
return a < b ? -1 : 1;
}
return typeof a < typeof b ? -1 : 1;
} else {
throw {
name: 'Error',
message: 'Expected an object when sorting by ' + name
};
}
};
}; var s = [
{first: 'Joe', last: 'Besser'},
{first: 'Moe', last: 'Howard'},
{first: 'Joe', last: 'DeRita'},
{first: 'Shemp', last: 'Howard'},
{first: 'Larry', last: 'Fine'},
{first: 'Curly', last: 'Howard'}
];
s.sort(by('first')); // s is [
// {first: 'Curly', last: 'Howard'},
// {first: 'Joe', last: 'DeRita'},
// {first: 'Joe', last: 'Besser'},
// {first: 'Larry', last: 'Fine'},
// {first: 'Moe', last: 'Howard'},
// {first: 'Shemp', last: 'Howard'}
// ]

sort方法不稳定,s.sort(by('first')).sort(by('last'));不能产生我们希望的顺序。要修改by函数:

var by = function (name, minor) {
return function (o, p) {
var a, b;
if (o && p && typeof o === 'object' && typeof p === 'object') {
a = o[name];
b = p[name];
if (a === b) {
return typeof minor === 'function' ? minor(o, p) : 0;
}
if (typeof a === typeof b) {
return a < b ? -1 : 1;
}
return typeof a < typeof b ? -1 : 1;
} else {
throw {
name: 'Error',
message: 'Expected an object when sorting by ' + name
};
}
};
}; s.sort(by('last', by('first'))); // s is [
// {first: 'Joe', last: 'Besser'},
// {first: 'Joe', last: 'DeRita'},
// {first: 'Larry', last: 'Fine'},
// {first: 'Curly', last: 'Howard'},
// {first: 'Moe', last: 'Howard'},
// {first: 'Shemp', last: 'Howard'}
// ]

array.splice(start,deleteCount,item...)

从array中移除1个或多个元素,并用性的item替换它们。

var a = ['a', 'b', 'c'];
var r = a.splice(1, 1, 'ache', 'bug');
// a is ['a', 'ache', 'bug', 'c']
// r is ['b']

array.unshift(item...)

unshift类似于push,但是它是把item插入到array的开始部分,它返回array的新长度。

var a = ['a', 'b', 'c'];
var r = a.unshift('?', '@');
// a is ['?', '@', 'a', 'b', 'c']
// r is 5

Function

function.apply(thisArg,argArray)

apply方法调用函数function,传递一个被绑定到this上的对象和一个可选的参数数组。

obj:这个对象将代替function类里this对象
args:这个是数组,它将作为参数传给function(args-->arguments)

var Person=function(name,age){
this.name=name;
this.age=age;
this.sayHi=function(){alert("Hi! My name is "+this.name+", I'm "+this.age)};
} var Student=function(name,age,grade){
Person.apply(this,arguments);//apply使Student类具备了Person类的全部方法和属性
this.grade=grade;
} var p1=new Person("Jesse",18);
p1.sayHi();//Hi! My name is Jesse, I'm 18.
var s1=new Student("Lily",10,5);
s1.sayHi();//Hi! My name is Lily, I'm 10.

可以利用apply的参数数组来简化程序:

例如

求数组中的最大值

var arr=[1,3,2];
//一般方法
var m=arr[0];
for(var i=1;i<arr.length;i++){
m=Math.max(max,arr[i]);
}
alert(m);
//利用apply
m=Math.max.apply(null,arr);
alert(m);

Number

number.toExponential(fractionDigits)

toExponential方法把number转换成一个指数形式的字符串。可选参数fractionDigits控制小数点后的位数。

console.log(Math.PI.toExponential(0));//3e+0
console.log(Math.PI.toExponential(2));//3.14e+0
console.log(Math.PI.toExponential(7));//3.1415927e+0
console.log(Math.PI.toExponential(16));//3.1415926535897931e+0
console.log(Math.PI.toExponential());//3.141592653589793e+0

member.toFixed(fractionDigits)

toFixed方法把number转换成一个十进制形式的字符串。可选参数fractionDigits控制小数点位数。

console.log(Math.PI.toFixed(0));//
console.log(Math.PI.toFixed(2));//3.14
console.log(Math.PI.toFixed(7));//3.1415927
console.log(Math.PI.toFixed(16));//3.1415926535897931
console.log(Math.PI.toFixed());//

member.toPrecision(precision)

toPrecision方法把number转换成一个十进制形式的字符串。可选参数precision控制数字的位数。

console.log(Math.PI.toPrecision(2));//3.1
console.log(Math.PI.toPrecision(7));//3.141593
console.log(Math.PI.toPrecision(16));//3.141592653589793
console.log(Math.PI.toPrecision());//3.141592653589793

numbe.toString(radix)

toSting方法把number转换成一个字符串。可选参数radix控制基数,默认为10。radix参数最常用的是整数,但是他可以用任意数字。

console.log(Math.PI.toString(2));//11.001001000011111101101010100010001000010110100011
console.log(Math.PI.toString(8));//3.1103755242102643
console.log(Math.PI.toString(16));//3.243f6a8885a3
console.log(Math.PI.toString());//3.141592653589793

Object

object.hasOwnProperty(name)

如果object包含一个name属性,那么hasOwnProperty方法返回true。原型链中的同名属性是不会被检查的。

var a={memeber:true};
console.log(a.hasOwnProperty("memeber"));//true

RegExp

regexp.exec(string)

如果它成功匹配regexp和字符串string,它会返回一个数组。数组中下标为0的元素包含正则表达式regexp匹配的子字符串。下标为1的元素是分组1捕获的文本,下标为2的元素是分组2捕获的文本,依此类推。如果匹配失败则返回null。

如果regexp带有一个g标志(全局标志),事情变得更加复杂了。查找不是从字符串的起始位置开始,而是从regexp.lastIndex( 初始值为0 )位置开始。如果匹配成功,那么regexp.lastIndex将被设置为该匹配后第一个字符的位置。不成功的匹配会重置regexp.lastIndex为0。

你可以通过循环调用exec去查询一个匹配模式在一个字符串中发生几次。要注意:如果你提前退出了循环,在次进入这个循环前必须把regexp的lastIndex重置为0。^因子也仅匹配regex.lastIndex为0的情况。

// 把一个简单的HTML文本分解为标签和文本
var text = '<html><body bgcolor=linen><p>' +'This is <b>bold<\/b>!<\/p><\/body><\/html>';
var tags = /[^<>]+|<(\/?)([A-Za-z]+)([^<>]*)>/g;
var a, i; while ((a = tags.exec(text))) {
for (i = 0; i < a.length; i += 1) {
console.log('// [' + i + '] ' + a[i]);
}
console.log( );
} // 结果: // [0] <html>
// [1]
// [2] html
// [3] // [0] <body bgcolor=linen>
// [1]
// [2] body
// [3] bgcolor=linen // [0] <p>
// [1]
// [2] p
// [3] // [0] This is
// [1] undefined
// [2] undefined
// [3] undefined // [0] <b>
// [1]
// [2] b
// [3] // [0] bold
// [1] undefined
// [2] undefined
// [3] undefined // [0] </b>
// [1] /
// [2] b
// [3] // [0] !
// [1] undefined
// [2] undefined
// [3] undefined // [0] </p>
// [1] /
// [2] p
// [3] // [0] </body>
// [1] /
// [2] body
// [3] // [0] </html>
// [1] /
// [2] html
// [3]

regex.test(string)

var b = /&.+;/.test('frank &amp; beans');
// b is true

String

string.charAt(pos)

返回string中pos位置的字符。

var name='Curly';
var c0=name.charAt(0);
console.log(c0);//C var c1=name.charAt(-1);
console.log(c1);//空字符串
console.log(c1.length);// var c2=name.charAt(10);
console.log(c2);//空字符串

string charCodeAt(pos)

返回一个以整数形式表示的在string中的pos位置上的字符码位。

var name='Curly';
var c0=name.charCodeAt(0);
console.log(c0);// var c1=name.charCodeAt(-1);
console.log(c1);//NaN var c2=name.charCodeAt(10);
console.log(c2);//NaN

string.concat(string...)

var s = 'C'.concat('a', 't');    // s is 'Cat'

string.indexOf(searchString,position)

从string的postion(可选,默认为0)位置开始查找字符串searchString,如果找到返回第一个匹配字符的位置,否则返回-1。

var text = 'Mississippi';
var p = text.indexOf('ss'); // p is 2
p = text.indexOf('ss', 3); // p is 5
p = text.indexOf('ss', 6); // p is -1

string.lastIndexOf(searchString,position)

var text = 'Mississippi';
var p = text.lastIndexOf('ss'); //从字符串末尾向前找 p is 5
p = text.lastIndexOf('ss', 3); //从字符串位置3处向前找 p is 2
p = text.lastIndexOf('ss', 6); //从字符串位置6处向前找 p is 5
p = text.lastIndexOf('ss', -2); // p is -1
p = text.lastIndexOf('ss', 20); //20大于字符串长度,从字符串末尾向前找 p is 5

string.localCompare(this)

该函数采用底层操作系统提供的排序规则进行比较。

var m = ['AAA', 'A', 'aa', 'a', 'Aa', 'aaa'];
m.sort(function (a, b) {
return a.localeCompare(b);//a<b结果为负,相等为0,a>b为正
}); // 在某些本地环境下 m 为['a', 'A', 'aa', 'Aa', 'aaa', 'AAA']

string.match(regexp)

如果没有g标识,调用string.match(regexp)的结果与string.exec(regexp)的结果相同,如果regexp有g标识,那么它返回一个包含除捕获分组之外的所有匹配的数组。

var text = '<html><body bgcolor=linen><p>' +
'This is <b>bold<\/b>!<\/p><\/body><\/html>';
var tags = /[^<>]+|<(\/?)([A-Za-z]+)([^<>]*)>/g;
var a, i; a = text.match(tags);
for (i = 0; i < a.length; i += 1) {
console.log('// [' + i + '] ' + a[i]);
} // 结果 // [0] <html>
// [1] <body bgcolor=linen>
// [2] <p>
// [3] This is
// [4] <b>
// [5] bold
// [6] </b>
// [7] !
// [8] </p>
// [9] </body>
// [10] </html>

string.replace(regexp/substr,replacement)

参数regexp/substr规定子字符串或要替换的模式的 RegExp 对象。如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。 replacement规定了替换文本或生成替换文本的函数。replace方法返回一个新的字符串。

它将在 string 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。

字符 替换文本

$1、$2、...、$99

与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。

$&

与 regexp 相匹配的子串。

$`

位于匹配子串左侧的文本。

$'

位于匹配子串右侧的文本。

$$

直接量符号。

示例代码:

var str="Visit Microsoft!".replace("Microsoft", "Windows");//Visit Windows!

执行一次全局替换,每当 "Microsoft" 被找到,它就被替换为 "W3School":

var str="Welcome to Microsoft! "
+ "We are proud to announce that Microsoft has "
+ "one of the largest Web Developers sites in the world." var str=str.replace(/Microsoft/g, "W3School");
//"Welcome to W3School! We are proud to announce that W3School has one of the largest Web Developers sites in the world."

确保匹配字符串大写字符的正确:

text = "javascript Tutorial";
text.replace(/javascript/i, "JavaScript");

把 "Doe, John" 转换为 "John Doe" 的形式:

name = "Doe, John";
name =name.replace(/(\w+)\s*,\s*(\w+)/, "$2 $1");//John Doe

把字符串中所有单词的首字母都转换为大写:

name = 'aaa bbb ccc';
uw=name.replace(/\b\w+\b/g, function(word){
return word.substring(0,1).toUpperCase()+word.substring(1);}
//"Aaa Bbb Ccc"
);

以上关于replace的内容来自于W3School

string.search(regexp)

类似于indexOf,如果找到返回第一个匹配的首字符位置。找不到则返回-1,此方法会忽略掉g标识。

var text = 'and in it he says "Any damn fool could';
var pos = text.search(/["']/); // pos is 18

string.slice(start,end)

复制string中的一部分来构造一个新的字符串,从string的start位置到end-1位置。

var str='0123456789';
var s1=str.slice(1);//
var s2=str.slice(9);//
var s3=str.slice(2,5);//
var s4=str.slice(5,2);//空字符串
var s5=str.slice(10);//空字符串

string.split(separator,limit)

把string依据separator分割成limit段,limit可选。separator可以是一个值字符串或者正则表达式。

var digits = '012345';
var a = digits.split('', 5);
// a is ['0', '1', '2', '3', '4']
var b = digits.split('');
// b is ['0', '1', '2', '3', '4','5']
var ip = '192.168.1.0';
var b = ip.split('.');
// b is ['192', '168', '1', '0'] var c = '|a|b|c|'.split('|');
// c is ['', 'a', 'b', 'c', ''] var text = 'last, first ,middle';
var d = text.split(/\s*,\s*/);
// d is [
// 'last',
// 'first',
// 'middle'
// ]

注意,来自分组捕获的文本将会被包含在分割后的数组中:

var e = text.split(/\s*(,)\s*/);
// e is [
// 'last',
// ',',
// 'first',
// ',',
// 'middle'
// ]

当separator是一个正则表达式时,有一些JS的实现在输出数组中会禁止空字符串:

var f = '|a|b|c|'.split(/\|/);
//一些系统中 f is ['a', 'b', 'c']
//另外一些系统中 f is ['', 'a', 'b', 'c', '']

string.substring(start,end)

用法同slice。与 slice不同的是,substring 不接受负的参数。建议用slice代替它。

string.toLowerCase()

返回一个新的字符串,把string中的字母都转成小写。

string.toUpperCase()

返回一个新的字符串,把string中的字母都转成小写。

String.fromCharCode(char...)

从一串数字中返回一个字符串。

var a = String.fromCharCode(67, 97, 116);
// a is 'Cat'

参考:《JavaScript语言精粹》Douglas Crockford著    赵泽欣 鄢学鹍 译

转载请注明出处:

作者:JesseLZJ
出处:http://jesselzj.cnblogs.com

JavaScript语言精粹 笔记06 方法的更多相关文章

  1. JavaScript语言精粹笔记

    JavaScript语言精粹笔记 掌握语言的每个特性可以让你出风头,但是并不推荐,因为一部分的特性带来的麻烦可能远超本身的价值.正如书中所言,坏的材料并不能雕刻出好的作品,要成为一名更好的程序员,要取 ...

  2. JavaScript 语言精粹笔记3

    方法 毒瘤 糟粕 记录一下阅读蝴蝶书的笔记,本篇为书中最后一部分:方法.代码风格.优美的特性.毒瘤.糟粕等. 方法 这一章主要介绍了一些方法集.这里写几个我不太熟悉的方法和要点吧. array.joi ...

  3. JavaScript语言精粹 笔记05 正则表达式

    正则表达式 正则表达式以方法的形式被用于对字符串中的信息进行查找.替换画图提取操作.可处理正则表达式的方法有:regexp.exec, regexp.test,string.match, string ...

  4. JavaScript语言精粹 笔记04 数组

    数组1 数组字面量2 长度3 删除4 列举5 混淆的地方6 方法7 维度 数组1 数组字面量 var empty = []; var numbers = [ 'zero', 'one', 'two', ...

  5. JavaScript语言精粹 笔记03 继承

    继承伪类对象说明符原型函数化部件 继承 JS不是基于类的,而是基于原型的,这意味着对象直接从其他对象继承. 1 伪类 JS提供了一套丰富的代码重用模式,它可以模拟那些基于类的模式,因为JS实际上没有类 ...

  6. JavaScript语言精粹 笔记02 函数

    函数函数对象函数字面量调用参数返回异常给类型增加方法递归作用域闭包回调模块级联套用记忆   函数 1 函数对象 在JS中函数就是对象.对象是“名/值”对的集合并拥有一个连接到原型对象的隐藏连接.对象字 ...

  7. JavaScript语言精粹 笔记01 语法 对象

    内容比较简单,只是从头梳理一下JS的知识 语法空白标识符数字字符串语句 对象对象字面量检索更新引用原型反射枚举删除减少全局变量污染  语法 1 空白 空白可能表现为格式化字符或注释的形式.空白通常没有 ...

  8. 1.javascript语言精粹笔记

    一.注释 /**/ // 采用这个 二.标识符 标识符被用于语句.变量.参数.属性名.运算符和标记三.数字 javascript只有一个单一的数字模型.它在内部被表示64位的浮点数. 没有分离出整形, ...

  9. javascript语言精粹-笔记

    walkDOM function walkTheDOM(node, func) { func(node); node = node.firstChild; while (node) { walkThe ...

随机推荐

  1. Javaweb经典三层架构的演变

    1.Javaweb经历了三个时期 ①JSP Model1第一代 JSP Model1是JavaWeb早期的模型,它适合小型Web项目,开发成本低!Model1第一代时期,服务器端只有JSP页面,所有的 ...

  2. appium -ios-安卓 获取元素时 配置参数的方法

    iPhone_5S{ "automationName": "XCUITest", "platformName": "iOS&quo ...

  3. fatal error: mysql.h: No such file or directory

    在ubuntu系统下安装mysql之后,和数据库连接的时候,出现如下错误:fatal error: mysql.h: No such file or directory 是因为缺少链接库,执行如下命名 ...

  4. 思科、华为、H3C命令对照表

    思科 华为 H3C 描述 no undo undo 取消/关闭 当前设置 show display display 查看.显示 exit quit quit 退回上级 hostname sysname ...

  5. Fri Oct 31 18:00:00 UTC+0800 2008转换为yyyy-mm-dd

    这个其实网上有很多例子,都是直接用js在前端做了时间处理,我的处理也一样,想要变成2008-3-31,就用下面的js直接可以处理 function Todate(num) { //Fri Oct 31 ...

  6. Android图片高斯模糊的一些方法

    高斯模糊 高斯模糊就是将指定像素变换为其与周边像素加权平均后的值,权重就是高斯分布函数计算出来的值. 一种实现 点击打开链接<-这里是一片关于高斯模糊算法的介绍,我们需要首先根据高斯分布函数计算 ...

  7. M3截止阶段小结

    python知识点总结1.copy模块中深浅拷贝copy() deepcopy()2.__new__ 方法参数    def __new__(cls, *args, **kwargs):        ...

  8. mybatis Dynamic SQL

    reference: http://www.mybatis.org/mybatis-3/dynamic-sql.html Dynamic SQL One of the most powerful fe ...

  9. POI 3.17

    发现与之前使用的有些不同 参考:https://www.cnblogs.com/h--d/p/6735110.html

  10. 用WINSOCK API实现同步非阻塞方式的网络通讯

    Option Base 0Option Explicit '* ************************************************** *'*  模块名称:Winsock ...