JavaScript/ES6中的Object

记录Object构造函数的一些静态方法;Object是编程中常见的一种构造函数,创建一个对象包装器,为什么说是创建了一个对象包装器?Object构造器会根据传入的参数的类型,将参数包装成具体的对象,如有数字对象、boolean对象、字符串对象、Object对象(null ,undefined,不传参)、Symbol对象;若传入的参数是个对象(引用类型数据),则会返回参数自身。一般情况下,定义一个对象,可以直接用对象字面量如:var obj = { }; var obj1 = {a: '123'}; 一般不会很少用new Object();

1,以下几个例子描述了Object创建的几种对象包装器以及Object的属性:Symbol不是构造函数

//1,当参数为null或undefined,或者不传参的时候---------------------
//以下跟Object()的执行结果一样。
var obj = new Object(null); //{}
obj = new Object(undefined);//{}
obj = new Object();//{}

//2,当参数是简单的原始数据时;-----------------------
//以下例子,Object(arg)与new Object(arg);
//但是String(arg)与new String(arg)是不一样的,
//String(arg) == arg; new String(arg)创建一个原始值为arg的字符串实例。
//Number、Boolean跟String一样。
var strObj = new Object('str');//String{'str'},等同于new String('str');
var boolObj = new Object(true);//Boolean{true},等同于new Boolean(true);
var numberObj = new Object(1);//Number{1},等同于new Number(1);
var symbolObj = new Object(Symbol.for('Symb'));//Symbol(Symbol(Symb)),Symbol不是构造函数

//3, 当参数是引用类型时;----------------
//Object(refrenceObj)与new object(refrenceObj)效果一样;
var arrObj = [1,4,6];
var arrObj1 = new Object(arrObj);
arrObj1 === arrObj;//true, 返回arrObj本身。
var obj = {a: 'hi', b: 'hello'};
obj === new Object();//true
//当参数值是String对象、Number对象、Boolean对象等,结果也是一样的。

//4,顺带一提Array与new Array()的效果一样,都是创建数组实例-----------
Array();//[]
new Array();//[]

Array(9);//[empty*9],长度为9的空数组
new Array(9);//[empty*9],长度为9的空数组

Array(1, 2);//[1,2],长度为2,元素项1,2
new Array(1, 2);//同上

2.1,ES6版本中增加的方法 Object.is、Object.getOwnPropertySymbols、Object.setPrototypeOf、Object.assign:

//1, Object.is(val1, val2)------------
//Object.is是用来比较两个值是否严格相等(数据类型以及值同时相等);
//且Object.is比较两个NaN,返回的是true;
//比较两个引用类型值时,只有当他们指向相同的引用相等。
Object.is('2', '2');//true
Object.is('2', 2);//false;

Object.is(true, true); //true
Object.is(true, 1); //false

Object.is({}, {});//false
var obj = {}; var obj1 = obj;
Object.is(obj, obj1);//true

Object.is(NaN, NaN); //true.

//2.1, 面对Object.assign,可以当作是有3个重载方法-------------
//fucntion(target, source)/function(target, ...sources)/
//function(target, source1, source2, ?source3),那么在使用Object.assign用的是哪个呢??
var obj = {a: 'hi', b: 'hello'};
var mergedObj = Object.assign(obj, {a: 'TEST'}, {c: 'take an exam'});
mergedObj === obj;//true
mergedObj
//{a:'TEST', b:'hello', c: 'take an exam'}
//Object.assign的操作对target对象有影响,并返回target对象本身

//2.2,Object.assign可用于多个数组的合并,也可以对象和数组的混合合并---------
//使用方式同上
//当参数是数组,下标index便是数组的key
var obj = {a: 'TEST', c: 'EXAM'};
var mergedObj = Object.assign(obj, ['for what', 'go ahead']);
mergedObj === obj;//true
mergedObj
//{0: 'for what', 1: 'go ahead',a: 'TEST', c: 'EXAM'}
//target是数组时
var arr = ['here', 'is
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值