本文共 2093 字,大约阅读时间需要 6 分钟。
考察new关键字:
1. foo = new bar() 会在函数bar内部创建一个空对象,并且this指向这个空对象;
2. 并且使用new之后,return已经失效了,可以注释掉return进行验证。
3. 使用let和var定义x, 结果都是2。但是使用let时候定义在全局的x的值不会被改变。
:1 : 2 两者的this均指向window;因为let有自己的作用域
(document在window下)
this指向window, let定义在document。从内向外找x; 如果没有let定义x, 那么x 就 是3
bar只能在函数内部访问到,在外部是不可以的;并且在函数调用的时候只能使用foo(),不能使用bar();
ES6中let:变量先声明后使用;
Set内部储存的是key值。自动去重。
两种方法都可以,但是使用Set更好,因为可以去重: 先转为Set后去重,再转为数组。
undefined
函数或者构造函数身上有prototype,但是new出来的实例对象身上是没有prototype的。
但是实例对象身上有_proto_, _proto_指向prototype。
function countLargestGroup(n){ let map = new Map(); for(let i = 1; i <= n; i++){ let key = [...String(i)].reduce((pre, cur) => Number(pre) + Number(cur)); map.set(Number(key), map.has(key) ? map.get(key)+1 : 1); // key需要转化为Number类型;因为reduce函数没有传入参数,默认的第一个值是数组第一位;此时从数组第二位开始reduce。 } return [...map.values()].filter(item => item === Math.max(...map.values())).length;}
function getLargestGroup(n){ let map = new Map(); for(let i = 1; i <= n; i++){ let key = [...String(i)].reduce((pre, cur) => Number(cur) + Number(pre)); map.set(Number(key), map.has(key)?map.get(key)+1:1); } return [...map.values()].filter(n => Math.max(...map.values()) == n).length;}function getLargestGroup1(n){ let map = {}; let max = 0; let count = 0; for(let i = 1; i <= n; i++){ let sum = 0; let key = i.toString().split("").forEach(n => sum += n); if(map[key]){ map[key] += 1; }else{ map[key] = 1; } } max = Math.max(...Array.from(map.values())); for(let val of m.values()){ if(val == max){ count++; } } return count;}
key需要转化为Number类型;因为reduce函数没有传入参数,默认的第一个值是数组第一位,第一位是字符串“1”;此时从数组第二位开始reduce。
扩展运算符: 可以将字符串转化为数组:实现split("")的功能:[...String("12")]
可以将map或者set的value和key取出并转为数组:实现类似Array.from(map.values()): [...map.values()]
可以配合Math.max或者Math.min使用求得最值:Math.max(...arr)
forEach遍历 : let sum = 0; arr.forEach(n => sum += n)
map的创建与访问方法:
(1)let map = new Map(); if ( map.has('key') ) { map.get('key')++ }
(2)map = {}; if ( map['key'] ) { map['key']++ }
"agfadsgh".toSring() 与 String("agfadsgh") 效果相同。
转载地址:http://dgtzi.baihongyu.com/