属性的简洁表示法
应用场景
1 属性名和属性值相同
2 返回一个对象 实现传递形参功能return
3 在对象里放两个函数 形式更易懂
例如 属性名和变量相同 用变量来代表对象中的属性值
方法也可以简写
const name = '张三';
const age = 19;
const person = {
name, //等同于name:name
age,
// 方法也可以简写
sayName() {
console.log(this.name);
}
}
person.sayName();
当一个函数的返回值是对象时 这种写法非常简单
sayName=function(){}简写为 sayName(){}
function getPoint() {
const x = 1;
const y = 10;
return {x, y};
}
getPoint()
// {x:1, y:10}
对象的属性名可以用[‘表达式’]
用于
对象中的属性名和一个变量名多种组合
也就是说 属性名依赖于变量名
let xing='li';
let obj={
[xing+'wei']:'liwei',
[xing+'qiang']:'liqiang',
['shuchu'+xing](){
console.log(this);
}
}
console.log(obj.liwei);
console.log(obj['liwei']);
属性名的组合放在[]里 记得加’’
方法[‘’] () {}
对象的方法
- is() 两个值之间的比较
和=一样 不会进行类型转换==
object.is(NaN,NaN);
//返回true
- Object.assign()
Object.assign()方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。
Object.assign(target,obj1,obj2);
若源对象obj1的a属性的值是一个对象,Object.assign()拷贝得到的是这个对象的引用。这个对象的任何变化,都会反映到目标对象上面。
将源对象(source)的所有可枚举属性,复制到目标对象(target)如果对象的属性值为简单类型(如string, number),通过Object.assign({},srcObj);得到的新对象为深拷贝;如果属性值为对象或其它引用类型,那对于这个对象而言其实是浅拷贝的
(2)同名属性的替换
对于这种嵌套的对象,一旦遇到同名属性,Object.assign()的处理方法是替换,而不是添加。
Symbol
表示独一无二的值
let s1 = Symbol('foo');
let s2 = Symbol('bar');
s1和s2都是Symbol函数的返回值,而且参数相同,但是它们是不相等的。
注意
- Symbol 值不能与其他类型的值进行运算,会报错。
- Symbol 值可以显式转为字符串(用字符串来显示 但它还是symbol类型)
- Symbol 值也可以转为布尔值,但是不能转为数值。!sym=false
- sym.description 返回sym的描述
- symbol作为属性名 就能保证不会出现同名的属性。这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖。
let mySymbol = Symbol();
// 第一种写法
let a = {};
a[mySymbol] = 'Hello!';
// 第二种写法
let a = {
[mySymbol]: 'Hello!'
};
注意,Symbol 值作为对象属性名时,不能用点运算符。