数据类型
基本数据类型(栈内存):number、string 、null、Boolean、Underfind
引用类型(堆内存): object
创建对象的语法:创建一个obj的对象
1.var obj=new object(); //构造函数
2.var obj={}; //使用对象字面量
3.var fun3=function([形参1、形参n]){
//函数体
};
参数
调用函数时,解析器不会检查实参的类型;调用函数时,解析器也不会检查实参的数量。
多余的实参不参与运算
如果实参的数量少于形参的数量,则没有对应实参的形参将是underfind
js中作用域分 两种
1、全局作用域
写在script标签中,页面打开时创建,页面关闭时销毁
全局作用域有一个window对象,
创建的变量都是Window对象的属性
创建的函数都是window对象的方法
2、函数作用域
调用函数时创建函数作用域,函数执行完毕以后,作用域销毁
在函数中,不使用var声明的变量都会成为全局变量
声明提前
1、变量的声明提前
使用关键字var声明的变量,会在所有的代码执行之前被声明,不会赋值
执行到该行才会赋值。
2、 函数的声明提前
使用函数声明形式创建的函数 function 函数名 (){}
它会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数
this指针
解析器在调用函数每次都会向函数内部传递进一个隐含的参数这个隐含的参数就是this,根据函数的调用方式的不同,this会指向不同的对象
1.以函数的形式调用时,this永远都是 window
2.以方法的形式调用时,this就是调用方法的那个对象
原型对象prototype
我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype。这个属性对应着一个对象,这个对象就是我们所谓的原型对象
原型对象就是一个公共性的区域,所有同一类的对象都可以访问这个原型对象
我们可以将对象中的公共性的内容,统一设置在原型对象中
创建构造函数时,可以将对象公有的属性和方法,统一添加到构造函数 的原型对象中
function MyClass(name,age,gender){ this.name=name; this.age=age; this.gender=gender; //原型函数sayHello写在外边 } //向MyClass的原型中添加属性a,函数sayHello MyClass.prototype.a="123"; MyClass.prototype.sayHello = function(){ alert("hello大家好我是"+this.name); }; var mc=new MyClass("猪八家",18,"男"); mc.sayHello(); 使用in检查对象中是否含有某个属性,原型如果有这个属性也返回true console.log("age" in mc); 使用hasOwnProperty()来检查对象自身含有该属性。只有当对象自身含有属性是才返回true console.log(mc.hasOwnProperty("age"));