1.变量 |
|
var num=10; |
|
|
|
var num1,num2,num3; |
|
num1=10; |
|
num2=20; |
|
num3=30; |
|
|
|
var num1=10,num2=20,num3=30; |
|
|
|
注意点: |
|
console.log(a); //报错 |
|
var b; |
|
console.log(b); //undefined |
|
c=10; |
|
console.log(c); //10 会默认为全局变量,正常输出,不推荐这种写法 |
|
|
|
|
|
2.数据类型 |
|
var num=10; //数值类型 |
|
var str='123'; //字符串类型 |
|
var flag=true; //布尔类型 |
|
var obj = {} //对象类型,默认值null |
|
var undefined = undefined; //未定义类型 |
|
|
|
数据类型的转换: |
|
转换成字符串类型: |
|
str.toString() //大部分类型都有toString()方法 |
|
String(str) //undefined,null等特殊值,须要用到String() |
|
转换成数值类型: |
|
parseInt() 123.123abc // 123 |
|
parseFloat() 123.123abc //123.123 |
|
Number() 123.123abc //报错 |
|
转换成布尔类型: |
|
Boolean() |
|
转换为false的五种状况: 0 '' null undefined NaN |
|
其余的值都转换为true: 非0和非空都为true |
|
|
|
隐式转换: |
|
任意类型+ 字符串 会转换为字符串 |
|
任意的类型 - * / 会转换为数值 |
|
|
|
特殊状况: |
|
NaN : 不是一个数字 |
|
isNaN(); 不是人 |
|
|
|
数据类型检测: |
|
typeof str |
|
|
|
3.条件判断 |
|
单向判断 |
|
if(条件知足){ |
|
//执行语句 |
|
} |
|
|
|
|
|
双向判断 |
|
if(条件知足){ |
|
//执行语句 |
|
}else{ |
|
//条件不知足执行 |
|
} |
|
|
|
多向判断 |
|
if(条件1知足){ |
|
//执行语句1 |
|
}else if(条件2知足){ |
|
//执行语句2 |
|
}else if(条件3知足){ |
|
//执行语句3 |
|
}else{ |
|
//以上都不知足,执行这里 |
|
} |
|
|
|
|
|
精准判断 |
|
switch(条件){ |
|
case 条件1: |
|
语句1; |
|
break; |
|
case 条件2: |
|
语句2; |
|
break; |
|
default: |
|
最后的语句; |
|
break; |
|
} |
|
|
|
三元运算符 |
|
条件 ? 条件知足返回 : 条件不知足返回 |
|
|
|
总结: |
|
if和switch的区别? |
|
if适合用于肯定范围的判断 |
|
switch适合用于肯定的具体值判断 |
|
2.switch的注意点 |
|
switch的条件比较是全等(===) |
|
break能够省略,可是会穿透执行. |
|
|
|
4.循环 |
|
循环都必须有三个条件: 开始条件,条件范围,条件增量 |
|
for循环 |
|
var sum=0; |
|
for(var i=1; i<=100; i++){ |
|
sum+=i; |
|
} |
|
|
|
while循环 |
|
var sum = 0; |
|
var i=1; |
|
while(i<=100){ |
|
sum+=i; |
|
i++; |
|
} |
|
|
|
|
|
do-while循环 |
|
var sum =0; |
|
var i=1; |
|
do{ |
|
sum+=i; |
|
i++; |
|
}while(i<=100) |
|
|
|
|
|
总结: |
|
1.三种循环之间的区别? |
|
for适用于循环次数肯定的状况,while和do-while适用于循环次数未知的状况 |
|
while是先判断,再执行, do-while是先执行一次,再判断 |
|
|
|
2.continue 和 break |
|
continue 跳过当前循环 |
|
break 跳出整个循环 |
|
|
|
5.数组 |
|
var arr=[]; 数组的基本语法 |
|
var arr[1,2,3,4,5]; 数组能够存多个值,建议存同类型的值,可是能够存任意类型的值. |
|
arr.length 数组的长度 |
|
|
|
arr[0] 表示数组中的第一个元素 |
|
arr[1] 表示数组中的第二个元素 |
|
|
|
arr[0]=10; 表示将数组中的第一个元素修改或者赋值为0 |
|
|
|
动态增长数组 arr[arr.length] |
|
|
|
|
|
6.函数 |
|
函数的做用: 封装功能,能够复用. |
|
函数的语法: 定义 + 调用 |
|
函数的定义: |
|
function 函数名(参数){ |
|
//执行语句 |
|
|
|
return 结果; |
|
} |
|
函数的调用: |
|
函数名(值); //能够将函数的返回值存到变量中使用 |
|
|
|
形参: 函数定义的时候的参数,本质上是一个局部变量 |
|
实参: 函数调用的时候的参数,须要传入一个具体的值. |
|
注意; 形参和实参建议一一对应 |
|
|
|
内置实参对象: arguments 使用中括号数组的方式获取实参 |
|
|
|
函数的其余写法: |
|
匿名函数: function(){} |
|
函数表达式: var fn=function(){} fn(); |
|
自调用函数: (function(){})() |
|
|
|
|
|
7.对象 |
|
对象: 就是将现实事物抽象为功能代码. 将现实世界的东西,用对象的语法格式来表示. |
|
对象的语法: 对象中有属性和方法 |
|
对象的三种写法: |
|
1.字面量写法 |
|
var zs={ |
|
name:'张三', |
|
age:18, |
|
sayHi:function(){ |
|
console.log("你好"); |
|
} |
|
|
|
} |
|
zs.name |
|
zs.age |
|
zs.sayHi() |
|
|
|
2.new Object()写法 |
|
var zs = new Object(); |
|
zs.name='张三'; |
|
zs.age=18; |
|
zs.sayHi=function(){} |
|
|
|
3.构造函数写法 |
|
function Person(name,age){ |
|
this.name= name; |
|
this.age=age; |
|
this.sayHi=function(){} |
|
} |
|
var zs = new Person('张三',18); |
|
|
|
对象的遍历: for-in |
|
for(var key in Obj){ |
|
console.log(key+'--'+Obj[key]); |
|
} |
|
|
|
|
|
|
|
8.内置对象 |
|
Math对象 : 数学对象 Math.random() Math.floor() Math.ceil() Math.max() Math.min() |
|
任意区间随机数公式:Math.floor(Math.random() * (max - min + 1) + min); |
|
|
|
Date()时间对象: |
|
|
|
var date = new Date(); //获取当前时间 |
|
var date = new Date('2018-8-8 12:12:12'); //获取当前时间 |
|
var date = new Date('2018/8/8'); //获取当前时间 |
|
var date = new Date(2018,7,6); //获取时间,月份会大1 ,7 表示8月份 |
|
|
|
1.先转换成毫秒,而后再转换成年月日,时分秒 |
|
date.getTime() |
|
date.Valueof() |
|
date.now() |
|
2.经过对象的内置方法,直接获取年月日,时分秒 |
|
date.getFullYear(); //年 |
|
date.getMonth(); //月 0 一月份 1 二月份 |
|
date.getDate(); //日 |
|
date.getDay(); //星期几, 0 周日 1周一 6周六 |
|
|
|
date.getHours(); //小时 |
|
date.getMinutes(); //分钟 |
|
date.getSeconds(); //秒数 |
|
|
|
3.会计算时间差. |
|
1.毫秒相减 ,除以1000,变成秒数差 |
|
2.计算天,时,分,秒 |
|
d = parseInt(总秒数/ 60/60 /24); // 计算天数 |
|
h = parseInt(总秒数/ 60/60 %24) // 计算小时 |
|
m = parseInt(总秒数 /60 %60 ); // 计算分数 |
|
s = parseInt(总秒数%60); // 计算当前秒数 |
|
3.判断是否个位数,而后补0 |
|
h = h<10? '0'+h : h; |
|
|
|
字符串对象 |
|
1.indexOf(要查找的字符,开始位置) 开始位置不写默认从0开始,找不到返回-1 ----查找字符 |
|
2.charAt(字符位置) 给一个位置,返回该位置的字符 ----获取字符 |
|
3.subStr(开始位置,截取个数) 返回截取的字符串结果 ----截取字符 |
|
4.replace(要替换的字符,替换的新字符) ----替换字符 |
|
5.join(链接符) 将数组经过链接符链接,返回字符串 ----链接字符 |
|
6.split(链接符) 将字符根据链接符分割成多个值的数组,返回数组 ----分割字符 |
|
7.toUpperCase() 将字符串转换为大写 ----转换成大写 |
|
8.toLowerCase() 将字符串转换为小写 ----转换成小写 |
|
|
|
数组对象: |
|
1.push() 后面添加元素 |
|
2.pop() 后面删除元素 |
|
|
|
3.unshift() 前面添加元素 |
|
4.shift() 前面删除元素 |
|
|
|
5.reverse() 翻转数组 |
|
6.sort() 排序数组 |
|
|
|
arr.sort(function(a,b){ |
|
return a-b; //升序 |
|
}) |
|
|
|
arr.sort(function(a,b){ |
|
return b-a; //降序 |
|
}); |
|
|
|
7.concat() 合并数组 |
|
var arr3 = arr1.concat(arr2); |
|
|
|
8.splice 删除/修改/添加数组 |
|
arr.splice(开始位置); //从开始位置删除到最后 |
|
arr.splice(开始位置,删除个数); //从开始位置删除几个 |
|
|
|
//新增内容 |
|
arr.splice(开始位置,0,新增元素); |
|
arr.splice(1,0,'a','b'); //在索引1元素以前插入a和b |
|
|
|
//替换内容 |
|
arr.splice(开始位置,删除个数,新增元素); |
|
arr.splice(1,1,'d'); //在索引为1开始删除一个元素,替换为 |
|
|
|
|
|
9.indexOf() 查找数组 |
|
|
|
查找数组中的元素位置 |
|
arr.indexOf(元素); //返回元素的索引位置,若是没有返回-1 |
|
arr.indexOf(元素,开始位置); //从开始位置继续向后找. |
|
arr.lastIndexOf(元素) //返回元素索引位置,若是没有返回-1,从后往前找 |
|
|
|
10.tostring() 转换为字符串 |
|
|
|
数组转换为字符串 |
|
arr.toString(); 将数组中的每一个元素用逗号连接成字符串 |
|
|
|
11.join() 数组拼接分隔符 |
|
arr.join(); //默认以逗号链接数组,拼接成字符串 |
|
arr.join(分隔符); //以分隔符链接数组元素,拼接成字符串 |
|
|
|
|
|
9.其余 |
|
1.变量的命名规范 |
|
1.字母,数字,下划线,$等组合, |
|
2.数字不能开头 |
|
3.不能是关键字 |
|
4.不能是中文 |
|
5.建议使用驼峰命名 |
|
2.输出打印 |
|
alert() |
|
console.log() |
|
prompt(); |
|
|
|
3.转义字符 |
|
\n 换行 |
|
\t tab制表符 |
|
|
|
|
|
4.预解析 |
|
变量声明和函数声明提早 |
|
|
|
5.做用域和做用域链 |
|
做用域:变量的做用范围 |
|
做用域链: 人外有人,天外有天 |
|
|
|
6.局部变量和全局变量 |
|
全局变量有两种: |
|
1.在括号外面直接写的变量 |
|
2.在函数内部,未使用var声明但直接赋值的变量 |
|
|
|
局部变量: |
|
1.形参就是局部变量 |
|
2.函数内部的变量就是局部变量 |
|
|
|
注意:js中没有块级做用域 |
|
{ |
|
var a=1; |
|
} |
|
|
|
|
|
7.this和new的理解 |
|
this的指向问题: |
|
1.函数在定义this的时候是不肯定的,只有在调用的时候才能够肯定 |
|
2.通常函数直接执行,内部this指向全局window |
|
3.this的指向,谁调用指向谁 |
|
4.构造函数中的this 对象的实例 |
|
new在执行时会作四件事情 |
|
1.new会在内存中建立一个新的空对象 |
|
2.new会让this指向这个新的对象 |
|
3.执行构造函数里面的代码,目的是给这个新对象加属性和方法 |
|
4.new会返回这个新对象,因此构造函数里面不须要return |
|
|
|
8.运算符和优先级 |
|
1.() |
|
2.++ -- ! |
|
3.先* / % 后+ - |
|
4.< > <= >= == != === !== |
|
5.先&& 后|| |
|
6.赋值运算符 |
|
注意: 等于和不等于 == === != !== |
|
++a 和 a++ |
|
&& 而且 |
|
|| 或者 |
|
! 取反 |