JS6-对象

====对象

属性的简洁表示法

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

var foo = ‘bar‘;

var baz = {foo};

baz // {foo: "bar"}

// 等同于

var baz = {foo: foo};

上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量名, 属性值为变量的值。

function f(x, y) {

return {x, y};

}

// 等同于

function f(x, y) {

return {x: x, y: y};

}

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

除了属性简写,方法也可以简写。

//---------

var o = {

method() {

return "Hello!";

}

};

// 等同于

var o = {

method: function() {

return "Hello!";

}

};

//----------

var birth = ‘2017/01/01‘;

var Person = {

name: ‘张三‘,

birth, //等同于birth: birth

hello() { console.log(‘我的名字是‘, this.name); } // 等同于hello: function ()...

};

这种写法用于函数的返回值,将会非常方便。

function getPoint() {

var x = 1;

var y = 10;

return {x, y};

}

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

====Object.assign()

Object.assign方法用于对象的合并,将源对象(source)的所有属性,复制到目标对象(target)。

var target = { a: 1 };

var source1 = { b: 2 };

var source2 = { c: 3 };

Object.assign(target, source1, source2);

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

Object.assign方法的第一个参数是目标对象,后面的参数都是源对象。

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

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会直接返回该参数。

var obj = {a: 1};

Object.assign(obj) === obj // true

如果该参数不是对象,则会先转成对象,然后返回。

typeof Object.assign(2) // "object"

由于undefined和null无法转成对象,所以如果它们作为参数,就会报错。

Object.assign(undefined) // 报错

Object.assign(null) // 报错

如果非对象参数出现在源对象的位置(即非首参数),那么处理规则有所不同。首先,这些参数都会转成对象,如果无法转成对象,就会跳过。这意味着,如果undefined和null不在首参数,就不会报错。

let obj = {a: 1};

Object.assign(obj, undefined) === obj // true

Object.assign(obj, null) === obj // true

====Object.keys(),Object.values(),Object.entries()

----Object.keys()

ES5 引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。

var obj = { foo: ‘bar‘, baz: 42 };

Object.keys(obj)// ["foo", "baz"]

ES2017 引入了跟Object.keys配套的Object.values和Object.entries,作为遍历一个对象的补充手段

let {keys, values, entries} = Object;

let obj = { a: 1, b: 2, c: 3 };

for (let key of keys(obj)) {

console.log(key); // ‘a‘, ‘b‘, ‘c‘

}

for (let value of values(obj)) {

console.log(value); // 1, 2, 3

}

for (let [key, value] of entries(obj)) {

console.log([key, value]); // [‘a‘, 1], [‘b‘, 2], [‘c‘, 3]

}

-----Object.values()

Object.values方法返回一个数组,成员是参数对象自身的所有属性的键值。

var obj = { foo: ‘bar‘, baz: 42 };

Object.values(obj)// ["bar", 42]

var obj = { 100: ‘a‘, 2: ‘b‘, 7: ‘c‘ };

Object.values(obj)// ["b", "c", "a"]

上面代码中,属性名为数值的属性,是按照数值大小,从小到大遍历的,因此返回的顺序是b、c、a。

操作字符串

Object.values(‘foo‘)// [‘f‘, ‘o‘, ‘o‘]

上面代码中,字符串会先转成一个类似数组的对象。字符串的每个字符,就是该对象的一个属性。因此,Object.values返回每个属性的键值,就是各个字符组成的一个数组。

------Object.entries

Object.entries方法返回一个数组,成员是参数对象自身的所有属性的键值对数组。

var obj = { foo: ‘bar‘, baz: 42 };

Object.entries(obj)// [ ["foo", "bar"], ["baz", 42] ]

除了返回值不一样,该方法的行为与Object.values基本一致。

时间: 2025-01-06 22:25:59

JS6-对象的相关文章

js6类和对象

[javascript] view plain copy // 第一种:对象 var person = {};// 或者var obj = new Object(); person.name = "king"; person.age = 20; person.Introduce = function () { alert("My name is " + this.name + ". My age is " + this.age); }; pers

JS6(内置对象)

JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等: 对象的方法:能够在对象上执行的动作.例如,表单的"提交"(Submit),时间的"获取"(getYear)等: JavaScript 提供多个内建对象,比如 String.Date.Array 等等,使用对象前先定义,如下使用数组对象: var objectName =new Array();

js6:history和navigator对象的学习

原文发布时间为:2008-11-08 -- 来源于本人的百度文章 [由搬家工具导入] <html> <head> <title>js</title> </head> <body><input type="button" name="goto" Value="Back" onClick="history.back()"><input typ

通过jQuery Ajax使用FormData对象上传文件

转自:http://www.cnblogs.com/labnizejuly/p/5588444.html FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". <form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file"

对象序列化和反序列--Hibernate的查询和新增极其相似

Hibernate几个关键字持久化,ORM(关系对象映射)(数据库中关系称作是一张表) 应用在项目中,刘一从写的查询代码,每次都挂掉,想要弄出测试数据,自己想着把查询出来的复杂数据弄到文件里自己要是去造那些复杂数据很麻烦public class Object1 { public static void main(String args[]){ HashMap<String, Object> obj=new HashMap<String,Object>(); obj.put(&quo

C#中XML与对象之间的序列化、反序列化

using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Xml.Utility { public static class XmlUtil { /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化

菜鸟学python之对象类型及运算

Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型. 等号(=)用来给变量赋值. 1 变量赋值 1.1 单个变量赋值 >>> name="python" >>> print(name) python 1.2 多个变量赋值 >>> name=names="python&

java 类对象使用

在学习反射机制时,总结一下获得类对象方式: 第一种方式:通过类本身来获得对象 Class<?> classname = this.getClass(); 或者this.class 第二种方式:通过子类的实例获取父类对象 ClassName cn = new ClassName(); UserClass = cn.getClass(); Class<?> SubUserClass = UserClass.getSuperclass(); 第三种方式:通过类名加.class获取对象 C

dbutils封装对象,单列,一行一列(用)

基本用法:查找并封装对象与对象集合 public User findUserByNamePassword(String name,String password){ QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "select * from user where name='"+name+"' and password = '"+password

Class类 获取Class对象

阅读API的Class类得知,Class 没有公共构造方法.Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的 获取Class对象的三种方式(实例采用Person类) 方式1:通过Object类的getObject()方法 Person p = new Person(); Class c = p.getClass(); 方式2: 通过 类名.class 获取到字节码文件对象(任意数据类型都具备一个class静态属性,看上去要比第一种方