前端学习之ES6-对象的扩展笔记
2016-03-16 本文已影响0人
娟子
属性的简洁表示法
ES6允许直接写入变量和函数,作为对象的属性和方法;这种写法同样可以应用于函数返回值
var birth = '2000/01/01';
var Person = {
name: '张三',
birth, //等同于birth: birth
// 等同于hello: function ()...
hello() {
console.log('我的名字是', this.name);
}
};
function getPerson() {
var name = 'LSJ';
var age = 18;
return {name, age};
}
getPoint()// {name: 'LSJ', age:18}
- ps: CommonJS API定义很多普通应用程序(主要指非浏览器的应用)使用的API,从而填补了这个空白。它的终极目标是提供一个类似Python,Ruby和Java标 准库。这样的话,开发者可以使用CommonJS API编写应用程序,然后这些应用可以运行在不同的JavaScript解释器和不同的主机环境中。
属性名表达式
JavaScript语言定义对象的属性,有两种方法:
- 直接用标识符作为属性名
obj.foo = true;
- 用表达式作为属性名
obj['a' + 'bc'] = 123;
,这时要将表达式放在方括号之内。
表达式还可以作为方法名
`let obj = {
['h'+'ello']() { return 'hi'; }
};
obj.hello() // hi`
方法的name属性
函数的`name`属性,返回函数名。对象方法也是函数,因此也有`name`属性。
- 有两种特殊情况:bind方法创造的函数,name属性返回“bound”加上原函数的名字;Function构造函数创造的函数,name属性返回“anonymous”。
(new Function()).name // "anonymous"
var doSomething = function() { // ...};
doSomething.bind().name // "bound doSomething"
- 如果对象的方法是一个Symbol值,那么name属性返回的是这个Symbol值的描述。
Object.is()
ES5比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。JavaScript缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。
ES6提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致,并克服了上述问题。
Object.assign()
Object.assign
方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。
Object.assign
方法至少需要两个对象作为参数,第一个参数是目标对象,后面的参数都是源对象。只要有一个参数不是对象,就会抛出TypeError错误。
注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
var target = { a: 1, b: 1 };
var source1 = { b: 2, c: 2 };
var source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
属性名为Symbol值的属性,也会被Object.assign拷贝。
Object.assign
只拷贝自身属性,不可枚举的属性(enumerable为false)和继承的属性不会被拷贝。
对象的属性特征需要学习一下(js设计那本书)