我们更加青睐采用对象字面量的语法来作为对象语法书写。这样可以给人一种数据封装的感觉。实际上,对象字面量也是向函数传递大量参数的首选方式。 例如下面是一个函数
function test(args){ if(typeof args.name == "string"){ console.log(args.name); } } test({ name:"haha"; })访问对象属性通常用“.”的方式。而在javascript中,还支持另外一种,即作为类似数组的方式来访问。
alert(person["name"]; alert(person.name);使用instanceof可以。
if(value instanceof Array){ //some operation }然而网页中如果包含多个框架,就存在两个以上的不同全局执行环境。不同框架中构造函数不同,这个方法会失效。 为了解决这个问题ES5新增了Array.isArray()方法,可以判断是不是数组
toString()和toLocaleString可以转换为字符串。不同的是,两个方法分别数组成员内每个成员的toString()和toLocaleString()方法
var a = { toString:function(){ return "toStringMethod"; } toLocaleString:function(){ return :"toLocaleStringMethod"; } } var b=[1,2,3] var c = [a,b] c.toString();//"toStringMethod,1,2,3" c.toLocaleString();//toLocaleStringMethod,1,2,3"join()方法可以实现类似上述方法,不过join对每一个对象调用的是toString()方法。如果不给join传入参数,默认使用’,’,但是IE7或者以前会以undefined作为分隔符。
splice()始终会返回一个数组,这个数组包含从数组中删除的项。
ES5新增了reduce()和reduceRight()方法,其实和forEach那些差不多。 传入参数可以有两个,一个是用于处理的函数,一个数作为归并基础的初始值(可选)。 用于处理的函数有四个参数,前一个值,当前值,索引,数组对象。
ES中function可以理解为指针。使用的时候,只有带()的才会调用函数,而函数名只是代表一个指针。可以看以下例子
function add(num1,num2){ return num1+num2; } var add2 = add;//不会执行函数 add=null;//删除add函数,但是add2还存在由javascript垃圾回收机制是标记法我们也可以理解这一点,因为还有add2指向这个函数,因此这个函数不会被清除。
这是用函数声明的方式定义的函数 再看下面的例子
alert(sum(10,1));//sum is not a function var sum = function(num1,num2){ return num1+num2; }这是因为解析器优先解析函数声明,而表达式的话是按照顺序进行解析,因此第二种使用方法的话就存在调用这个函数的时候这个函数还没有被解析,因此会报错。
函数可以作为参数,比如我们之前写到的sort()函数。而一个更加厉害的是ES支持函数作为返回值。
function createCompareFunc(property){ return function(obj1,obj2){ var val1 = obj1[property]; var var2 = obj2[property]; return var2-var1; } }上述代码实际上是一个专门生成比较函数的类似于函数工厂的东西。只需要给定属性,就可以返回一个基于属性进行比较大小的函数。