# javascript 总结
## 语法
1. 区分大小写
2. 命名规范
1. 首字母必须是 字母 _ $
2. 其他字符可以是 数字 字母 下划线 $
3. 避开系统的关键字
4. 单词和单词连接方式推荐驼峰命名
3. 注释
1. 单行注释 //注释的内容
2. 多行注释 /*注释内容*/
4. 语句
1. 要用;结尾(推荐做法)
2. 如果不写; 那么系统默认以换行作为语句的结尾
## 变量/常量
1. 变量声明 var
2. 常量声明 const
## 数据类型
1. typeof 检测数据类型 a=null;typeof a 可能是object 对于比较老的浏览器是function
2. undefined
3. null
4. Boolean
1. true/false
5. Number
1. 数字(正/负/整/小/0/Infinity/-Infinity)
2. NaN NaN==NaN 返回false
6. String
1. 使用单引号或者双引号来定义
2. 转义字符\ \n \t \r \' \"
3. 字符串可以通过数组下标的方式来调用字符串对应位置的字符
## 运算符
1. 算术运算符: + - * / % ++ -- +(正) -(反)
2. 字符串: +
3. 比较运算符: > < == === != !== >= <=
4. 逻辑运算符: && || !
5. 位运算符: & | ^ XOR << >> <<< >>>
6. 三元运算符: 条件? 语句1:语句2
7. 赋值: = 带操作赋值: += -= *= /= %= |= &= ^= <<= >>= <<<= >>>=
8. 其他运算符: . , typeof delete instanceof void
## 流程控制语句
### 分支
#### if语句
```
1. if(条件){执行.....}
2. if(条件){...}else{...}
3. if(条件){...}else if(条件){}
4. if(条件){...}else if(条件){}else{}
5. if语句可以嵌套多层
```
#### switch语句
```
switch(传入值){
case 值:
执行内容...;
break;
case 值:
....
break;
default:
执行.....
}
```
### 循环
#### for
```
//语句1只执行1次
//执行语句2 当语句2返回true 继续执行
for(语句1;语句2;语句4){
语句3
}
```
#### while
```
while(条件){...} //条件为真 执行
do{...}while() //先执行一次 再判断条件是否为真 为真继续执行
```
#### for...in
```
//遍历数组或者对象
for(var i in obj){
//i表示 obj 的 下标 键名
obj[i] //obj 下标i对应的 值
}
```
## 函数(作用域)
```
function 函数名(){
}
var 变量名 = function(){}
//调用
函数名()
变量名()
(function(形参){})(实参)
(function(形参){}(实参))
函数里边内部有个arguments 表示 实参对象
```
## 对象
1. 对象声明
```
//数组
var arr = [];
var arr = new Array();
//对象
var obj = {};
var obj1 = new Object();
var obj2 = new 自定义构造方法();
var obj = {"name1":"zhangsan",name2:"lisi"}
```
2. 构造方法
```
//构造方法
function Person(n){
this.name = n||'小白';
this.say = function(){
alert(this.name)
}
}
```
## 内置对象
### Boolean
### Date
```
getFullYear()//年
getMonth()//月 0-11 当前月份需要+1
getDate()//日
getDay()//星期 0~6 0星期日
getHours()//时
getMinutes()//分
getSeconds()//秒
getMilliseconds()//毫秒
getTime()//时间戳 毫秒级
toString() //以字符串形式输出
valueOf() //内部存的值
```
### Number
```
toString(进制)
toFixed(n) 显示n位小数
toExponential(n)显示n位.后面的数 指数表示法
toPrecision(n) 显示n位
```
### Math
```
Math.PI //3.1415926535
Math.abs() //取绝对值
Math.ceil() //进一取整
Math.floor() //退一取整
Math.max()//最大值
Math.min()//最小值
Math.pow(x,y)//x的y次幂
Math.random() //0~1的随机数
//m~n随机整数
//Math.floor(Math.random()*(n-m+1))+m//建议使用
//Math.ceil(Math.random()*(n-m+1))+m-1
Math.round() //round 四舍五入
Math.sqrt() //求平方根
```
### String
```
trim() //清空两侧的空白
//查找
charAt() // 获取指定位置上的字符
charCodeAt() //获取对应位置上的字符的ASCII码
indexOf(“abc”) //返回子字符串abc在字符串中第一次出现的位置
lastIndexOf(“abc”) //返回子字符串abc在字符串中最后一次出现的位置
match(regexp) //找到一个或多个正则表达式的匹配
search(regexp) //查找与正则表达式相匹配的子字符串
//替换
replace(表达式,替换的字符串) //替换一个与正则表达式相匹配的子串
//截取
split(正则表达式,数组最大长度) //用于把一个字符串分割成字符串的数组
slice(startindex,endindex) //返回一个子字符串
substring(startindex,endindex) //返回一个子字符串
substr(startindex,length) //返回一个子字符串
//转换
toLowerCase() //将字符串转换为小写
toUpperCase() //将字符串转换为大写
```
### RegExp
```
exec() //返回匹配内容
test() //判断是否匹配
```
### Array
```
//添加/删除
unshift() //从数组头部添加元素
shift() //从数组头部删除一个元素
push() //从尾部添加
pop() //从尾部弹出一个元素
splice() //删除 替换 或 插入数组元素
//截取
concat() //合并 数组 或 元素 为一个新数组
slice() //返回数组中的一部分
//格式化
toString() //以字符串形式输出数组
join() //将数组元素以某个字符连接成字符串
reverse() //颠倒数组中元素顺序
sort() //排列数组中元素顺序
```
### Function (没用)
### Global
```
parseInt() //强制转换成int
parseFloat() //强制换行成float
isNaN() //判断是不是NaN
isFinite() //判断是不是Infinity
eval() //把字符串当做JS语句执行
escape() //编码
unescape() //解码
```
## BOM
### Location 对象 当前文档url地址对象模型
```
//跳转页面 设置 location.href = ""
protocal //协议
hostname //主机域名
port //端口号
pathname //路径加文件名
search //get参数 ?后面的内容
hash //锚点 #后面的
href //完整url地址
assign() //跳转
replace() //替换跳转
reload() //刷新
```
### Navigator 浏览器信息
```
appCodeName //代码名称
appName //浏览器名称
appVersion //浏览器版本号
language //语言
platform //系统
userAgent //用户请求头
```
### screen 浏览器屏幕信息
```
width //屏幕宽度
height //屏幕高度
availWidth - 可用的屏幕宽度
availHeight - 可用的屏幕高度
```
### history 访问网页历史
```
back() //后退 返回上一个 url
forward() //前进 到下一个 url
go(n) //跳转到 第 n 个 url
```
### 其他
```
alert("文本") //警告框
confirm("文本") //确认框
prompt("文本","默认值") //提示框
setInterval()
clearInterval()
setTimeout
clearTimeout()
```
## DOM
```
all[] //提供对文档中所有 HTML 元素的访问。
forms[] //所有form元素
images[]//所有img元素
links[]//所有a元素
//节点获取
getElementById() //通过id获取节点
getElementsByTagName() //通过标签名获取节点
getElementsByName() //通过name属性获取节点
childNodes children
firstChild firstElementChild
lastChild lastElementChild
nextSibling nextElementSibling
previousSibling previousElementSibling
parentNode parentElement
//获取属性
attributes //属性集合
getAttribute("属性名") //获取属性
setAttribute("属性名","属性值") //设置属性
node.removeAttribute("属性名") //删除属性
className
//节点操作
document.createElement() //创建节点
document.createTextNode(); //创建文本节点
parentNode.appendChild() //添加节点
parentNode.insertBefore(newNode,oldNode) //在xx节点前面添加子节点
parentNode.replaceChild(newNode,oldNode) //把xx节点替换上一个新节点
parentNode.removeChild() //删除节点
//便捷操作 获取内容
node.innerHTML //获取标签里边所有内容
node.value //获取表单的值
```
## 事件
```
//鼠标事件
* onclick //单击
dblclick//双击
mousedown//按下
mouseup//抬起
* mouseover //移入
* mouseout//移出
* mousemove//移动
contextmenu//鼠标右键
//键盘事件
onkeydown//按下
onkeyup//按起
onkeypress//在用户敲击按钮时触发
//文档
* onload 加载
* scroll 滚动条
resize //监听浏览器窗口大小改变
//表单
** onsubmit 提交事件
* focus 获取焦点
* blur 失去焦点
* change 内容改变
onselect 在元素中文本被选中后触发。
```
### 事件对象
```
onXXX = function(ent){
//获取事件对象
var e = ent || window.event;//兼容性处理
}
//事件对象的属性
altKey 返回当事件被触发时,"ALT" 是否被按下。
button 返回当事件被触发时,哪个鼠标按钮被点击。
* clientX 返回当事件被触发时,鼠标指针的水平坐标。
* clientY 返回当事件被触发时,鼠标指针的垂直坐标。
* pageX 相对于页面的位置
* pageY 相对于页面的位置
ctrlKey 返回当事件被触发时,"CTRL" 键是否被按下。
metaKey 返回当事件被触发时,"meta" 键是否被按下。
relatedTarget 返回与事件的目标节点相关的节点。
screenX 返回当某个事件被触发时,鼠标指针的水平坐标。
screenY 返回当某个事件被触发时,鼠标指针的垂直坐标。
shiftKey 返回当事件被触发时,"SHIFT" 键是否被按下。
* keyCode 返回字符的ascii码
//取消冒泡
e.cancelBubble = true||e.stopPropagation();
```
## ajax