第8章-方法

Array

array.concat(item...)

concat方法产生一个新数组。并把一个或多个参数item附加在其后。

1         var a = [‘a‘,‘b‘,‘c‘];
2         var b = [‘x‘,‘y‘,‘z‘];
3         var c = b.concat(a,true,34);
4         console.log(c);    //["x", "y", "z", "a", "b", "c", true, 34]

array.join(spearator)

join方法把一个array构造成一个字符串,它先把array中的每个元素构造成一个字符串,接着用一个separator分隔符把他们链接在一起,默认的separator是逗号‘,‘。要想做无间隔连接,我们可以使用空字符串作为separator

1         var a = [‘a‘,‘b‘,‘c‘];
2         a.push(‘d‘);
3         var c = a.join(‘‘);    //"abcd"
4         var b = [‘a‘,23,[‘e‘,true]];
5         var d = b.join(‘,‘);    //"a,23,e,true"

array.pop()

移除数组中最后一个元素并返回它,如果该array是empty,它会返回underfined。

1         var a = [‘a‘,‘b‘,‘c‘];
2         var c = a.pop();    //a 是["a", "b"],c是"c"

array.push(item...)

把一个或多个参数item附加到array的尾部,与concat方法不同的是如果item是一个数组,它将把它作为单个元素添加到array中,并返回这个数组的新长度值

1         var a = [‘a‘,‘b‘,‘c‘];
2         var b = [‘x‘,‘y‘,‘z‘];
3         var c = a.push(b);    //a是["a", "b", "c", Array[3]0: "x"1: "y"2: "z"length: 3__proto__: Array[0]]
4         console.log(c);    //4
5         var e = [];
6         var first = [1,2,3],second = [4,5,6];
7         e.push(first);
8         e.push(second);
9         e[1][1]    //5

push方法可以像这样实现:

1         Array.method(‘push‘,function(){
2             this.splice.apply(
3                 this,
4                 [this.length,0].
5                     concat(Array.prototype.slice.apply(arguments)));
6         });

array.reverse()

反转array里的元素顺序,并返回array本身

1         var a = [‘a‘,‘b‘,‘c‘];
2         var b = a.reverse();
3         //a和b都是["c", "b", "a"]

array.shift()

移除数组array中的第1个元素并返回该元素。如果这个数组array是空的,返回underfined。

1         var a = [‘a‘,‘b‘,‘c‘];
2         var b = a.shift();    //a是["b", "c"],b是"a"

shift可以这样实现:

1         Array.method(‘shift‘,function(){
2             return this.splice(0,1)[0];
3         });

array.slice(start,end)

slice方法对array中的一段做浅复制,从array[start]一直复制到array[end],不包括array[end]。end参数是可选的,默认值是array.length。如果参数中有负数,则会将它和array.length相加,让他们成为非负数。如果start大于等于array.length,得到的结果将是一个新的空数组

1         var a = [‘a‘,‘b‘,‘v‘];
2         var b = a.slice(0,1);    //["a"]
3         var c = a.slice(1);        //["b", "v"]
4         var d = a.slice(1,2);    //["b"]

array.sort(comparefn)

fort方法对array中的内容进行排序。它不能正确地给一组数字排序:

1         var n = [4,5,18,56,32];
2         n.sort();    //[18, 32, 4, 5, 56]

错误的原因是JavaScript的默认比较函数把要排序的元素都视为字符串。但是我们可以使用自己的比较函数来替换默认的比较函数。你的比较函数应该接受两个参数,并且如果这两个参数相等则返回0,如果第一个参数应该排列在前面,则返回一个负数,如果第二个参数应该排在前面,则返回一个正数。

1         n.sort(function(a,b){
2             return a - b;
3         });    //[4, 5, 18, 32, 56]

上面这个函数可以使数字正确的排序,但它不能使字符串排序,优化后:

 1         var m = [‘aa‘,‘bb‘,‘a‘,4,8,12,35,8,98];
 2         m.sort(function (a,b){
 3             if(a === b){
 4                 return 0;
 5             }
 6             if(typeof a === typeof b){
 7                 return a < b ? -1 : 1;
 8             }
 9             return typeof a < typeof b ? -1 : 1;
10         });
11         //[4, 8, 8, 12, 35, 98, "a", "aa", "bb"]

如果大小写不重要,你的比较函数应该在比较之前先将两个运算数转化为小写

