《JavaScript高等程序设计》笔记:援用范例(五)

Object范例

建立object实例要领有两种。第一种要领运用new操纵符后跟object组织函数。以下:

var person=new Object();
person.name="Nicholas";
person.age=29;

第二种要领运用对象字面量示意法。以下:

var person={
    name:"Nicholas",
    age:29
}

Array范例

检测数组

运用instanceof操纵符:

if(value instanceof Array){
    //对数组实行某些操纵
}

ECMAScript5新增添Array.isArray()要领。这个要领的目标是终究肯定某个值究竟是不是是数组,而不论它是在哪一个全局实行环境中建立的。这个要领以下:

if(Array.isArray(value)){
     //对数组实行某些操纵
}

IE9+及以上,别的主流浏览器兼容。

转换要领

toLocaleString()要领
toString()要领
valueOf()要领
join()要领

一切对象都具有toLocaleString()、toString()、valueOf()要领。个中挪用数组的toString要领会返回以数组中的每一个值的字符串情势拼接而成的一个以逗号支解的字符串。
而挪用valueOf()要领返回的照样数组。

var colors = ['red','blue','green'];
console.log(colors.toString());
console.log(colors.valueOf());
console.log(colors.toLocaleString());

获得的效果如图所示:
《《JavaScript高等程序设计》笔记:援用范例(五)》

别的toLocaleString()要领经常会返回跟toString()和valueOf()要领雷同的值。但也不是总云云。当挪用数组的toLocaleString()要领时,它也会建立一个数组值的以逗号支解的字符串。而与前两个要领唯一差别的是,这一次为了获得每一项的值,挪用的每一项的toLocaleString()要领,而不是toString()要领。以下面例子:

var person1 = {
    toLocaleString: function(){
        return "Nikolaos";
    },
    toString: function(){
        return "Nicholaos";
    }
}
var person2 = {
    toLocaleString: function(){
        return "Grigorios";
    },
    toString: function(){
        return "Greg";
    }
}

var person = [person1,person2];
alert(person); //Nicholaos,Greg
alert(person.toString()); //Nicholaos,Greg
alert(person.toLocaleString());//Nikolaos,Grigorios

申明:由于alert()要吸收字符串参数,所以它会在背景挪用toString()要领,获得跟直接挪用toString()要领一样的效果。

数组继承的toLocaleString()、toString()、valueOf()要领,在默许状况下都邑以逗号支解的字符串的情势返回数组项。可以运用join()要领,则可以运用差别的分开符来构建这个字符串。

join()要领

join() 要领用于把数组中的一切元素放入一个字符串。元素是经由过程指定的分开符举行分开的。返回一个字符串。

var colors = ['red','blue','green'];
console.log(colors.join(',')); //red,blue,green
console.log(colors.join('||')); //red||blue||green

栈要领(后进先出)

栈是一种LIFO(Last-In-First-Out,后进先出)的数据结构,也就是最新增加的元素最早被移除。

ArrayObj.push()要领
ArrayObj.pop()要领

ArrayObj.push():就是向数组末端增加新的元素,返回的是数组新的长度。
ArrayObj.pop():就是向数组中删除数组末了一个元素而且返回该元素。假如数组为空就返回undefined。

行列要领(先进先出)

ArrayObj.shift()
ArrayObj.unshift()

ArrayObj.shift():要领用于把数组中的第一个元素删除,并返回第一个元素的值。
假如数组是空的,则shift() 要领不举行任何操纵,返回undefined。请注重,该要领不建立新数组,而是直接修正本来的数组。该要领会转变数组的长度。

ArrayObj.unshift() :该要领可把它的参数递次增加到数组的头部。它直接修正了数组,而不是建立一个新的数组。返回的是新数组的长度。

unshift()在IE6,IE7下,数据有增加胜利,但返回值倒是undefined。

重排序要领

reverse()要领
sort()要领

