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)