如果有一个更智能的比较函数,可以对对象数组排序,我们将编写一个构造比较函数的函数:

 1         var by = function(name){
 2             return function(o,p){
 3                 var a,b;
 4                 if(typeof o === ‘object‘ && typeof p === ‘object‘ && o && p){
 5                     a = o[name];
 6                     b = p[name];
 7                     if(a === b){
 8                         return 0;
 9                     }
10                     if(typeof a === typeof b){
11                         return a < b ? -1 : 1;
12                     }
13                     return typeof a < typeof b ? -1 : 1;
14                 }else{
15                     throw{
16                         name: ‘Error‘,
17                         message: ‘You are too ‘
18                     };
19                 }
20             };
21         };
22
23         var s = [
24             {first: ‘Jo‘,        last: ‘Be‘},
25             {first: ‘Moe‘,        last: ‘Ho‘},
26             {first: ‘Jo‘,       last: ‘De‘},
27             {first: ‘Sh‘,        last: ‘Ho‘},
28             {first: ‘La‘,        last: ‘Fi‘},
29             {first: ‘Cu‘,        last: ‘Ho‘}
30         ];
31         s.sort(by(‘first‘));

sort方法是不稳定的,所以下面的调用:

1         s.sort(by(‘first‘)).sort(by(‘last‘));    

不能保证产生正确的序列,如果想要基于多个值进行排序,你需要做更多的工作:

 1         var s = [
 2             {first: ‘Jo‘,        last: ‘Be‘},
 3             {first: ‘Moe‘,        last: ‘Ho‘},
 4             {first: ‘Jo‘,       last: ‘De‘},
 5             {first: ‘Sh‘,        last: ‘Ho‘},
 6             {first: ‘La‘,        last: ‘Fi‘},
 7             {first: ‘Cu‘,        last: ‘Ho‘}
 8         ];
 9         var by = function(name,minor){
10             return function(o,p){
11                 var a,b;
12                 if(typeof o === ‘object‘ && typeof p === ‘object‘ && o && p){
13                     a = o[name];
14                     b = p[name];
15                     if(a === b){
16
17                         return typeof minor === ‘function‘ ? minor() : 0;
18                         //return typeof minor === ‘function‘ ? minor(o,p) : 0;
19                         //return typeof minor === ‘function‘ ? minor : 0;
20                     }
21                     if(typeof a === typeof b){
22                         return a < b ? -1 : 1;
23                     }
24                     return typeof a < typeof b ? -1 : 1;
25                 }else{
26                     throw{
27                         name: ‘Error‘,
28                         message: ‘XXXXXXX ‘
29                     };
30                 }
31             };
32         };
33         s.sort(by(‘last‘,by(‘first‘)))

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

aplice方法从array中移除一个或多个元素,并用新的item替换他们,参数start是从数组array中移除元素的开始位置,参数deleteCount是要移除的元素个数。如果有额外的参数,那些item会插入到被移除元素的位置上。它返回一个包含被移除元素的数组。
splice最主要的用处是从一个数组中删除元素。

1         var a = [‘a‘,‘b‘,‘c‘];
2         var r = a.splice(1,1,‘ache‘,‘bug‘);
3         //a 是 ["a", "ache", "bug", "c"]
4         //b 是 ["b"]

splice可以像这样实现:

 1         Array.method(‘splice‘,function(start,deleteCount){
 2             var max = Math.max,
 3                 min = Math.min,
 4                 dalta,
 5                 element,
 6                 insertCount = max(arguments.length - 2,0),
 7                 k = 0,
 8                 len = this.length,
 9                 new_len,
10                 result = [],
11                 shift_count;
12
13             //判断start参数是否为负数,如果是负数,转换为正值
14             start = strat || 0;
15             if(start < 0){
16                 start += len;
17             }
18             start = max(min(start,len),0);
19             //如果deleteCount大于数组中剩余的项数,则给它赋值数组中剩余的项数
20             deleteCount = max(min(typeof deleteCount === ‘number‘ ? deleteCount : len,len - start),0);
21             //判断插入的项数是否大于删除的项数
22             delta = insertCount - deleteCount
23             //数组新长度
24             new_len = len + delta;
25             //构建返回值
26             while(k < deleteCount){
27                 element = this[start + k];
28                 if(element !== underfined){
29                     result[k] = element;
30                 }
31                 k += 1;
32             }
33             //删除deleteCount项数后,array剩余的项数
34             shift_count = len - start - deleteCount;
35             //插入项数小于删除项数
36             if(delta < 0){
37                 k = start + insertCount;
38                 // 将后面的项数往前移
39                 while(shift_count){
40                     this[k] = this[k - delta];
41                     k += 1;
42                     shift_count -= 1;
43                 }
44                 this.length = new_len;
45             // 插入项数大于删除项数
46             }else if(delta > 0){
47                 k = 1;
48             // 将剩余的项往后移
49                 while(shift_count){
50                     this[new_len - k] = this(len - k);
51                     k += 1;
52                     shift_count -= 1;
53                 }
54                 this.length = new_len;
55             }
56             //赋值
57             for(k = 0;k < insertCount; k += 1){
58                 this[start + k] = arguments[k + 2];
59             }
60             return result;
61         });