reverse()要领会对反转数组项的递次。

var values = [1, 2, 3, 4, 5];
values.reverse();
alert(values);  //5,4,3,2,1

这里数组的初始值及递次是1、2、3、4、5。而挪用数组的reverse()要领后,其值的递次变成了5、4、3、2、1。

sort()要领按升序分列数组——即最小的值位于最前面,最大的值排在末了面。为了完成排序,sort()要领会挪用每一个数组项的toString()转型要领,然后比较获得字符串,以肯定怎样排序。纵然数组中的每一项都是数组,sort()要领比较的也是字符串,以下所示:

var values = [0, 1, 5, 10, 15];
values.sort();
alert(values);  //0,1,10,15,5

这类排序体式格局在许多状况下都不是最好计划。因而sort()要领可以接收一个比较函数作为参数,以便我们指定谁人值位于谁人值的前面。

比较函数接收两个参数,假如第一个参数应当位于第二个之前则返回一个负数,假如两个参数相称,则返回0,假如第一个参数位于第二个以后则返回一个正数。以下就是一个简朴的比较函数:

function compare(value1, value2) {
   if (value1 < value2) {
       return -1;
   } else if (value1 > value2) {
       return 1;
   } else {
       return 0;
   }
}

这个比较函数可以运用于大多数数据范例,只需将其作为参数通报给sort()要领即可,以下面这个例子所示:

var values = [0, 1, 2, 5, 10, 15];
values.sort(compare);
alert(values);  //0,1,5,10,15

在将比较函数通报到sort()要领以后,数值依然坚持了准确的升序。固然,也可以经由过程比较函数发生降序排序的效果,只需交流比较函数返回的值即可:

function compare(value1, value2) {
   if (value1 < value2) {
       return 1;
   } else if (value1 > value2) {
       return -1;
   } else {
       return 0;
   }
}
var values = [0, 1, 2, 5, 10, 15];
values.sort(compare);
alert(values);  //15,10,5,1,0

reverse()和sort()要领会返回值是经由排序以后的数组。

关于数值范例或许其valueOf要领会返回数值范例的对象范例,可以运用一个更简朴的比较函数。这个函数只需用第二个值减第一个值即可:

function compare(value1, value2) {
   return value2 - value1;
}

由于比较函数经由过程返回一个小于零、即是零或大于零的值来影响排序效果,因而减法操纵就可以恰当处置惩罚一切状况。

操纵要领

concat()要领
slice()要领
splice()要领

concat() 要领用于衔接两个或多个数组。
该要领不会转变现有的数组,而仅仅会返回被衔接数组的一个副本。

<script type="text/javascript">
var a = [1,2,3];
document.write(a.concat(4,5));
</script>

输出的效果:1,2,3,4,5

简介slice()与splice()要领

slice(start,end)要领

start 必需。划定从那边最先拔取。假如是负数,那末它划定从数组尾部最先算起的位置。也就是说,-1 指末了一个元素,-2 指倒数第二个元素,以此类推。

end 可选。划定从那边完毕拔取。该参数是数组片段完毕处的数组下标。假如没有指定该参数,那末切分的数组包含从 start 到数组完毕的一切元素。假如这个参数是负数,那末它划定的是从数组尾部最先算起的元素。

返回值:返回一个新的数组,包含从 start 到 end (不包含该元素)的 arrayObject 中的元素。

splice() 要领用于插进去、删除或替代数组的元素
语法:arrayObject.splice(index,howmany,element1,.....,elementX)

index 必需。划定从那边增加/删除元素。
该参数是最先插进去和(或)删除的数组元素的下标,必需是数字。

howmany 必需。划定应当删除多少元素。必需是数字,但可以是 “0”。
假如未划定此参数,则删除从 index 最先到原数组末端的一切元素。

element1 可选。划定要增加到数组的新元素。从 index 所指的下标处最先插进去。
elementX 可选。可向数组增加多少元素。

