1、一共分为6种数据类型 Undefined 返回字符串undefined Boolean 返回字符串boolean String 返回字符串sring Number 返回字符串number Object 返回字符串object, var a = null; 返回也是object, null也是Object Function 返回字符串function --------------------------------------------------------------------------------- typeof box 返回字符串undefined 2、 var box; typeof box undefined typeof age 一个没有的变量也会返回undefined alert(age); 使用一个没有的变量会报错 尽量都初始化赋值 3、undefined == null true undefined === null false 4、toString() 中不能用null 或undefined 可以使用 String() 强制转换成string 返回的是'null' 'undefined' 5、Object var a = new Object(); 或 var a = new Object; 6、javascript 中的类型转换 都是由底层默认实现的 不需要手动转换 包括对象 var a = new String("1111"); typeof 返回的是object 7、函数名本身就是变量,所以函数也可以作为值来使用 function b(a,numb){ var c = a(numb); return c; } function a(num){ return num; } var d = b(a,10); 8、函数有两个内部属性 arguments 类似数组的对象,不是数组是对象 arguments.callee(); this var color = "全局"; function a(){ this.color; 这里的this指向的是动态的 随调用指向谁 } var a ={ this.color; 这里的this指向的是a对象 } 9、匿名函数 (function(){ return "aaaa"; })(); var a = (function(){ return "aaaa"; })(); 或者 //赋值给变量可以去掉() var a = function(){ return "aaaa"; }(); alert(a); 不用加 ()把匿名函数执行后的结果赋给变量a var a = function(){ return "aaaa"; } alert(a); 会输出整个函数 10、通过闭包访问局部变量,可以把局部变量贮存内存中,可以避免使用全局变量 全局变量累加 var a = 10; function add(){ a++; } add(); add(); add(); a = 13; 局部变量 function add(){ var a = 10; a++; return a; } add(); add(); add(); a = 11; 每次调用方法都会初始化 不能实现一直累加 局部变量使用闭包可以 function add(){ var a = 100; return function(){ a++; return a; } } var b = add(); b(); b(); b(); 相当于对象中的方法 11、循环中匿名函数的取值问题 function box(){ var arr =[]; for(var i=0;i<5;i++){ //把匿名函数循环赋给数组 arr[i]=function(){ return i; } //返回的i都为5 因为循环到最后 i=5 } return arr; } for(var i=0;i<5;i++){ //把匿名函数循环赋给数组 arr[i]=(function(num){ return num; })(i); //返回的i都为5 因为循环到最后 i=5 } return arr; } for(var i=0;i<5;i++){ //把匿名函数循环赋给数组 arr[i]=(function(num){ return function(){ return num; } })(i); //返回的i都为5 因为循环到最后 i=5 } return arr; } 12、this 闭包中的this指向window var user = "window user"; var box = { user:'box user', getUser:function(){ //这里的this指向box return function(){ return this.user;//这里的this指向window } } } //冒充box box.getUser().call(box); 13、块级作用域(js中没有块级作用域) 模拟块级作用域 (function(){ })(); 函数中的变量为私有变量,外部不能访问 function Box(){ 对外公布的公有变量和方法 相当于 public this.age =100; this.age = function(){ return "年龄"; } //私有的变量和方法不对外公布 相当于private var a = "100"; function add(){ } } function Box(value){ var user = value; this.getUser = function(){ return user; } } var b1 = new Box('aaa'); b1.getUser() //aaa var b2 = new Box('bbb'); b1.getUser() //aaa 如果要user成为静态变量 多个对象共享的话 (function(){ var user = ""; Box = function(value){ //全局 user = value; } Box.prototype.getUser = function(){ return user; } })(); var b1 = new Box('aaa'); b1.getUser() //aaa var b2 = new Box('bbb'); b1.getUser() //bbb //一般的结构 var box = function(){ var user = "aaa"; function run(){ return "运行"; } var obj = { publicMethod:function(){//对外暴露的方法 return user; } }; return obj; }(); box.publicMethod()