javascript---知识点2

1、一共分为6种数据类型

Undefined      返回字符串undefined

Boolean        返回字符串boolean

String         返回字符串sring

Number         返回字符串number

Object         返回字符串object,  var a = null;  返回也是object,   null也是Object

Function       返回字符串function
---------------------------------------------------------------------------------
typeof box     返回字符串undefined

2var 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()
原文地址:https://www.cnblogs.com/jentary/p/11931203.html