对象新增方法
//判断对象是否相同
Object.is();
let obj1 = {
myname:'zhangsan'
}
let obj2=obj1;
console.log(obj1===obj2); //ture
console.log(Object.is(obj1,obj1)); //ture
NaN===NaN //false
Object.is(NaN,NaN); //ture
//合并2个或多个对象
//浅拷贝
let obj1 = {
name:'zhangsan'
}
let obj2 = {
age:20,
//相同的键名会覆盖
}
let obj3 = {
height:'178com'
}
let res = Object.assign(obj1,obj2,obj3);
console.log(res);
//{name: 'zhangsan', age: 20, height: '178com'}
//之后修改会覆盖
//es6 判断某个属性是否是对象的自身属性
obj.hasOwnProperty('key')//es5方法
let obj = {
myname:'zhangsan',
age:20
}
console.log(Object.hasOwn(obj,'age'))
//ture
//获取对象的所有键名,或者键值,放在一个数组里
let obj = {
myname:'zhangsan',
sge:20
}
let keys=Object.keys(obj);
//获取键名放入数组
console.log(keys);//['myname', 'sge']
let values=Object.values(obj);
//获取键值放入数组
console.log(vallues);//['zhangsan', 20]
//可以把对象变成不可配置对象
let obj = {
name:'zhangsan',
age:20
}
Object.seal(obj);
obj.name='lisi'
console.log(obj);
//输出lisi,可修改已经有的属性,但是不能增加
Object.freeze(obj);
//冻结,不可修改,不可增加
math
//ES5方法
let res = Math.pow(2,3);
console.log(res);
//ES6 方法
let res = 2**3;
console.log(res);
//2进制 0b开头
let num = 0b11;
console.log(num);
//八进制 0o开头
let num = 07;
let num = 0o6;
console.log(num);
//16进制 0x开头
let num = 0xff;
console.log(num);
Math新增方法
//去掉小数部分
let num = 3.14;
var res Math.trunc(num);
console.log(res);
//判断一个数是正数 负数还是0,如果是正数返还1,负数-1 0=0
var num = 0;
console.log(Math.sign(num));
//求平方根;
console.log(Math.sqrt(9));
//立方根
console.log(Math.cbrt(9));
//所有参数平方和的平方根
console.log(Math.hypot(9));
Number方法
//判断某个数是否是有限的数
var res = Number.isFinite(5);
var res = Number.isFinite(Infinity);
var num = 2**1024;
//判断某个数字是否是NaN
//js里jsNaN 方法:判断某个字符 是不是 不是一个数字
var num = 'fsdsjh'
var (!isNaN(num)){
console.log('是一个数字');
}else{
console.log('不是一个数字');
}
//判断某个数是否是整数
let num = 1.1;
console.log(Number.isInteger(num));
console.log(Number.parseInt === parseInt);
set
- 是一个集合
- set数据里的值不能重复
- 是对象的键名
- 可以是任意类型 ```javascript //创建set let set = new Set(); set.add(1); console.log(set); //返回一个伪数组{1}
//统计长度 set.size //添加键值 set.add() //删除 delete 删除指定元素 set.delete() //清除 set.clear(删除所有元素)
//has判断set 是否有某个值 let set = new Set([1,2,3,4]); console.log(set.has(6));
//数组去重 let arr [1,2,3,2,3,2,21,3]; let set = new Set(arr); let newarr = […set];
<a name="nlzbH"></a>
## map
```javascript
//创建一个map
let map = new Map();
map.set('name','张三');
map.set({age:20},'hello');
console.log(map);
//{'name' => '张三', {…} => 'hello'}
//直接创建map结构
let map = new Map([['name','zhangsan'],['age',20],['height','177cm']]);
console.log(map);
//map里的方法
//长度 map.size
//删除 map.delete(键名)
//是否存在某个元素 map.has
//通过键名获取键值 get
let map = new Map([["name","张三"],["age",20],["height","178cm"]]);
let res = map.get("age");
console.log(res); //20
迭代器
// for ...of ... ES6语法
let arr = ["张三","李四","王五"];
console.log(arr);
for(let val of arr){
console.log(val);
}
let obj = {
name:"张三",
age:20
}
console.log(obj);
for(let val of obj){
console.log(val);
} //循环对象会报错
let arr = ["张三","李四","王五"];
//获取迭代器
function myiterator(arr){
let num = 0;
return {
next(){
return{
value:arr[num++],
done:num>arr.length?true:false
}
}
}
}
let res = myiterator(arr);
console.log( res.next());
console.log( res.next());
console.log( res.next());
console.log( res.next());
跨页面传参
let obj {
name:'zhangsan',
age:20,
height:'177cm'
}
function o2s(obj){
let keys = Object.keys(obj);
let values = Object.values(obj);
var arr = keys.map((key,index)=>{
return `${key}=${values[index]}`;
})
// console.log(arr);
return arr.join("&");
}
documents.querySelector('button').onclick=function(){
//跳转的同时,携带obj参数
window.location.href=`b.html?${o2s(obj)}`;
}
// 接收 obj参数
let str = window.location.search.substr(1);
let arr = str.split("&");
let obj = {};
arr.forEach(item=>{
let line = item.split("=");
obj[line[0]] = line[1];
})
console.log(obj);