二维数组中处理其中相同的数组(可删除重复,判断重复)
var arr = [[4,5],[1,2],[3,4],[1,2]]
var arr2 = []
arr.forEach(val=>{
// JSON.stringify() 用于将对象转为字符串,且带着表示对象的括号{}/[]
// 此处若用 toString方法 .....也可以
arr2.push(JSON.stringify(val))
})
// console.log(arr2)
var newArr = Array.from(new Set(arr2))
// console.log(newArr)
从输入一个url到页面呈现经历了什么?
- 首先生成HTTP请求 // 但是请求并未发出,因为我们还不知道要请求的服务器地址
- DNS解析,即域名解析,通过操作系统自身的Socket库和对应的网络功能,向最近的dns服务器发送解析当前url的请求。若该服务器没有相对应的域名与之匹配,则由该台服务器向有'.com'域的dns服务器发请求,依次往上,最后由该台dns服务器拿到对应的IP地址并返回给浏览器。
- 有了目标服务器ip地址后,TCP三次握手 // 第一次服务器发送带syn信号的消息给服务器,让服务器确认自己的发送信息的能力,后,服务器回传syn&ack信息给客户端,让浏览器确认服务器发送和接受信息的能力,后,浏览器向服务器发送ack信号,让服务器确认自己的接受信息的能力。
- https应用层的TLS / SSL安全验证,安全验证也分几步,第一步,客户端向服务器请求证书和公匙;第二部,客户端根据OA规范验证证书有效性。第三步,验证成功后,返回给服务器验证成功消息,建立对称加密。之后的数据通信都会经过该加密。
- 缓存验证 // 三道门槛【1,根据header头expire(过期时间),Cache-Control(http1.1新的header,相对时间)判断缓存是否过期,也就是强缓存。2,eTag令牌机制(协商缓存),向服务器发送一条if-none-match信息,若令牌匹配,则304not-modified返回。3,last-modified机制,根据上一次的修改时间来判断?若无修改也304返回。】
- 数据传输,html,css,js等资源传输 // 此处还有文章。
- 四次挥手,断开连接。 // 第一次,浏览器向服务器发送带 FIN 头信息,告诉服务器请求发送完了希望断开连接,之后服务器返回一个带ack信号头信息,告诉浏览器等待信息(因为此时数据并未传输完毕),后,返回带 FIN 头信息给浏览器,告诉它数据发送完毕可断开,浏览器接收后返回带ACK信号头信息,当即断开连接,服务器接受后,也断开连接。 挥手过程 FIN > ACK > FIN > ACK。
浅尝则止,但细节皆值得认真刨析,其中还大有内容。
参考地址
2018-05-31
== 中的隐式转化
判断 a == b (类型相等则直接比较,这里讨论类型不同的情况)
1,若a与b中含有一个Object类型,则将其ToPrimitive(input,(Number || String)),第二个参数仅在Object为Date或指定时为String。否则,转为基本类型依次通过对象上的 valueOf() /ToString /ToNumber 一步步转化,途中转化成左右相同类型可以比较时,会停止转化。
2,若a,b中含有boolean类型,则将booleanToNumber,再比较
3,若a,b分别为String和Number,则将String类型的ToNumber
4,若null,和undefined,则返回true
// tip:取反号的优先级!高于==。