日常点滴记录

平常写代码中遇到的小问题,在此记录之。

1 数组的浅拷贝问题:

js中两个对象(如数组、object)之间如果只是简单的赋值,那就会造成浅拷贝的问题,改动其中一个,会造成改变其他的变量,数组的解决办法有两个:

1
2
1:var array2=array1.slice(0);  //因为数组的操作都是返回一个新数组,而不是对原数组进行操作
2 var array2=array2.concat();

对象的深拷贝,目前为止我所看到的解决办法都是用递归实现属性遍历,把属性都赋给新对象。以下代码来自参考博文

1
2
3
4
5
6
7
Object.prototype.clone = function(){ 
var o = this.constructor === Array ? [] : {};
for(var e in this){
o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];
}
return o;
}

2 性能优化tips

1.使用一次innerHTML赋值代替构建dom元素,对于大的DOM更改,使用innerHTML要比使用 标准的DOM方法 创建同样的DOM结构快得多。
2.循环次数确定的时候可以展开循环,不使用循环,如果要使用循环,就使用简直迭代效率会更高一些

3 sublime插件

  1. Markdown preview(渲染markdown成html)
  2. Emmet(写html)
  3. SideBarEnhancements(增强右键)
  4. TortoiseSvn(SVN插件)
  5. ColorPicker(调起颜色盒)
  6. HiveOpener在sb中打开文件、文件夹 等
  7. SublimeLinter 用来检查语法错误的插件,对于写代码来说非常重要,可以避 免很多低级错误 。
  8. SublimeLinter-jshint 对应的js语法检查(必须有node环境 npm install jshint -g 然后再在sublime下装sublimelinter 再装sublimelinter-jshint)
  9. less 高亮less语法,less2css 编写less,保存时自动编译为css
  10. DocBlockr 注释生成器
  11. 宝玉专栏
  12. sublime在mac下的指南

4 wamp配置

  1. 首先修改端口 因为默认的是80端口,一般都被占用了,然后是修改phpmyadmin之类的默认路径
  2. 错误日志配置 apache的http.conf 每天生成一个日志
    ErrorLog “|bin/rotatelogs.exe -l c:/wamp/logs/apache_error-%Y-%m-%d.log 86400”
    CustomLog “|bin/rotatelogs.exe -l c:/wamp/logs/access-%Y-%m-%d.log 86400” common
  3. wampserver 2.5 添加alias后无法访问的问题:在相应的alias文件添加Require all granted,其中granted是已授权的意思。这条命令是apache2.4新增加的,用以替代allow,deny以及order指令。

5 红杏插件

  1. scp的时候不用输入密码:(没有.ssh目录的时候,先新建这个目录)
  2. linux-如何建立scp安全的信任关系

6 svg

  1. g元素不支持定位 需要定位是要使用transform=”translate(x,y)”
  2. rect元素不支持嵌套 可以用g元素来包裹、组织元素

7 this陷阱

8 屏幕尺寸

webview下
小米3 360572
红米note 360
567
iphone4s 320416
iphone5 320
504
iphone6 375603
iphone6p 414
672
mx4 384519
oppo 320
459

9 移动端开发meta标签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<meta charset="utf-8"/>
<!
<meta name="renderer" content="webkit">
<!--IE=edge告诉IE使用最新的引擎渲染网页 -->
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<!-- Allow web app to be run in full-screen mode. -->
<meta name="apple-mobile-web-app-capable" content="yes">

<!-- Make the app title different than the page title. -->
<meta name="apple-mobile-web-app-title" content="iOS 8 web app">

<!-- Configure the status bar. -->
<meta name="apple-mobile-web-app-status-bar-style" content="black">

<!-- Set the viewport. -->
<meta name="viewport" content="initial-scale=1">

10 TCP/IP协议

在 TCP/IP 中包含一系列用于处理数据通信的协议:
TCP (传输控制协议) - 应用程序之间通信
UDP (用户数据包协议) - 应用程序之间的简单通信
IP (网际协议) - 计算机之间的通信
ICMP (因特网消息控制协议) - 针对错误和状态
DHCP (动态主机配置协议) - 针对动态寻址
TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。
1)网络接口层:
数据链路层是负责接收IP数据包并通过网络发送,或者从网络上接收物理帧,抽出IP数据包,交给IP层。
ARP是正向地址解析协议,通过已知的IP,寻找对应主机的MAC地址。
RARP是反向地址解析协议,通过MAC地址确定IP地址。比如无盘工作站还有DHCP服务。
2)网络层
负责相邻计算机之间的通信。
网络层包括:IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol)
控制报文协议、ARP(Address Resolution Protocol)地址转换协议、RARP(Reverse ARP)反向地址转换协议。Ping命令就是发送ICMP的echo包,通过回送的echo relay进行网络测试。
3)传输层
提供应用程序间的通信。其功能包括:一、格式化信息流;二、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送,即耳熟能详的“三次握手”过程,从而提供可靠的数据传输。
传输层协议主要是:传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram protocol)。
4)应用层
向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。
应用层协议主要包括如下几个:FTP、TELNET、DNS、SMTP、NFS、HTTP。

11 HTTP请求头

http请求由三部分组成,分别是:请求行、消息报头、请求正文
请求头信息对照表;

1
2
3
4
5
6
7
8
9
10
11
GET / HTTP/1.1
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6
Cache-Control:max-age=0 //"no-cache" "no-store"
Connection:keep-alive
Cookie:cna=Kzl1Dm22JU0CASp4SmGBdvPA
Host:s24.cnzz.com
If-Modified-Since:Tue, 08 Sep 2015 08:37:47 GMT
Referer:http://botao900422.blog.51cto.com/4747129/1557599
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36

12 +号运算符

1
2
3
4
5
console.log(+"2");  //结果是2
console.log(1+ +"2"+"2"); //结果是32 +"2" ==>2
console.log(1+"2"+"2"); //结果是122
console.log("A"- "B"+"2"); //NaN
console.log("A"- "B"+2); //NaN

###14 childNodes

1
2
3
4
5
6
7
<div id="box">
<div></div>
<div></div>
<div></div>
</div>
var a=document.getElementById("box");
console.log(a.childNodes.length) //7 IE9+ chrome firefox 因为换行符也会算做文本节点 IE8-为3

nodeType=1为元素节点 nodeType=2为属性节点 nodeType=3为文本节点,IE9+ firefox chrome 会把换行符(空白符)也当作文本节点,文本节点的nodeName为”#text”

15常见css缩写语法

  1. 盒尺寸,比如margin:top right bottom left。如果某个值缺省,原则是left=right,bottom=top,right=top。
  2. border:width style color
  3. background:color image repeat attachment position
  4. font:style variant weight size height family

16 shadowsocks 配置

  1. 在代理服务器上安装服务端
    • 安装pip(如果没有,有的话就不需要安装了) apt-get install python-pip
    • 安装shadowsocks pip install shadowsocks
    • 运行 ssserver -p 8090 -k password -m rc4-md5 -d start
  2. 安装客户端 百度网盘

17 vscode配置

  1. 字体 Monaco 18号
  2. “editor.wrappingColumn”: 110
  3. 扩展
    • Debugger for Chrome
    • Eslint
    • JavaScript (ES6) code snippets
    • Document This (自动jsdoc)
    • Visual Studio Code Settings Sync (同步设置)