预解析
js引擎运行js 分为两步:预解析 代码执行
预解析:js 引擎会把js 里面所有的 var 还有 function 提升到当前作用域的最前面
代码执行:按照代码书写顺序从上往下执行
预解析分为:变量预解析(变量提升)和函数预解析(函数提升)
变量预解析就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
函数预解析就是把所有的函数声明提升到当前作用域的最前面 不调用函数
function f1() {
var a = b = c = 9; //相当于 var a = 9;b = 9;c = 9;(b和c直接赋值,没有var声明,属于全局变量)
//集体声明应该是var a = 9,b = 9,c = 9;
console.log(a);
console.log(b);
console.log(c);
}
f1();
console.log(c);
console.log(b);
console.log(a);
///输出结果为 9 9 9 9 9 报错
对象
对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等
对象是由属性和方法组成的
属性:事物的特征,在对象中用属性来表示
方法:事物的行为,在对象中用方法来表示
创建对象的三种方式
1. 利用字面量创建对象
对象字面量:就是花括号{ } 里面包含了表达这个具体事物(对象)的属性和方法。
//利用对象字面量创建对象{}
//var obj = {}; //创建了一个空的对象
var obj={
uname:'uye',
age=18,
sex:'男',
sayHi:function(){
console.log('hi');
}
}
//1.里面的属性或者方法采取键值对的形式 键 属性名 : 值 属性值
//2.多个属性或者方法中间用逗号隔开
//3.方法冒号后面跟的是一个匿名函数
//使用对象
//1.调用对象的属性 采取 对象名. 属性名.
console.log(obj.uname);
//2.另一种方法:对象名['属性名']
console.log(obj['age']);
//调用对象的方法 对象名.方法名
obj.sayHi(); //小括号必须添加
变量和属性的相同点:都是用于存储数据
不同点:
变量:单独声明并赋值,使用时直接写变量名,单独存在
属性:在对象里面的,不需要声明的,使用时必须是 对象.属性
函数和方法的相同点:都是实现某种功能 做某件事
不同点:
函数:单独声明且调用的,函数名()单独存在
方法:在对象里面,调用的时候 对象.方法
2. 利用new Object创建对象
var obj = new Object(); //创建了一个空的对象
obj.uname = "杨冉然";
obj.age = 18;
obj.sex = "女";
obj.sayHi = function () {
console.log("hi");
};
//1.利用等号赋值的方法添加对象的属性和方法
//2.每个属性和方法之间用分号隔开
console.log(obj.uname);
console.log(obj["sex"]);
obj.sayHi();
3. 利用构造函数创建对象
构造函数 就是把对象里面的一些相同的属性和方法抽象出来封装到函数里面,这个函数称为构造函数
构造函数的语法格式
function 构造函数名(){
this.属性 = 值;
this.方法 = function(){
}
}
调用构造函数的方法:
new 构造函数名();
function Star(uname, age, sex) {
this.name = uname;
this.age = age;
this.sex = sex;
this.sing = function () {
console.log(sang);
};
}
var ldh = new Star("刘德华", 18, "男"); //调用函数返回的是一个对象
console.log(ldh.name);
console.log(ldh["sex"]);
ldh.sing("冰雨");
var zxy = new Star("张学友", 19, "男");
console.log(zxy.name);
zxy.sing("李香兰");
//1.构造函数名字的首字母必须要大写
//2.我们构造函数不需要return 就可以返回结果
//3.调用构造函数必须使用new
//4.只要new Star () 调用函数就创建一个对象
//5.属性和方法前面必须添加 this
构造函数和对象之间的联系:
构造函数:泛指某一大类,相当于java中的类,是抽取了对象的公共部分封装到函数里。
对象:特指某一个,通过new关键字创建对象的过程称为对象实例化
new关键字
执行过程:
1.new 构造函数可以在内存中创建了一个空的对象
2.this 就会指向刚刚创建的空对象
3.执行构造函数里面的代码,给这个空对象添加属性和方法
4.返回这个对象
遍历对象
格式:
for (变量 in 对象){ }
var obj={
uname:'杨冉',
age=18,
sex:'女',
sayHi:function(){
console.log('hi');
}
}
for (var k in obj){
console.log(k); //k变量输出 得到的是属性名,
console.log(obj[k]); //obj[k]得到的是属性值
}
//for in 里面的变量,习惯用 k
//方法也一样能遍历出来,但一般不用