1.对象生成方法:javascript
var obj={}; //第一种 var obj = new Object(); //第二种
2.读取一个属性有两种方法,一种是使用点运算符,一种是使用方括号运算符java
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.pspa
6.若是不一样的变量名指向同一个对象,那么他们都是这个对象的引用,也就是说指向同一个内存地址,若是修改其中一个变量,会影响到其余变量,这种引用值局限于对象,对于原始数据类型则是传值引用prototype
7.in运算符用于肯定某个属性是否包含在对象中,也适用于数组code
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)