红宝石读书笔记--4.30

1、object对象创造两种方法:操作符new后跟object的构造函数;直接键值对(使用对象字面值表示法);除非必须使用变量来访问属性,否则我们建议使用点方法!属性名是可以包含非字母非数字的,比如如果属性名为“first name”中间有空格,那么就可以使用方括号表示法来访问person["first name"]

2、Array类型,创建方法于object相同,new方法后面括号(20)(“red”,“blue”,“green”);字面创建ie9+及主流浏览器都会将最后一个多余的逗号忽略!数组的length属性不是只读的,可以通过自己的设置移除或者增长数组,在访问超过索引值则为undefine。

检测数组:Array.isArray(value),join()

栈方法push(),pop()    队列方法 shift(),unshift()  重排序方法sort((最好加入compare嘻嘻)),reverse()操作方法:基于当前数组新构建数组concat()如果没有传递参数,则直接返回副本,传递参数则会加入数组的末尾。  slice(1,3)方法返回新数组;splice(起始位置,删除的项数,...要插入的项)    位置方法indexof();lastindexof();    迭代方法 :每个放法接受两个参数:1、每一项上运行的函数+运行该函数的作用域对象 --影响this的值;every()和some()返回Boolean值,filter()和map()返回数组,filter返回返回true的项,map返回调用结果组成的数组。  forEach()没有返回值。函数格式function(item,index, array)  归并方法reduce()和rightreduce()主要取决于从哪头开始遍历,其余均相同。 函数格式function(prev,cur,index,array);

3、Date类型;var now=new Date();不传递参数的情况下返回当前时间。es5中  var start=Date.now();其tostring()和tolocalstring()在浏览器中的返回格式可谓大相径庭。但是valueof()方法返回的则是毫秒数。可以方便的用比较操作符来比较日期的大小。  还有一些专门用于将日期格式化为字符串的方法。toDateString(),toTimeString()。。。p102页自己查一查

4、RegExp类型。使用var expression =/pattern/flags语法就可以创建一个正则表达式。pattern部分可以包含字符类、限定符、分组、向前查找以及反向引用。flags有三个标签:g全局模式,i不区分大小写模式,m多行模式。(注意所有的元字符必须经过转义)

tolocalstring(),tostring()返回正则表达式的字面量。

实例属性:global、ignorecase、lastindex(表示开始搜索下一个匹配项的字符位置)、multiline、source(正则表达式的字符串表示。)实例方法:exec(要应用模式的字符串)(返回包含第一个匹配信息的数组)、test(要应用模式的字符串)(返回Boolean值)

构造函数的属性:P108面长短属性名对比

模式的局限性!!

5、Function类型。每个函数都是Function实例,注意函数没有重载!!

函数声明和函数表达式的区别

解析器会率先读取函数声明,并使其在执行任何代码之前可以使用;至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。即使声明函数的代码在调用它的代码后面,JavaScript引擎也会将函数声明提升到顶部。

alert(sum(1,2))function sum(num1,num2){。。。。}(可以正常执行)

alert(sum(1,2))var sum =function(num1,num2){。。。。}(由于函数在一句初始化语句中,不是一个函数声明)

既可以像传递参数一样把一个函数传递给另外一个函数,而且可以将一个函数作为另一个函数的结果返回。

注意:要访问函数的指针而不执行函数的话,则一定要去掉函数名后面的那一对大括号!!

函数的内部属性。函数的内部有两个特殊的对象arguments和this。arguments有一个callee属性,指向函数本身。this引用的时函数的执行对象。(即谁调用这个函数,this就指向谁。)  函数还有一个属性就是caller;(callee和caller)其实都是为了实现更松散的耦合。P115例子(chapter5.5)

函数的属性和方法。属性:length,表示函数希望接受的命名参数的个数;prototype是保存所有实例方法的真正所在,换句话说,诸如toString()和valueof()等方法实际上都保存在prototype名下,只不过是通过各自的对象实例访问罢了。   方法:apply()和call(),两个方法的用途都是在特定的作用域调用函数,实际上等于设置函数体内的this对象的值。apply(运行函数的作用域,参数数组(可以试array实例也可以是arguments对象)),但是在call()中其余参数都需要逐个列举出来。

作用:1、传递参数。2、扩充函数赖以生存的作用域saycolor.call(o)。(好处:对象和方法不再具有耦合关系)

bind():例:var objectsaycolor=saycolor.bind(o);创建了一个新对象,该函数的this为o。则即使全局作用域中调用这个函数,它的this依然是bind()传入的对象!

每个函数继承的tolocalstring(),tostring(),valueof()等都只是返回函数的代码,但是代码形式浏览器而异!


猜你喜欢

转载自blog.csdn.net/m_oman/article/details/80150480