javascript学习笔记---9月23日

1.对象生成方法:

var obj={};  //第一种
var obj = new Object();    //第二种 

2.读取一个属性有两种方法,一种是使用点运算符,一种是使用方括号运算符

var obj = {
      p : 'hello world',
};

o.p   //点运算符

o['p'] //方括号运算符 ,键名必须用引号       

如果o[p]则表明p是个变量,等价于o[undifined],返回undefined

3.上面的特性可以用来检查一个变量是否被声明

if(a){
  a+=1;  
}
//报错  a is not defined

if(window.a){
 a+=1;
}
//undefined

  上面第二种写法之所以不报错,是因为在浏览器环境里,所有全局变量都是浏览器对象window的成员,window.a的含义是读取window里的a属性

4.查看一个对象本身的所有属性可以使用object.keys()方法

var o = {
 key1:1,
 key2:'hello world'
}

Object.keys(o)

返回["key1", "key2"]

5.删除一个属性可以用delete ,如delete o.p

6.如果不同的变量名指向同一个对象,那么他们都是这个对象的引用,也就是说指向同一个内存地址,如果修改其中一个变量,会影响到其他变量,这种引用值局限于对象,对于原始数据类型则是传值引用

7.in运算符用于确定某个属性是否包含在对象中,也适用于数组

8.两种声明一个函数的方法

function test(){
 //...
}
//用function命令命名

var test = function(){
 //...
}
//这种写法将一个匿名函数赋值给变量,这中方式声明函数不带有函数名。如果加上函数名,改函数名只在函数体内部有效

9.在js中,函数与其他数据类型处于同等地位,可以被复制给变量和对象的属性,也可以当作参数传入其他函数,或者作为函数的结果返回

10.函数名的提升:js引擎将函数名视同变量名,所以采用function命令声明函数时,整个函数会被提升到代码头部,所以下面代码不会报错

f();
function f(){
 //...
}

当用赋值语句定义函数时,js就会报错

f();
var f = function(){
 //...    
}

上面的代码等用于
var f;
f();
f = function(){
//...
}

当调用f的时候,f只是被声明还没有被复制,等于undefined,所以会报错,因此,如果同时采用function命令和赋值语句声明同一个函数,最后总是采用赋值语句的定义。

11.如果多次采用function命令重复声明同一个函数,则后面的声明会覆盖前面的声明

12.由于函数名的提升,所以在条件语句中声明函数是无效的

13.函数对象的length属性,返回函数定义所需的参数个数

14.为函数的参数设置默认值

function test(a){
 (a !== undefined && a! == null) ? (a=a) : (a=1);
 return a;
}

会被认为是false的值: undefined , null , false , +0 , -0 , ''

15.arguments对象包含了函数运行时所有参数,arguments[0]表示第一个参数,arguments[1]表示第二个参数,以此类推,这个对象只有在函数体内部才能使用

需要注意的是:虽然这个对象很像数组,但它是一个对象,解决办法如下:

var args = Array.prototype.slice.call(arguments);

//or

var args = [];
for(var i=0;i < arguments.length;i++){
  args.push(arguments[i]);  
}

该对象还有一个callee属性,返回它所对应的原函数名称

16.闭包(closure)就是定义在函数体北部的函数

function f(){
 var v = 1;

 var c = function(){
  return v;
 };

 return c
}

var o = f();

o();        //返回1

闭包的特点在于c函数可以获取函数f的内部变量

17.立即调用的函数表达式(IIFE)

posted @ 2013-09-23 16:27  山贼一名  阅读(245)  评论(0编辑  收藏  举报