array.unshift(item...)

它把元素添加到数组中的开始部分

1         var a = [‘a‘,‘b‘,‘c‘];
2         var b = a.unshift(‘?‘,‘@‘);
3         // a是["?", "@", "a", "b", "c"]
4         // b是5

unshift可以像这样实现:

1         Array.method(‘unshift‘,function(){
2             this.splice.apply(this,[0,0].concat(Array.prorotype.slice.apply(arguments)));
3             return this.length;
4         });

Function

function.apply(thisArg,argArray)

//后续补充......

Number

number.toExponential(fractionDigits)

转换成一个指数形式的字符串,fractionDigits控制其小数点后的数字位数,它的值必须在0~20;

1         document.writeln(Math.PI.toExponential(0));
2         //3e+0
3         document.writeln(Math.PI.toExponential(16));
4         // 3.1415926535897931e+0

number.toFixed(fractionDigits)

将number转换成一个十进制形式的字符串。fractionDigits控制其小数点后的数字位数,它的值必须在0~20;

1         document.writeln(Math.PI.toFixed(16));
2         //3.1415926535897931
3         document.writeln(Math.PI.toFixed(0));
4         //3

number.toPrecision(precision)

将number转换成一个十进制形式的字符串。fractionDigits控制数字的精度,它的值必须在1~20;

1         document.writeln(Math.PI.toPrecision(16));
2         //3.141592653589793
3         document.writeln(Math.PI.toPrecision(2));
4         //3.1

number.toString(radix)

把number转换成一个字符串。radix控制基数。它的值必须在2~36.默认的radix是以10位基数的

1         document.writeln(Math.PI.toString(16));
2         //3.243f6a8885a
3         document.writeln(Math.PI.toString(2));
4         //11.001001000011111101101010100010001000010110100011

Object

object.hasOwnProperty(name)

如果这个object包含一个名为name的属性,那么hasOwnProperty方法返回true。原型链中的同名属性是不会被检查的。这个方法对name就是hasOwnProperty时不起作用,此时会返回false

1         var a = {member: true};
2         var b = Object.create(a);
3         var t = a.hasOwnProperty(‘member‘);    //true
4         var u = b.hasOwnProperty(‘member‘);    //false
5         var v = b.member;    //true

RegExp

//后续补充

regexp.exec(string)

regexp.test(string)

String

String.charAt(pos)

返回在string中pos位置处的字符,如果pos小于或大于等于字符串的长度string.length,它会返回空字符串。

1         var name = ‘Curly‘;
2         var initial = name.charAt(0);    //"C"

string.charCodeAt(pos)

以整数形式表示在string中pos位置处的字符的字符编码

1         var name = ‘Curly‘;
2         var initial = name.charCodeAt(0);    //67

string.concat(string...)

把其他的字符串链接在一起来构造一个新的字符串

1          var a = ‘C‘.concat(‘a‘,‘t‘);    //"Cat"

string.indexOf(searchString,position)

在string内查找一个字符串searchString。如果它被找到,返回第1个匹配字符的位置,否则返回-1。position课设置从string的某个指定位置开始查找:

1         var text = "Mississippi";
2         var p = text.indexOf(‘i‘,2);    //4

string.lastIndexOf(searchString,position)

和indexOf方法类似,只不过是从string的尾部开始向开头查找

string.localeCompare(that)

方法比较两个字符串。如何比较字符串的规则没有详细的说明如果String比字符串that小,那么结果为负数。如果他们是相等的,那么结果为0。这类似于array.sort比较函数的约定:

1         var m = [‘AAA‘,‘A‘,‘a‘,‘Aa‘,‘aaa‘];
2         m.sort(function(a,b){
3             return a.localeCompare(b);
4         });
5         //m是["a", "A", "Aa", "aaa", "AAA"]

//以后补充

string.match(regexp)

match方法让字符串个一个正则表达式进行匹配

string.replace(searchValue,replaceValue)

string.search(regxp)

string.slice(start,end)

string.split(separator,limit)

string.toLocaleLowerCase()

按照本地规则把string中的所有字母转换为小写形式

