1. 定义
复合数据,把数据(number 、string 、boolean 、null 、undefined 、 object 、 function、array)设计为一个整体的数据容器。用代码来描述现实世界中的业务数据。基本数据称为属性,引用数据称为方法。
2. 对象的成员操作
访问和修改:1.点语法。例:goods.price
2.["成员名"]。例:goods["price"]
案例:
var a = "age";
var b = 23;
var obj = {
like:'read';
sex:'man'};
obj.name = "Bob"; // 添加新成员
obj[a] = b;
obj['a'] = b;
obj.sex = 'female' // 修改成员值
obj['like']=run;
console.log(obj);
//控制台打印:{like: 'run', sex: 'female', name: 'Bob', age: 23, a: 23}
总结:中括号内有引号,则引号内的内容为对象的属性名。
3. 创建对象的基本写法
3.1. 直接写对象(对象直接量)
var obj={
name:"joker",
age:40,
birth:717
}
3.2. 通过函数创建对象
例:
function Person(){
}
var obj1=Person();
var obj=new Person();
console.log(obj1); // 打印undefined
console.log(obj); // 打印一个空对象
new关键字
1. 创建一个空对象{ }
2. 用这个创建的空对象去调用函数
3. 整个new表达式会得到一个对象
如果函数返回值是一个引用数据,new得到的就是这个返回值
如果函数返回值是一个基本数据,new得到的是创建的新对象
4. 闭包
4. 1. 语法理解:具有独立作用域的代码块。能访问外层作用域变量值的一种设计,因此所有函数都是闭包。
4. 2. 使用场景
1. 保护数据
原因: 函数内部可以访问函数外部变量,但不能访问内部变量
如果一个函数内部的变量外部想访问,又不能直接访问:该函数可以返回一个内部的函数,然后这个内部的函数来操作这个函数内部的变量。
function fn () {
var user={name:"karen",money:100}
return user
}
var re=fn();
console.log(re);
re.money=900;
console.log(re.money) // 900
//这个设计不合理 因为外部直接修改了函数内部的数据
//解决办法
function fn () {
var user={name:"karen",money:100}
return function tool (m) { user.money= m }
}
var re=fn();
re(90);
2. 实现临时保存数据
利用函数调用栈的独立作用域来实现
3. 防止变量污染,生成闭包块
5. es6新增功能
5.1 属性
var a = 100;
var nickname = "karen";
var obj = { a, nickname }; //把a设置为对象的属性名,a变量的值设置为a属性的值
console.log(obj); //{a: 100, nickname: 'karen'}
5.2 方法
var a = 100;
var obj = {
work() { }, //方法
fn: () => { },
age: 18,
a
}
console.log(obj); //{age: 18, a: 100, work: ƒ, fn: ƒ}
5.3 对象的拓展
...person //取person对象的所有成员
Object.is("hello","hello") //true,判断是不是同一个
Object.is(-0,+0) //false 要判断指针
Object.is(NaN,NaN) //true
注:console.log( -0==+0) //true