JS找字符串中出现最多的字符
let s='nininiiiiihaoan';
s.split('').reduce(function (pre,cur) {
pre[cur]?pre[cur]++:pre[cur]=1
return pre;
},{})
{n: 4, i: 7, h: 1, a: 2, o: 1}
//深拷贝
function deepClone(obj) {
function isObject(o){
return(typeof o ==='object' || typeof o ==='function')&& o!=null
}
if(!isObject(obj)){
throw new Error('非对象')
}
//...浅拷贝第一层,如果直接: let cloneValue =obj 导致所有层级都拷贝地址指针
let cloneValue = Array.isArray(obj)?[...obj]:{...obj}
//静态方法 Reflect.ownKeys() 返回一个由目标对象自身的属性键组成的数组。
Object.keys(obj).forEach(function (key) {
cloneValue[key]=isObject(obj[key])?deepClone(obj[key]):obj[key]
})
return cloneValue
}
//变量和函数声明都被提升,但变量的值没有
function test() {
console.log(a);
console.log(foo());
var a = 1;
function foo() {
return 2;
}
}
test();
VM1007:2 undefined
VM1007:3 2
//质数:除了1和他本身,不能有其他因数
function isPrime(number) {
if (typeof number !== 'number' || !Number.isInteger(number)) {
// Number.isInteger为ES6中新增判断整数
return false;
}
if (number < 2) {
return false;
}
if (number === 2) {
return true;
} else if (number % 2 === 0) {
return false;
}
var squareRoot = Math.sqrt(number); //平方根,比如Math.sqrt(9)为3
for(var i = 3; i <= squareRoot; i += 2) {//??思考题
if (number % i === 0) {
return false;
}
}
return true;
}
//闭包
var x = 20;
var a = {
x : 15,
fn : function(){
var x = 30;
return function(){
return this.x;
};
}
};
console.log(a.fn());//ƒ (){return this.x;}
console.log((a.fn())());//20
console.log(a.fn()());//20
console.log(a.fn()() == (a.fn())());
console.log(a.fn().call(this));20
console.log(a.fn().call(a));15
类数组:是相当于一个对象,里面有数组的值以及相应的属性(length)。


1:Array.prototype.slice.call(likeArray);利用slice的返回新数组以及call改变this指向而形成一个新数组
2:Array.from(likeArray); ES6的新方法
3:[...likeArray],或者在函数传值时用..."收集"; //...要求likeArray是有Symbol的iterator属性
12个石头,一个天平,最少称重几次?
3
有36辆自动赛车和6条跑道,没有计时器的前提下,最少用几次比赛可以筛选出最快的三辆赛车?
8次
下面这个例子,父元素div绑定两个事件(一个冒泡阶段、一个捕获阶段),子元素也是这种情况。事件触发顺序如何。
var btn = document.querySelector('button');
var div = document.querySelector('div');
btn.addEventListener('click', function(){
console.log('bubble','btn');
},false);
btn.addEventListener('click', function(){
console.log('capture','btn');
},true);
div.addEventListener('click', function(){
console.log('bubble','div');
},false);
div.addEventListener('click', function(){
console.log('capture','div');
},true);

var val = 'smtg';
console.log('Value is ' + (val === 'smtg') ? 'Something' : 'Nothing');
A: Value is Something
B: Value is Nothing
C: NaN
D: other
解答:这题考的javascript中的运算符优先级,这里'+'运算符的优先级要高于'?'所以运算符,实际上是 'Value is true'?'Something' : 'Nothing',当字符串不为空时,转换为bool为true,所以结果为'Something',选D
//var变量声明提升,值不提升
var name = 'World!';
(function () {
if (typeof name === 'undefined') {
var name = 'Jack';
console.log('Goodbye ' + name);
} else {
console.log('Hello ' + name);
}
})();
相当于:
var name = 'World!';
(function () {
var name;//现在还是undefined
if (typeof name === 'undefined') {
name = 'Jack';
console.log('Goodbye ' + name);
} else {
console.log('Hello ' + name);
}
})();
//Array.prototype.filter is not invoked for the missing elements
(缺少的元素,不会调用过滤器)
var ary = [0,1,2];
ary[10] = 10;
ary.filter(function(x) { return x === undefined;});
[]
第11题
//垂直水平居中
.content {
width: 300px;
height: 300px;
background: orange;
margin: 0 auto; /*水平居中*/
position: relative;
top: 50%; /*偏移*/
transform: translateY(-50%);
}
// 在移动端中怎样初始化根元素的字体大小
页面开头处引入下面这段代码,用于动态计算font-size:
(假设你需要的1rem = 20px)
(function () {
var html = document.documentElement;
function onWindowResize() {
html.style.fontSize = html.getBoundingClientRect().width / 20 + 'px';
}
window.addEventListener('resize', onWindowResize);
onWindowResize();
})();
document.documentElement:获取document的根元素
html.getBoundingClientRect().width:获取html的宽度(窗口的宽度)
监听window的resize事件
一般还需要配合一个meta头:
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
viewport
移动设备上的viewport就是设备的屏幕上能用来显示我们的网页的那一块区域
可能比浏览器的可视区域要大,也可能比浏览器的可视区域要小,比如可以:平移或缩放
移动设备默认的viewport是layout viewport,也就是那个比屏幕要宽的viewport,
但在进行移动设备网站的开发时,我们需要的是ideal viewport。所以使用:
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
利用meta标签把http请求换为https:
<meta http-equiv ="Content-Security-Policy" content="upgrade-insecure-requests">
输入URL到页面呈现

第一次握手:当客户端需要去建立连接时,客户端就会发送SYN包 到服务器,等待服务器确认
第二次握手:服务器收到SYN包,发送SYN,ACK确认标志。
第三次握手:客户端收到服务器的SYN+ACK包,然后就会像服务器发送确认包ACK和SYN