对象的分类
内建对象:在ES标准中定义的对象,在任何ES实现中都可以使用。比如:Math,String,Number,…
宿主对象:由JS运行环境提供的对象,主要指浏览器提供的对象。例如:BOM,DOM
自定义对象:开发人员自行定义。
对象的基本操作
(对了,提醒一下,console.log();需要浏览器打开开发者选项里面查看)
var obj=new Object();
//添加对象的属性
obj.name=“添加name属性”;
obj.age=18;
obj[“sex”]=“男”;
//读取对象的属性(如果读取的属性不存在返回Undefined)(属性可以是任意类型,也可以是Object)
console.log(obj.name);
console.log(obj.age);
console.log(obj[“sex”]);
var str1=“sex”;
console.log(obj[str1]);
//修改属性值
obj.age=100;
//删除属性
delete obj.age;
//属性名不强制要求遵守规范
//检查对象中是否有指定属性:语法:“属性名” in 对象名
console.log(“score” in obj);
//引用数据类型Object
//原理:new会创建堆空间
//案例
var a=1;
var b=a;
console.log(b);
a++;
console.log(b);
var obj1=new Object();
obj1.name=“123”;
var obj2=obj1;
console.log(obj2);
obj1.name=“234”;
console.log(obj2);
// obj1=null;
// console.log(“null后还有吗”+obj2);
//两个对象比较的是他们的内存地址,如果obj2和obj3指向同一个对象,返回true
var obj3=obj1;
console.log(obj2 === obj3);
var obj3=obj2;
console.log(obj2 === obj3);
//对象字面量
//使用对象字面量创建对象
var obj4={};
console.log(obj4);
var obj5={
name:“obj5”,//如果键使用特殊符号,需要加引号
age:18,
};
console.log(obj5);
函数
函数也是一个对象
var fun = new Function();
fun.name="first fun";
console.log(fun.name);//已经不能用了
创建函数:
var fun = new Function();
console.log(typeof fun);
可以将封装的代码以字符串的形式传递给构造函数
var fun = new Function(“console.log(‘传入函数中的代码’);”);
使用函数声明创建函数(常用)
function 函数名([形参1,形参2,…]){
console.log(“使用函数声明创建的函数”);
}
使用函数表达式创建函数
var 函数名=function([1,2,…]){
console.log(“创建一个匿名函数,然后赋值给变量”);
}//匿名函数
调用函数:
fun();
调用函数时,函数中封装的代码会按照顺序执行
函数参数:fun4
参数返回值:fun5
返回值可以是任意数据类型
立即执行函数:函数对象
(function(){
alert(“函数对象,会立即执行”);
})();
方法
函数也可以作为对象的属性,我们称此函数为该对象的方法。
var name=“对象的方法”;
obj.setName=function(name){
obj.name=name;
}
实用案例:枚举对象中的属性
使用for … in 语句
语法:
for(var n in obj){
console.log(“属性名:”+n+",属性值:"+obj[n]);//因为n是变量
}
作用域
全局作用域:
页面打开时创建,关闭时销毁
有一个全局对象window,可以直接使用,创建的变量都会作为window对象的属性保存
变量声明提前:var声明的变量,会在所有代码执行前被声明,非var声明的变量,不会被提前声明
函数声明提前:function 函数(){}会在所有代码执行前被创建,使用函数表达式创建的函数var fun=function(){}不会被提前声明
声明的变量都是全局变量
函数作用域:
调用函数时创建函数作用域,函数执行完毕销毁
在函数作用域中可以访问到全局变量,可以使用window对象使用
声明的特性var声明,会代码执行前声明