ES6中对象的扩展
对象的简介方式
let name="matrix",age=100;
let school={name,age};
let str = "name";
let obj = {
fn(){},
// fn:function(){}
// 属性名都是字符串 ,属性名使用[] 里面可以写变量
[str]:name,
["my"+str]:name
}
##Objectf方法的扩展
// Object() 将参数变成对象
console.log(Object(1)); // Number
console.log(Object(true)); // Boolean
// Object()
console.dir(Object); //
// Object.is判断 两个值是否相等
// === NaN跟NaN不等 -0===0 true
// 其他的跟 === 一致
console.log(NaN === NaN); // false
console.log(-0===0); // true
console.log(Object.is(NaN, NaN)); // true
console.log(Object.is(-0,0)); // false
// Object.assign 合并对象
// Object.assign(obj1,obj2); 将obj2合并到obj1上,返回obj1
let obj1 = {name:"matrix"};
let obj2 = {age:10};
console.log(Object.assign(obj1, obj2)); // {name: "matrix", age: 10}
console.log(obj1); // {name: "matrix", age: 10}
// ES7 中提供了对象的扩展运算符...
let school = {...obj1,...obj2};
console.log(school); // {name: "matrix", age: 10}
// Object.getOwnPropertyDescriptor 获取一个对象中某个属性的描述
console.log(Object.getOwnPropertyDescriptor("123", "length"));
// 字符串的length 不可以修改 字符串中的方法不可以改变原字符串的
let str1 = "123";
str1.length = 0;
console.log(str1);
/**
* configurable: false 是否可以配置 可以删除这个属性
enumerable: false 是否可以枚举
value: 3
writable: false 是否可修改
__proto__: Object
*/
// Object.keys(); 返回值是一个数组, [所有可枚举的属性]
console.log(Object.keys(school)); // ["name", "age"]
// Object.values();返回值是一个数组, [所有可枚举的属性的值]
console.log(Object.values(school)); // ["matrix", 10]
// Object.entries();返回值是一个数组,[每一项[键,值]]
console.log(Object.entries(school)); // [["name", "matrix"],["age", 10]]
对象的set和get
let obj = {
_name:"AA",
get name(){
// 只要通过obj获取name属性就会触发这个函数
// 这里可以通过return返回值
console.log(1);
return this._name;
},
set name(val){
// 只要通过obj给name属性设置值就会触发这个set函数
console.log(2);
this._name = val;
}
};
console.log(obj.name);
obj.name="matrix";
console.log(obj.name);