函数
函数的2种声明方式
//1.函数关键字自定义函数(命名函数)
function fn() { // (会进行函数提升)
return "abc";
}
console.log(fn()); //abc
//2.函数表达式(匿名函数)
var f0=function(){ //f0 为变量名,不是函数名。变量中存的是函数 (会进行变量提升)
console.log("我是函数表达式");
}
f0();//我是函数表达式
//ES6的箭头函数 相当于匿名函数
var fun0=()=>{return "abc"}
var fun1=x=>x*2;
var fun2=(a,b)=>{return a+b}
console.log(fun1(2));//4
函数可以互相调用(实参也可以是函数)
fun(fun1) 相当于直接使用函数a对象
fun(fun1()) 相当于使用函数a的返回值
立即执行函数:
(function(){
console.log("haha");
})();
// 立即执行函数 往往只执行一次
object对象
自定义对象:由开发人员自己创建的对象
内置对象:如 Math, String ,Number, Boolean, Function ,Object...
浏览器对象:BOM(浏览器对象模型)
创建对象的三种方式:
1. var obj =new Object();
delete obj.属性名; 删除对象属性
var obj =new Object(); //用new关键字调用的函数是构造函数
obj.name="lightwine"; //构造属性: 对象.属性名=属性值;
obj.gender="male";
console.log(obj.name);//lightwine //读取属性:对象.属性
delete obj.gender; //删除对象的属性
obj["123"]=789; //特殊的属性名不用. 用[""]创建,取时同理
console.log(obj["123"]);//789
2. 对象字面量:可以在创建对象时直接指定对象中的属性。
//对象字面量
var obbj={
name:"misaka",
age:17,
genedr:"famale",
level:5,
test:{name:"lwine",level:6}
};
console.log(obbj.test);//{ name: 'lwine', level: 6 }
3. 构造函数创建对象
构造函数 和 创建普通函数 没有区别,只是构造函数习惯首字母大写。
构造函数和普通函数的区别是调用方式不同,普通函数是直接调用;构造函数使用new关键字调用。
利用构造函数创建对象的过程叫做对象的实例化。
instanceof 检查一个对象是否是一个类的实例。(对象 instanceof 构造函数)
in 运算符 -检查一个对象中是否有指定的属性
function Person(uname, age, level) {
this.name = uname;
this.age = age;
this.level = level;
this.skill = function (skill) {
console.log(this.name + "'s skill:" + skill);
};
}
var yb = new Person("Misaka", 15, 5);
var yf = new Person("Accelerator", 16, 5);
yb.skill("超电磁炮"); //Misaka's skill:超电磁炮
yf.skill("矢量操作"); //Accelerator's skill:矢量操作
console.log(yb.level); //5
console.log("level" in yb); //true level是对象yb的属性
console.log(yb instanceof Person); //true 对象yb是类Person的实例
//new关键字执行过程:
// 1.new 构造函数在内存中创建一个空的对象
// 2.this 就会指向刚才创建的空对象
// 3.执行构造函数的代码 给空对象添加属性与方法
// 4.将对象作为返回值返回
如果一个函数作为对象的属性,那么这个函数称为对象的方法(method).
如上例中的skill()方法。
用自变量传递属性参数
设置一个变量的值为对象中的属性,可用对象[变量]:属性值 来找到对象中该属性的值。
var obj={
name:"misaka",
genedr:"famale",
level:"lv5",
test:{name:"lwine",level:"lv6"}
};
var n="level";
console.log(obj[n]);//lv5
//这里的n的值是哪个属性,它就去找哪个属性的值
枚举对象中的属性
for...in语句 ,for(var 变量 in 对象){ }
-每次执行时,会将属性名赋值给变量
var obbj = {
name: "misaka",
age: 17,
genedr: "famale",
level: 5,
test: { name: "lwine", level: 6 },
};
console.log(obbj.test); //{ name: 'lwine', level: 6 }
for (var n in obbj) {
console.log("属性名:" + n); //这里的n为属性名
} //属性名:name 属性名:age 属性名:genedr 属性名:level 属性名:test
for (var i in obbj) {
console.log("属性值:" + obbj[i]); //语法:对象["属性名"]:属性值 (因为n是变量)
} //属性值:misaka 属性值:17 属性值:famale 属性值:5 属性值:[object Object]