返回值:假如从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。

申明:splice() 要领可删除从 index 处最先的零个或多个元素,而且用参数列表中声明的一个或多个值来替代那些被删除的元素。

下面扼要归纳综合一下slice()与splice()要领

slice(start, end); slice()要领返回从参数指定位置最先到当前数组末端的一切项。假如有两个参数,该要领返回起死和完毕位置之间的项,但不包含完毕位置的项。

var colors = ["red", "green", "blue", "yellow", "purple"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);

console.log(colors2); // green, blue, yellow, purple
console.log(colors3); // green, blue, yellow

splice()有删除,插进去,替代的功用

删除 – 须要两个参数,要删除的第一项的位置和要删除的项数。

var colors = ["red", "green", "blue"];
var removed = colors.splice(0,1);
console.log(colors); // greeen, blue
console.log(removed); // red

插进去 – 须要三个参数:肇端位置、0(要删除的项数)和要插进去的项

var colors = ["red", "green", "blue"];
var removed = colors.splice(1,0,"yellow", "orange");
console.log(colors); // ["red", "yellow", "orange", "green", "blue"]
console.log(removed); // 返回空

替代 – 须要三个参数:肇端位置、要删除的项数和要插进去的恣意数目的项。

var colors = ["red", "green", "blue"];
var removed = colors.splice(1,1,"yellow", "orange");
console.log(colors);  // ["red", "yellow", "orange", "blue"]
console.log(removed); // ["green"]

位置要领

indexOf()要领
lastIndexOf()要领

ECMAScript5为数组实例增加了两个位置要领:indexOf()lastIndexOf()。这两个要领都吸收两个参数:要查找的项和(可选的)示意查找出发点位置的索引。个中indexOf()要领从数组开首(位置0)最先向后查找,lastIndexOf()要领则从数组的末端最先向前查找。

这两个要领都返回查找的项在数组中的位置,或许没有查找到的状况下返回-1。在比较第一个参数与数组中的每一项时,会运用全等操纵符;也就是说请求查找的项必需严厉相称(就像运用===一样)。

var numbers = [1,2,3,4,5,4,3,2,1];
console.log(numbers.indexOf(4));//3
console.log(numbers.lastIndexOf(4));//5
console.log(numbers.indexOf(4,4)); //5
console.log(numbers.lastIndexOf(4,4));//3
var person = {name:'Niccholas'};
var people = [{name:'Niccholas'}];
var morePeople = [person];
console.log(people.indexOf(person));//-1
console.log(morePeople.indexOf(person)); //0

支撑的浏览器IE9+,FireFox2+,Safari3+,Opera9.5+和Chrome。

迭代要领

ECMAScript5为数组定义了5个迭代要领。每一个要领都吸收两个参数:要在每一项上运转的函数和(可选的)运转该函数的作用域对象——影响this的值。传入这些要领的函数会吸收三个参数:数组项的值、该项在数组中的位置和数组对象自身。依据运用的要领差别,这个函数实行后的返回值可以会也可以不会影响接见的返回值。

every():对数组中的每一项运转给定函数,假如该函数对每一项都返回true,则返回true。

filter():对数组中的每一项运转给定函数,返回该函数会返回true的项构成的数组。

forEach():对数组中的每一项运转给定函数,这个要领没有返回值。

map():对数组中的每一项运转给定函数,返回每次函数挪用的效果构成的数组。

some():对数组中的每一项运转给定函数,假如该函数对某一项返回true,则返回true。

以上要领都不会修正数组中的包含的值。

