ES6中对对象的扩展

  ES6允许直接写入变量和函数作为对象的属性和方法。这样的书写更加简洁。

  ES6允许在对象中只写属性名,不写属性值。这时,属性值等于属性名所代表的变量。

function f(x , y){
  return {x ,y};
}

f(1,2)// Object {x:1,y:2}

function getPoint(){
  var x=1;
  var y=10;
  return {x,y};
}

getPoint()//{x:1,y:10}

  js语言定义对象的属性有两种方法。obj.foo=true;obj[‘a‘]=123;1直接用标识符作为属性名;2是用表达式作为属性名,这时要将表达式放在方括号内。但是,如果使用字面量方式定义对象,在ES5中只能使用方法一定义属性。

  ES6允许字面量定义对象时用表达式作为对象的属性名,即把表达式放在方括号内。

let propKey=‘foo‘;
let obj={
  [propKey]:true,
  [‘a‘+‘bc‘]:123,
}

var lastWord=‘last word‘;
var a={
  ‘first word‘:‘hello‘,
  [lastWord]:‘world‘
}

  Object.is用来比较两个值是否严格相等。它与严格比较运算符(===)的行为基本一致。Object.is(‘foo‘,‘foo‘)//true Object.is({},{})//false 不同之处只有两个:一是+0不等于-0,二是NaN等于自身。Object.assign方法用来将源对象的所有可枚举属性复制到目标对象。它至少需要两个对象作为参数,第一个参数是目标对象,后面的参数都是源对象。只要有一个参数不是对象,就会抛出TypeError错误。

var target={a:1};
var source1={b:2};
var source2={c:3};

Object.assign(target,source1,source2);

target//{a:1,b:2,c:3}

//注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,
//则后面的属性会覆盖前面的属性。

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}

  注意,Object.assign可用于处理数组,但是会将其视为对象。

  Object.assign([1,2,3],[4,5])//[4,5,3]

  Obeject.assign把数组视为属性名为0、1、2的对象,因此目标数组的0号属性4覆盖了原数组的0号属性1.

  

  对象的扩展运算符

  Rest参数用于从一个对象取值,相当于将所有可遍历但尚未被读取的属性,分配到指定的对象上。所有的键及其值都会复制到新对象上。rest参数的复制是浅复制,即如果一个键的值是复合类型的值,那么rest参数复制的是这个值的引用,而不是这个值的副本。

  Rest参数不会复制继承自原型对象的属性。

  扩展运算符用于取出参数对象的所有可遍历属性,复制到当前对象中。这等同于使用Object.assign方法。

  扩展运算符可用于合并两个对象。let ab={...a,...b};

原文地址:https://www.cnblogs.com/wlxll/p/9329434.html

时间: 2024-11-05 23:28:51

ES6中对对象的扩展的相关文章

ES6数组和对象的扩展

es6数组的扩展 扩展运算符 扩展运算符是对具有Iterator 接口的对象,都可以使用扩展运算符 Array.from() 用于将两类对象转化为真正的数组 1.类似数组的对象(只要据有length属性, 都可以被转化为数组) 2.可遍历(iterable)的对象 Array.of() 将一组值转化为数组 find和findIndex find方法,用于找出第一个符合条件的数组成员,没有找到会返回undefiend,findIndex方法返回的是第一个符合条件成员的位置, 如果找不到返回-1,

ES6中Promise对象个人理解

Promise是ES6原生提供的一个用来传递异步消息的对象.它减少了传统ajax金字塔回调,可以将异步操作以同步操作的流程表达出来使得代码维护和可读性方面好很多. Promise的状态: 既然是用来传递异步消息的那肯定就会有异步消息的状态:所以promise提供了3种状态:pending(进行中),resolved(已完成或者称 fulfilled),rejected(失败).不同的是Promise不会受外界影响,只有异步操作结果才能决定当前是哪种状态,任何其他非异步操作都不能改变.所以当状态发

ES6中对数组的扩展

Array.from()方法用于将两类对象转为真正的数组:类似数组的对象和可遍历对象. php有种返回json长成:let arr1={0:'1',1:'a',2:'c'};ES6可以直接写成let arr2=Array.from(arr1);//['1','a','c'].ES5可以写成 var arr3=[].slice.call(arr1);感谢ES6吧. 只要是部署了Iterator接口的数据结构,Array.from都能将其转为数组.Array.from('hello')//[h,e,

es6中新增对象的特性和方法

1. 对象简写 //曾经假如是这样的 var name = 'xxx' var obj = { name : name, say : function(){ alert(this.name) } } //对象简写后 var obj = { name, say(){ alert(this.name) } } //简单的说就是写对象的时候把冒号以及左边的key省了,直接写变量名或者方法名,这个应用还是很广泛的. 2. 属性名表达式 //曾经定义的时候可以这样这样 var obj = { name :

ES6——内置对象的扩展

字符串的扩展 //模版字符串 let flag=true; let hml=`<ul> <li> <span></span> <span></span> <span class="${flag?'show':'hide'}"></span> </li> </ul>`; console.log(html); 1.repeat let str1="a"

ES6 之 Math对象的扩展

ES5 http://www.w3school.com.cn/jsref/jsref_obj_math.asp ES6 Math.trunc() - 取整 console.log(Math.trunc(3.5)); // 3 console.log(Math.trunc(-3.5)); // -3 // 对于非数值,Math.trunc() 内部使用Number()方法咸江奇转化为数值 console.log(Math.trunc('123.456')); //123 console.log(M

es6中class类的使用

在es5中我们是使用构造函数实例化出来一个对象,那么构造函数与普通的函数有什么区别呢?其实没有区别,无非就是函数名称用首字母大写来加以区分,这个不用对说对es5有了解的朋友都应该知道. 但是es5的这种方式给人的感觉还是不够严谨,于是在es6中就换成了class,就是把es5中的function换成了class,有这个单词就代表是个构造函数,然后呢对象还是new出来的,这一点并没有变化.    类的使用 从里面的代码我们可以看到除了function变成了class以外,其它的跟es5一样 cla

ES6 中 let 和 const 总结

目录 let const 1. let要好好用 1. 基本用法 2. let声明的变量不存在变量提升 3. TDZ(temporal dead zone)暂时性死区 4. 不允许重复声明 2. 块级作用域 1. 为什么需要块级作用域 2. ES6中实现了块级作用域 3. 块级作用域与函数声明 4. do表达式(仅仅是提案) 3. const(不要忘记立即初始化哦) 1. 基本用法 2. const的本质 4. ES6中声明变量的六种方法 5. ES6对顶层对象属性的改变 1. ES5中顶层对象的

ES6 常用总结——第三章(数组、函数、对象的扩展)

1.1. Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map). 下面是一个类似数组的对象,Array.from将它转为真正的数组. let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3}; // ES5的写法var arr1 = [].slice.call(arrayLike);