数组的扩展方法,symbol数据类型与具体属性方法,对象的所有方法与拓展

40

40.1 数组的扩展方法

Array.from() 先看.length方法,再看自然数。要是无len,会返回[]
array.from(arr,x=>x*x);
Array.of() 老模式兼容,传数组项目 相当于Array
copyWithin() copy在内部 修改当前数组,覆盖原有成员
[].copyWithin(target,start,end)
//target 该位置开始替换数据
//start x  该位置开始读取数据
//end x    该位置结束读取数据
find() 第一个值,返还数组项目的本身,括号内函数
function f(v){
	return v>this.age;
}
let person={name:"john",age:20}
{10,12,26,15}.find(f,person)	//26
//find函数接受了第二个参数person对象,回调函数中的this对象指向person对象
findIndex() 第一个值,返还数组项目的本身
fill() 填充数组 覆盖原有元素,全部被抹去

左闭右开区间 ,填充是浅拷贝

fill(填充数字,起始位置x,终止位置x)

遍历:entries() 同时需要属性名称和值,key() 属性名,values() 属性值
(index,elem);
for(const [key,value] of obj)
includes() 和indexof()很像 返回boolean
obj.include("需要验证的值") 	//boolean 

indexof() 是全等运算符 ===,会导致NaN误判

只实现了NaN

flat(),flatMap() concat()只能两级
[1,[2,[3]]].flat(Infinity);	//无限层拉平

原数组有空位,会跳过空位,undefined不会清空

40.2 Symbol数据类型

!不能使用new命令,因为不是对象,是数据类型

let s=Symbol();
//可以在括号里加描述值↓
let s1=Symbol("hello");

1.Symbol 不能与其他类型的值进行运算,报错(不可以进行值的比较

2.Symbol 可以显示转化成字符串

s1.toString()

但是无意义

3.布尔值与Symbol之间可进行转换,但是不能转为数值

4.ES2019 属性description,返回Symbol描述

let sym=Symbol("wan");
sym.description;	//wan
应用
//标识符
//常量 密码加密的效果
const color_green=symbol();

41 Symbol

Symbol.for
let s1=Symbol.for("foo");
let s2=Symbol.for("foo");
s1===s2  //true
Symbol.keyFor 返回通过for方法创造的Symbol值

内嵌Symbol值

Symbol.hasInstance 属性boolean

Symbol.isConcatSpreadable 属性 boolean

length对象,用Arrayfrom转换数组

41.2 对象方法拓展

hasOwnProperty

hasOwnPrototype

property

1.new

2.设变量

3.Object.create(proto,[propertiesObject])
Object.create(proto,[propertiesObject])
					//propertiesObject 可选,默认undefined,不能写其他
let o={
		x:1,
		y:2
}

let o1=Object.create(o,{
	z:{
		enumerable:true,
		writable:true,
		value:3,
		configurable:true
	}
})
4.Object.is() 是否同值严格相等
Object.is(Symbol(),)
5.Object.assign() 对象合并,将对象所有可枚举属性,复制到目标对象 返回target本身
const target={a:1,b:2};

const source1={b:2,c:2};
const source2={c:3};

Object.assign(target,source1,source2);
target		//{a:1,b:2,c:3}
//-------------------------------------------------------
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const returnedTarget = Object.assign({},target, source);
console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }

const returnedTarget = Object.assign(target, source);
console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }

核心注意点:

  1. 目标对象不能是null,undefined

  2. 不能copy原型

  3. 实行的是浅拷贝,只是拿到对象的引用

  4. 替换(替代

  5. 数组是对象,对象不是数组

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

    6.只能进行值的复制。

assign方法用处:

为对象添加方法:
function Obj(){
    this.x=1;
    this.y=2;
}

Object.assign(Obj.prototype,{
	someMethod(arg1,arg2){
	
	}anotherMethod(){
    
	}
});

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qle0moXG-1645175443518)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20201203172201702.png)]

克隆对象:浅复制。

合并多个对象

const merge=(...sources)=>Object.assign({},...sources);	//合并空对象

为属性制定默认值

改原型

Object.setPrototypeOf 设置一个对象的prototype对象,返回参数对象本身。
Object.setPrototypeOf(object=prototype);

const o=Object.setPrototypeOf({},null);

Object.getPrototypeOf

Object.keys() 不含继承,返回所有可遍历的属性的键名 过滤symbol
let o{
	[Symbol("wan")]:1,
	x:2,
	y:3
}
Object.keys(o)		//["x","y"]
Object.values() 过滤掉属性名称为Symbol的值 返回的值的顺序是根据属性名称排序

keys呢

Object.entries() 返回数组,两层 遍历对象的属性 将对象变为数组

Object.entries({foo:'bar',baz:43});		// [["foo","bar"],["baz",42]]

for(const [attr,value] of entries){
    //this.weather[attr]=value
    this.$set(this.weather,attr,value);
}

将一个对象变为二重数组后再存到一重数组内!能方便调用

{foo:‘bar’,baz:43}=> [[“foo”,“bar”],[“baz”,42]]=>[“foo”,“bar”,“baz”,42]

Object.fromEntries() 将二维数组变成对象:↑逆操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值