string.toLocaleUpperCase()

按照本地规则把string中的所有字母转换为大写形式

string.toUpperCase()

返回一个字符串,这个string中的所有字母都被转换为大写形式

string.toLowerCase()

返回一个字符串,这个string中的所有字母都被转换为小写写形式

String.fromCharCode(char...)

根据一串数字编码返回一个字符串

1         var a = String.fromCharCode(67,97,116);
2         //a是‘Cat‘
时间: 2024-10-11 17:56:28

第8章-方法的相关文章

《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回

<深入Java虚拟机学习笔记>- 第19章 方法的调用与返回

[Effective Java]第七章 方法

第七章      方法 38.      检查参数的有效性 绝大多数方法和构造器对于传递给它们的参数值都会有某些限制.例如,索引值必须是非负的,对象引用不能为null等,这些都是常见的.你应该在文档中清楚地指明所有这些限制,并且在方法体的开头处检查参数,以强制施加这些限制. 应该在方法和构造器体前进行了参数的有效性检查,并且及时向外抛出适当的异常.如果方法没有检查它的参数,就有可能发生几种情形.该方法可能在处理过程中失败,并且产生令人费解的异常,更有可能,该方法可以正常返回,但是会悄悄地计算出错

第七章 方法

方法名可以由英文字母.数字.下划线组成,但是不能以数字开头. 对象.方法名(参数1,参数2,…,参数n) 调用方法时,不管后面参数多少个,方法调用的括号都可以不写,参数个数多时推荐写上 但是定义方法时: 使用do~end时,可以省略把参数列表括起来的() 使用{}时,只有在没有参数的时候才可以省略把参数列表括起来的(),有一个以上的参数就不能省略 (1)Ruby中有些方法看起来很像运算符,如数组或散列下标的[],+,-等都是方法 在用方法实现的运算符中,有的可以重新定义,有的不行,见第九章 (2

第19章 方法的调用与返回

Java虚拟机的指令集包括四种调用方法的指令,本章对这四种指令和这些指令执行的环境进 行阐述. 19.1方法调用 Java程序设计语言提供了两种基本的方法:实例方法和类(或者静态)方法.这两种方法的区别在于: 1)实例方法在被调用之前,需要一个实例,而类方法不需要. 2)实例方法使用动态(迟)绑定,而类方法使用静态(早)绑定. 当Java虚拟机调用一个类方法时,它会基于对象引用的类型(通常在编译时可知)来选择所调用的方法.相反,当虚拟机调用一个实例方法时,它会基于对象实际的类(只能在运行时得知)

C# 本质论 第四章 方法和参数

要为方法名使用动词或动词短语 递归:递归调用方法 方法重载: try catch

第十三章.方法

来源 方法分为两种: 实例方法(Instance Methods) 类型方法(Type Methods) 方法基本和函数一样 实例方法(Instance Methods) 定义一个实例方法: class Counter { var count = 0 func increment() { count++ } func incrementBy(amount: Int) { count += amount } func reset() { count = 0 } } 调用方法: let counte

第五章 方法

方法:(1)写在main方法外面(2)private static void sortArray(形参[数据类型 变量名])(3)sortArray(这里面写变量名);(4)void表示有没有返回值,如果有反回值,就写反回值的数据类型[有返回值就用一个相同的数据类型来接收](5)引用传递:在方法类形参改变,实参就改变(6)值传递: 如果没有返回,值就不会改变,如果有返回,就要改变(7)如果是String 不会改变 形参不会占内存,只有调用是才占用内存.形参和实参是完全不同的两个量,即时相同也没有

《Effective Java》第7章 方法

第38条:检查参数的有效性 对于公有的方法,要用javadoc的@throws标签(tag)在文档中说明违反参数值限制时会抛出的异常.这样的异常通常为IllegalArgumentException, IndexOutOfBoundsException或NullPointerException. 非公有的方法通常应该使用断言(assertion)来检查它们的参数,具体做法如下所示: 第39条:必要时进行保护性拷贝 没有对象的帮助时,虽然另个类不可能修改对象的内部状态,但是对象很容易在无意识的情况

第2章 方法的练习及注意事项

1.1 方法的练习 1.1.1 方法练习之获取两个数据中的较大 1.1.2 案例代码四 package com.itheima_01; import java.util.Scanner; /* * 需求:键盘录入两个数据,返回两个数中的较大值 * * 两个明确: * 返回值类型:int * 参数列表:int a,int b */ public class MethodTest { // 返回两个数中的较大值 public static int getMax(int a, int b) { if