在这些要领中最类似的是every()`some(),他们都用于查询数组中的某一项是不是满足某个前提。

var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.every(function(item,index,array){
    return (item > 2);
});
console.log(everyResult); //false

var someResult = numbers.some(function(item,index,array){
    return (item > 2);
});
console.log(someResult); //true

filter():

var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item,index,array){
    return (item > 2);
});
console.log(filterResult); //[3, 4, 5, 4, 3]

map():

var numbers = [1,2,3,4,5,4,3,2,1];
var mapResult = numbers.map(function(item,index,array){
    return (item * 2);
});
console.log(mapResult);  //[2, 4, 6, 8, 10, 8, 6, 4, 2]

forEach():这个要领没有返回值,本质上和运用for轮回迭代数组一样。

支撑的浏览器IE9+,FireFox2+,Safari3+,Opera9.5+和Chrome。

减少要领

ECMAScript5还新增了两个减少数组的要领。reduce()reduceRight()要领。这两个要领都邑迭代数组的一切项,然后构建一个终究返回的值。个中reduce()要领从数组中的第一项最先,逐一遍历到末了。而reduceRight()则从数组的末了一项最先,向前遍历到第一项。

这两个要领都吸收两个参数:一个在每一项上挪用的函数和(可选)作为减少基础的初始值。传给reduce()reduceRight()的函数吸收四个参数:前一个值、当前值、项的一切、数组对象。这个函数返回的任何值都邑作为第一个参数自动传给下一项。第一次迭代放生在数组的第二项上,因而第一个参数是数组的第一项,第二个参数是数组的第二项。

运用reduce()要领可以实行求数组中一切值之和的操纵,比方:

var values = [1,2,3,4,5];
var sum = values.reduce(function(pre,cur,index,array){
    return pre + cur;
});
console.log(sum); //15

reduceRight()要领类似,只是要领主意罢了。

支撑的浏览器IE9+,FireFox2+,Safari3+,Opera9.5+和Chrome。

Date范例

要建立一个日期对象,运用new操纵符和Date组织函数即可:

var now = new Date();

Date.parse()要领

个中Date.parse()要领吸收一个示意日期的字符串参数,然后尝试依据这个字符串返回响应日期的毫秒数。ECMA-262没有定义Date.parse()应当支撑哪一种日期花样,因而这个要领的行动因完成而异,而且一般是因区域而异。将区域设置为美国的浏览器一般都接收以下日期花样:

“月/日/年”,如6/13/2004;

“英文月名 日,年”,如May 12,2004;

“英文礼拜几 英文月名 日 年 时:分:秒 时区”,如Tue May 25 2004 00:00:00 GMT+0800。

ISO 8601扩大花样YYYY-MM-DDTHH:mm:ss:sssZ(比方 2004-05-25T00::00:00)。只要兼容ECMAScript5的完成支撑这类花样。

比方,要为2004年5月25日建立一个日期对象,可以运用下面的代码:

//Tue May 25 2004 00:00:00 GMT+0800 (中国标准时候)
var someDate = new Date(Date.parse('May 25,2004'));

假如传入Data.parse()的要领的字符串 不能示意日期花样,会返回NAN。实际上,假如直接将示意日期的字符串通报给Date组织函数,也会在背景挪用Date.parse()要领,例以下面的代码跟前面的是等价的。

//Tue May 25 2004 00:00:00 GMT+0800 (中国标准时候)
var someDate = new Date('May 25,2004'); 

这行代码将会获得与前面一行雷同的日期对象。

Date.UTC()要领

Date.UTC()一样返回日期的毫秒数。但它与Date.parse()在构建值时运用的是差别的信息。Date.UTC()的参数离别示意年份、基于0的月数(一月是0,二月是1,顺次类推)、月中的哪一天(1到31)、小时数(0到23)、分钟、秒、毫秒数。在这些参数中只要前两个参数是必需的(年和月)。假如没有供应月中的天数,则假定天数为1;假如省略别的参数,则一切假定为0,以下例子:

//GMT时候2000年1月1日半夜零时
var y2k = new Date(Date.UTC(2000,0));
console.log(y2k); //Sat Jan 01 2000 08:00:00 GMT+0800 (中国标准时候)

//GMT时候2005年5月5日下昼5:55:55
var allFives = new Date(Date.UTC(2005,4,5,17,55,55));
console.log(allFives);//Fri May 06 2005 01:55:55 GMT+0800 (中国标准时候)

申明下:Greenwich Mean Time (GMT)格林尼治标准时候英国、爱尔兰、冰岛和葡萄牙属于该时区。这个时区与中国北京时候的时差是8个小时,也就是说比北京时候晚8个小时。

Date组织函数
Date组织函数会模拟Date.UTC(),但有一点 差别的是,日期和时候都是基于当地时区而非GMT来建立。不过他们的参数跟Date.UTC()的参数一样。
比方:

//当地时候2000年1月1日半夜零时
var y2k = new Date(2000,0);
console.log(y2k); //Sat Jan 01 2000 00:00:00 GMT+0800 (中国标准时候)

//当地时候2005年5月5日下昼5:55:55
var allFives = new Date(2005,4,5,17,55,55);
console.log(allFives);//Thu May 05 2005 17:55:55 GMT+0800 (中国标准时候)

Date.now()要领
ES5增加了Date.now()要领,返回示意这个要领时的日期和时候的毫秒数。这个要领简化了运用Date对象剖析代码的事情,比方:

//获得最先时候
var start = Date.now();

//挪用函数
dosomething();

//获得完毕时候
var stop = Date.now(),
    result = stop - start;
console.log(start,stop,result); //1494292306763 1494292306768 5

function dosomething(){
    console.log('打印效果');
}

支撑Date.now()要领的浏览器包含IE9+,FireFox3+,Safari3+,Opera10.5+和Chrome。在不支撑的别的浏览器,运用+操纵符把Date对象转成字符串,也可以抵达雷同的目标。

//获得最先时候
var start = +new Date();

//挪用函数
dosomething();

//获得完毕时候
var stop = +new Date(),
    result = stop - start;
console.log(start,stop,result); //1494292306763 1494292306768 5

function dosomething(){
    console.log('打印效果');
}

继承的要领

与别的援用范例一样,Date范例也重写了toLocaleString()toString()valueOf()要领。

个中toLocaleString()toString()在显现日期和时候没有什么代价;而valueOf()要领不是返回的字符串,而是返回日期的毫秒示意。因而可以方便运用比较操纵符(大于或小于)来比较日期值。以下面的例子:

var date1 = new Date(2007,0,1);
var date2 = new Date(2007,1,1);
console.log(date1 < date2); //true
console.log(date1 > date2); //false

日期花样化要领

Date范例另有一些特地用于将日期花样化为字符串的要领,以下:

toDateString()——以特定于完成的花样显现礼拜几、月、日和年;

toTimeString()——以特定于完成的花样显现时、分、秒和时区;

toLocaleDateString()——以特定与区域的花样显现礼拜几、月、日和年;

toLocaleTimeString()——以特定于完成的花样显现时、分、秒;

toUTCString()——以特定于完成的花样完全的UTC日期。

与toLocaleString()和toString()要领一样,以上这些字符串花样的要领输出也是因浏览器而异的。因而没有哪一个要领可以用来在用户界面上显现一致的日期信息。

日期/时候组件要领

Date() 返回当日的日期和时候。
getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。
getMonth() 从 Date 对象返回月份 (0 ~ 11)。
getFullYear() 从 Date 对象以四位数字返回年份。
getYear() 请运用 getFullYear() 要领替代。
getHours() 返回 Date 对象的小时 (0 ~ 23)。
getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。
getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。
getTime() 返回 1970 年 1 月 1 日至今的毫秒数。
getTimezoneOffset() 返回当地时候与格林威治标准时候 (GMT) 的分钟差。
getUTCDate() 依据世界时从 Date 对象返回月中的一天 (1 ~ 31)。
getUTCDay() 依据世界时从 Date 对象返回周中的一天 (0 ~ 6)。
getUTCMonth() 依据世界时从 Date 对象返回月份 (0 ~ 11)。
getUTCFullYear() 依据世界时从 Date 对象返回四位数的年份。
getUTCHours() 依据世界时返回 Date 对象的小时 (0 ~ 23)。
getUTCMinutes() 依据世界时返回 Date 对象的分钟 (0 ~ 59)。
getUTCSeconds() 依据世界时返回 Date 对象的秒钟 (0 ~ 59)。
getUTCMilliseconds() 依据世界时返回 Date 对象的毫秒(0 ~ 999)。
setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。
setMonth() 设置 Date 对象中月份 (0 ~ 11)。
setFullYear() 设置 Date 对象中的年份(四位数字)。
setYear() 请运用 setFullYear() 要领替代。
setHours() 设置 Date 对象中的小时 (0 ~ 23)。
setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。
setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。
setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。
setTime() 以毫秒设置 Date 对象。
setUTCDate() 依据世界时设置 Date 对象中月份的一天 (1 ~ 31)。
setUTCMonth() 依据世界时设置 Date 对象中的月份 (0 ~ 11)。
setUTCFullYear() 依据世界时设置 Date 对象中的年份(四位数字)。
setUTCHours() 依据世界时设置 Date 对象中的小时 (0 ~ 23)。
setUTCMinutes() 依据世界时设置 Date 对象中的分钟 (0 ~ 59)。
setUTCSeconds() 依据世界时设置 Date 对象中的秒钟 (0 ~ 59)。
setUTCMilliseconds() 依据世界时设置 Date 对象中的毫秒 (0 ~ 999)。

RegExp范例

ECMAScript经由过程RegExp范例支撑正则表达式,以下:

var expression = /pattern/flags;

个中的形式(pattern)部份可以是任何简朴或许庞杂的正则表达式,可以包含字符类、限定符、分组、向前查找以及反向援用。每一个正则表达式可带有一个或许多个标注(flags),用以标明正则表达式的行动。有三个以下标志:

  • g:示意全局形式,即形式将被运用到一切字符串,而非在发明第一个婚配项时马上住手。
  • i:示意不辨别大小写形式。
  • m:示意多行形式,即在抵达一行文本末端时还在继承查找下一行中是不是存在于形式婚配的项。

以字面量的情势来定义正则表达式

比方:婚配第一个bat或许cat,不辨别大小写

var pattern = /[bc]at/i;

运用RegExp组织函数
它吸收两个参数:一个是要婚配的字符串形式,另一个是可选的标志字符串。可以运用字面量定义的任何表达式,都可以运用组织函数来定义,照样以上面的例子为例:

var pattern = new RegExp("[bc]at","i");

注重:RegExp组织函数形式参数时字符串,所以再某些状况下要对字符进项两重转义。一切元字符都必需两重转义,如字面量形式为/\[bc\]at/,那末等价的字符串为"/\\[bc\\]at/"

例子:

var re = null,
    i;
    for(i=0; i < 10; i++){
        re = /cat/g;
        console.log(re.test("catastrophe"));
    }
    for(i=0; i < 10; i++){
        re = new RegExp("cat","g");
        console.log(re.test("catastrophe"));
    }

打印效果都为10个true

RegExp实例要领

exec – exec吸收一个参数,即要运用形式的字符串,然后返回包含第一个婚配信息的数组。

var text = "cat, bat, sat, fat";
var pattern1 = /.at/;

var matches = pattern1.exec(text);
console.log(matches); // ["cat"]

match – match是字符串实行婚配正则表达式划定规矩的要领,他的参数是正则表达

var text = "cat, bat, sat, fat";
var pattern1 = /.at/;

var matches2 = text.match(pattern1);
console.log(matches2); // ["cat"]

test – test()吸收一个字符串参数

var text = "000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;

if (pattern.test(text)){
    console.log("The pattern was matched"); // The pattern was matched
}

细致诠释可检察《js进修笔记 – 正则表达式详解》

Function范例

由于函数名仅仅是指向函数的指针。因而函数名与包含对象指针的别的变量没有什么差别。换句话说,一个函数可以有多个名字,以下例子:

function sum(num1,num2){
return num1 + num2;
}
console.log(sum(10,10)); //20

var anotherSum = sum;
console.log(anotherSum(10,10)); //20

sum = null;
console.log(anotherSum(10,10)); //20

注重:运用不带圆括号的函数名是接见函数指针,而非挪用函数。

没有重载(深切明白)

函数声明与函数表达式

作为值的函数

函数内部属性

在函数内部有两个特别的对象:argumentsthis
arguments转为数组

(function() {
    var slice = Array.prototype.slice,
        aArguments = slice.apply(arguments);

        console.log(aArguments);
})(10, 20, 30);

arguments.callee

该属性是一个指针,指向具有这个arguments对象的函数。当函数在严厉形式下运转时,接见arguments.callee会致使毛病。

this

window.color = "red";
var o = {color:"blue"};

function sayColor(){
    console.log(this.color);
}

sayColor(); // red

sayColor.call(this); // red
sayColor.call(window); // red
sayColor.call(o); // blue

函数属性和要领

length

length属性示意函数愿望吸收的定名参数的个数。

function sayName(name){
    alert(name);
}

function sum(num1,num2){
    return num1 + num2;
}

function sayHi(){
    alert("hi");
}

console.log(sayName.length); //1
console.log(sum.length); //2
console.log(sayHi.length); //0

prototype

在es5中prototype属性是不可枚举的,因而运用for-in没法发明。

每一个函数都包含两个非继承而来的要领:call()apply()。他们的区分在于吸收的参数体式格局差别。

function sum(num1, num2){
    return num1 + num2;
}

function callSum1(num1,num2){
    return sum.apply(this,arguments);
}

function callSum2(num1, num2){
    return sum.apply(this, [num1, num2]); 
}

console.log(callSum1(10,10)); // 20
console.log(callSum2(10,10)); //20

通报参数并不是apply()和call()的用武之地,它们的壮大的地方在于扩大函数的作用域,以下例子:

window.color = "red";
var o = {color:"blue"};

function sayColor(){
console.log(this.color);
}

sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o); //blue

es5还定义了一个要领:bind()要领,这个要领会建立一个函数的实例,个中this会被绑定到传给bind()函数的值。

window.color = "red";
var o = {color:"blue"};

function sayColor(){
console.log(this.color);
}

var objectSayColor = sayColor.bind(o);
objectSayColor(); //blue

sayColor挪用bind()并传入o对象,建立了objectSayColor()函数,objectSayColor()函数的this值即是o。

因而纵然是在全局作用域中挪用这个函数,效果也是blue。

基础包装范例

var value = "25";
var number = Number(value);
console.log(typeof number);
console.log(number instanceof Number);// false

var obj = new Number(value);
console.log(typeof obj);
console.log(obj instanceof Number);// true

Boolean范例

var falseObject = new Boolean(false);
var result = falseObject && true; // true  

//布尔表达式中的一切对象都邑被转换为true, 因而falseObject对象在布尔表达式中代表的是true

console.log(result); // true

var falseValue = false;
result = falseValue && true;
console.log(result); //false

console.log(typeof falseObject); //object
console.log(typeof falseValue); // Boolean
console.log(falseObject instanceof Boolean); //true
console.log(falseValue instanceof Boolean); // false

Number范例

var numberObject = new Number(10);
var numberValue = 10;
console.log(typeof numberObject); // Object
console.log(typoef numberValue); // number
console.log(numberObject instanceof Number); // true
console.log(numberValue instanceof Number); // false

String范例

字符要领

charAt() charCodeAt()

charAt()要领以单字符字符串的情势返回给定位置的谁人字符串。

charCodeAt()返回的是字符编码。

var stringValue = "hello world";
console.log(stringValue.charAt(1)); // e
console.log(stringValue.charCodeAt(1)); // 101

字符串操纵要领

concat()

concat()用于将一或多个字符串拼接起来。

var stringValue = "hello ";
var result = stringValue.concat("world");
console.log(result); // hello world
console.log(stringValue); // hello

slice(start, end)
end 示意字符串到哪里完毕。
假如传入的是负数,slice()要领会将传入的负值与字符串长度相加。

var str="Hello happy world!";
console.log(str.slice(6)); // happy world!
console.log(str.slice(6,11));// happy
console.log(str.slice(-3)); // ld!
console.log(str.slice(3, -4)); //lo happy wo 

substring(start, end)
假如传入的是负数, substring()会把一切字符参数都转换为0

var str="Hello happy world!";
console.log(str.substring(6)); // happy world!
console.log(str.substring(6,11));// happy
console.log(str.substring(-3)); // Hello happy world!
console.log(str.substring(3, -4)); //Hel

substr(start, length)
假如传入的是负数,substr()要领将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0

var str="Hello world!";
console.log(str.substr(3)); //lo world!
console.log(str.substr(3, 7)); //lo worl
console.log(str.substr(-3)); // ld!
console.log(str.substr(3, -3)); // 空字符串

字符串位置要领

indexOf() lastIndexOf()

var stringValue = "hello world";
console.log(stringValue.indexOf("o")); // 4
console.log(stringValue.lastIndexOf("o")); //7

这两个要领都可以吸收可选的第二个参数,示意从字符串中的哪一个位置最先搜刮。

var stringValue = "hello world";
console.log(stringValue.indexOf("o", 6)); // 7
console.log(stringValue.lastIndexOf("o", 6)); //4

字符串的形式婚配要领

match()

var text = "cat, bat, sat, fat";
var pattern = /.at/;

var matches = text.match(pattern);
console.log(matches.index); //0
console.log(matches[0]); // cat
console.log(pattern.lastIndex); //0

search()

var text = "cat, bat, sat, fat";
var pos = text.search(/at/);
console.log(pos); // 1

replace()

var text = "cat, bat, sat, fat";
var result = text.replace("at", "ond");
console.log(result); // cond, bat, sat, fat

var result = text.replace(/at/g, "ond");
console.log(result); // cond, bond, sond, fond

单体内置对象

Global对象

URI编码要领
Global对象的encodeURI()和encodeURIComponent()要领可以对URI(Uniform Resources Identifiers,通用资本标识符)举行编码,以便发送给浏览器。

var url = "http://www.baidu.com/";
console.log(encodeURI(url));
console.log(encodeURIComponent(url));

encodeURI()和encodeURIComponent()要领对象的两个要领离别是decodeURI()和decodeURIComponent()

Math对象

random()要领

Math.random()要领返回介于0和1之间一个随机数,不包含0和1。关于某些站点来讲,这个要领异常有用,由于可以应用它来随机显现一些名言和消息事宜。套用下面的公式,就可以应用Math.random()从某个整数范围内随机挑选一个值。

值=Math.floor(Math.random()*可以值的总数+第一个可以的值)

比方:假如想挑选一个1到10之间的数值,可以像下面这边编写代码:

var num = Math.floor(Math.random()*10+1);

function selectFrom(lowerValue,upperValue){
    var choice = upperValue - lowerValue + 1;
    return Math.floor(Math.random()*choice+lowerValue);
}

var num = selectFrom(2,10);
console.log(num);

var colors = ["red", "green", "blue", "yellow", "black", "purple", "brown"];
var color = colors[selectFrom(0, colors.length-1)];
console.log(color);
    原文作者:风雨后见彩虹
    原文地址: https://segmentfault.com/a/1190000000728046
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