对象新增方法
//判断对象是否相同Object.is();let obj1 = {myname:'zhangsan'}let obj2=obj1;console.log(obj1===obj2); //tureconsole.log(Object.is(obj1,obj1)); //tureNaN===NaN //falseObject.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=0var 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//创建一个maplet 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//通过键名获取键值 getlet 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);
