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()