JavaScript基础语法-dom-bom-js-es6新语法-jQuery-

JavaScript笔记:
alert():浏览器弹出警示框(输出)
console.log():浏览器控制器打印输出信息
prompt():浏览器弹出警示框,用户可以输入(输入,取会的数值为字符串型)
break:退出
prompt输入的是字符串
var 变量名=赋值 :声明变量并赋值
声明多个变量
var 变量名=赋值
变量名=赋值
变量名=赋值
声明汴梁不赋值数值为空
变量由字母,数字,下划线,美元符号组成
变量严格区分大小写大小写不同不为同一个变量
变量不能以数字开头
变量不能是关键字和保留资
变量名必须要有意义
遵循驼峰命名法首字母小写,后面单词大写
js的变量数据类型是只有程序在运行过程中,根据后面的值来确定变量类型
js是动态语言,变量的数据类型可以转换
简单数据类型:
整形:
数字前面加0是八进制
数字前面加0x是十六进制
Number:数字型 默认值:0 (里面包括整数和小数)
iInfinity无穷大
-iInfinity无穷小
NaN:非数字的
isNaN:判断是否是非数字,是数字返回false
不是数字返回true
boolean:布尔型 默认值:false
true当参与逻辑运算时当1使用
false当参与逻辑运算时当1使用
字符串
String:字符串行 默认值:""(必需要有"")
可以是''也可以是""
字符串嵌套:js可以用单引号嵌套双引号
\n:换行符
\\:斜杠\
\':单引号‘
\":双引号"
\t:tab缩进
\b:空格
Undefined:声明了变量a没有給值 默认值Undefined
Undefined和字符串相加结果为两个字符串合并
Undefined和数字相加结果为NaN
Null:声明了变量a的值为空值 默认值:null
Null和字符串相加结果为两个字符串合并
Null和数字相加结果为数字本身
length:检测字符串长度
多字符串之间可以用+号连接后面可以接任何类型
typeof:检测变量值为什么类型
使用方法console.log(typeof 变量名)
数据类型转换:
转换为字符串型
toString()用法:
var 变量名=需要改变类型的变量名.toString();
string()用法:
console.log(String(变量名));
用+号实现:
console.log(变量名+'')
转化为数据型:
parseInt()用法:(只能取整数)
console.log(parseInt(变量名));
parseFloat()用法:(可以取小数)
console.log(parseFloat(变量名));
Number用法:
console.log(Number(变量名));
利用算数运算进行运算:
console.log(变量+数字 )
转化为布尔型
Boolean()用法:
console.log(Boolean(变量))
代表空,否定的值会被转换为false
例如:
0,NaN,null,Undefined
其他值转换为true
标识符:
关键字:
js本身已近使用的字,不能充当变量名,方法名
保留子:
现在还不是关键字,但是未来可能会变成关键字
不能充当变量名,方法名
算数运算符:
+:进行加法运算
-:进行减法运算
*:进行乘法运算
/:进行除法运算
%:进行取余
浮点数在进行算数运算会出现问题
浮点数不能拿来比较是否相等
表达式:
由数字,运算符,变量组成的试子就是表达式
递增递减运算符:
递增:++
递减:--
可以放在变量前面或者后面
递增和递减必须配合变量使用
写在前面先加1在返回数值
写在后面先返回原值后自加11
单独使用没有区别
比较运算符:
>:大于
<:小于
>=:大于等于
<=:小于等于
==:等于(会吧字符串型的数据在转换成数据型)
!=:不等于
=== !==:全等于要求值和数据类型都相同
逻辑运算符:
&&:简称与 and 有一个为假就是假,两个都为真就是真
||:简称或 or 有一个为真结果为真
!:简称非 not 结果取反
逻辑中断:
与中断:
当由多个表达式时左边表达式可以确定结果时,就不再举行运算右边的表达式
如果第一个表达式为真则返回第二个表达式
如果第一个表达式为假则返回第一个表达式
除了0以外其他的数字都为真
或中断
如果第一个表达式为真则返回第一个表达式
如果第一个表达式为假则返回第二个表达式
赋值运算符:
=:赋值
+=,-=:加减一个数后在赋值
*=,/=,%=乘除取余后赋值
优先级:
小括号(())>一元运算(++ -- !)>算数运算(先*/后+-)>关系运算(> < <= >=)>相等运算(== != === !==)>逻辑运算(先&&后||)>赋值运算(=)>逗号运算(,)
流程控制
顺序结果:根据程序从上往下运行
分支流传控制:根据不同的条件执行不同的代码
if:if(条件表达式){
执行语句
}
判断多个条件:ifelse
if(条件表达式){
执行语句
}else{
执行语句
}
多分枝语句if else if:
if(条件表达式){
执行语句
}else if((条件表达式)){
执行语句
}else{
执行语句
}
三元表达式:
三元运算符:?:
语法结构:
条件表达式 ?表达式1 :表达式2
例子:
var num=10;
var result=num >5 ? '是的' :‘不是’
switch(表达式){
cese 选择值:
执行代码;
break;
cese 选择值:
执行代码;
break;
cese 选择值:
执行代码;
break;
default:
执行代码;
break;
}
swich会把表达式和case后的值相对比如果匹配就执行相对于的语句,如果没有匹配的值会直接跳到default里面执行
表达式一般写成变量名
表达式里面的值要和选择值里面的数值要全等(数据类型和值都是一样的)
代码里面没有break不会退出switch执行后面的代码
switch和ifelseif的区别:
固定值使用switch,ifelseif更灵活,适合使用范围判断
switch执行效率更快,ifelseid语句执行较慢
当分支少的时候用switc,分支多时用ifelseif
循环结构:
for循环:
for(初始化变量;条件表达式;操作表达式){
//循环体
}
初始化变量就是用var声明一普通的变量,通常用于作为计算器
条件表达式就是就是决定每一次循环是否执行
操作表达式是每次循环后最后执行的代码,经常用于我们计算器变量的更新
首先先执行初始化变量(只执行一次),然后执行条件表达式,然后执行循环体最后执行操作表达式
for执行不同代码
while循环:
while(条件){
循环体
}
里面应该有操作表达式和计数器
do while循环:
do{
循环体
}
while(条件)
do while先执行在判断
和while循环一样需要操作表达式和计数器
如果是用来记数字或者是和计次数的三个循环基本相同,但是我们更喜欢用for
while和do..while可以做更复杂的判断条件;
S跳出本次循环,下一个循环还会执行
break:退出循环;
变量必须要有意义
变量用名词
函数用动词
将一组数据存储在一个变量名下的优雅方式
创建数组:
利用new创建变量
var 变量名 = new array ();
利用数组字面量创建数组(多用)
var 数组名=[];
数组里面的元素可以是任何类型
数组里面的元素要用逗号分开
访问数组里面的数据:
数组名[索引]
索引是由0开始的
当找不到这个索引是则会输出Undefined:
遍历数组:
就是把数组的元素从头到尾访问一遍
利用for循环来完成
获取数组长度
数组名.length-1,变量值为0
新增数组元素,修改length的长度
数组名.length=数组数量
新增数组元素,修改l索引号
数组名[索引]=增加的数据
如果没有就追加,有就是替换
不要直接给数组名赋值不然赋值会盖掉里面的数值新的数组是由0开始的,依次递增
数组冒泡排序:
冒号排序就是一次比较两个变量,如果顺序错误就交换过来
var arr=[5,8,3,2,9];
for(var i=0;i<=arr.length-1;i++){
for(var j=0;j<=arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
函数就是被封装了一段可以被重复执行调用的代码块。
函数是用分为两步声明函数和调用函数
函数名通常用动词
声明函数:
function 函数名(){
函数体
}
调用函数:
调用函数要加小括号
函数名();
函数的参数:
函数的参数分形参和实参
形参:
形参是用来接收实参的
function 函数名(形参1,形参2){
函数体
}
实参:
function 函数名(形参1,形参2){
函数体
}
函数名(实参1,实参2);
实参和形参的数量相同 则正常进行
如果实参的数量大于形参按顺序执行
如果实参的数量小于形参则没有实参的形参是Undefined 相加为NaN;
尽量将实参和形参的数量匹配
return将函数返回给调用者;
return只能返回一个值,当有两个值则返回后面的值
当需要返回多个值可以使用数组返回
函数没有return则返回Undefined
return不仅可以结束循环还可以结束函数
arguments对象中储存了所有存贮过来的实参
arguments是以伪数组的方式展示的,他可以使用length来查询长度,他的储存方法是和数组一样的通过索引进行储存
但是他无法使用真正数组的一下方法比如pop() plsh()
他可以通过数组的遍历把里面的数值提取出来
在函数体里面直接调用另一个函数就可以直接调用
函数的两种申明方式
1.利用函数关键字自定义函数(命名函数)
function 函数名(){
函数体
}函数名()
2.函数表达式(yimin)
var 变量名=function(){
}变量名()
函数表达式的方法声明函数,用的的变量名不是函数名
函数表达式声明跟声明变量差不多,只不过变量里面的是数值,函数表达式里面是函数
函数表达式也可以进行传递参数
js的作用域就是代码名字在某个范围内起作用的效果
目的是为了提高程序的可靠性更重要的是减少命名冲突
全局作用域:
在script标签里面的就是全局作用域
局部作用域(函数作用域):
在函数内部就是局部作用域,这个代码只能在函数内起作用
变量作用域分为全局变量和局部变量
全局变量:
在全局作用域下的变量,在全局都可使用
局部变量:
在局部作用域下的变量或者在函数内部的变量只有函数内才能使用
在函数内部没有声明就直接赋值的变量,属于全局变量可以直接调用
函数的形参也属于局部变量
从执行效率上来讲
全局变量只有完全关闭浏览器完全关闭才会销毁,比较占内存
局部变量执行完以后就会销毁,相对于全局变量更节省空间
js只有es6的时候才有块级作用域
块级作用域就是{}里面的代码就是块级作用域,花括号外边的代码无法调用花括号里面的代码
作用域链就是内部函数访问外部函数的变量,采用的是链式查找的方式来决定取那个值,就是根据就近原则来选择变量值
js引擎运行js分两步先预解析在进行代码执行
预解析:js引擎会把js里面所有var还有function提升到当前作用域的最前面
代码执行:按照代码书写顺序从上往下执行
与解析分为变量预解析(变量提升)和函数预解析(函数提升)
变量提升就是把所有变量声明搭配当前的作用域最前面,不提升赋值操作,只提升了声明
例如:console.log(mun)
var m=num=10;
相当于执行了:var=num;
console.log(mun)
num=10;
函数表达式声明变量应将调用写在函数后面
利用函数关键字声明变量则没有影响
创建对象的三种方式
方法一利用字面量创建对象:
就是花括号{}里面包含了表达这个具体事物(对象)的属性和方法
创建方法 var 对象名= {};
里面的属性方法用逗号隔开
例如:
var obj={
uname:‘张三’,
age:18,
sex:男,
}
里面的属性或方法采用的是键值对的形式,键:属性名,值:属性值
使用方法后面跟的是一个函数
使用对象:
调用对象属性的两种方法: 对象名.属性名
对象名['属性名']
第二种方法调用属性要加单引号
调用对象的方法: 对象名.方法名()
必须要有后面的括号
方法二:利用new Object()创建函数
var 方法名= new object();
方法名.uname=‘张三’;
方法名. age=18;
方法名.sex=男;
这个方法是利用等号赋值的方法添加对象属性和方法分
每个属性结尾都有;分号结尾
创建时Objecta首字母需要大写
创建方属性和方法前面都需要加方法名
方法三:利用构造函数创建对象
前面的方法一次只能创建一个对象,使用构造函数可以一次创建多个方法
function 构造函数名(){
this.属性名=值
this.方法名= function(){
}
}
调用方法:
new 构造函数名();
调用方法的时候前面要有new 构造函数名()
对象名.方法名()
构造函数名首字母需要大写
属性和方法前面加this
构造函数不需要return就可以返回结果
调用够着函数必须使用new
只要调用的new 构造函数名()都会自己生成一个对象
构造函数泛指某一个大类,而对象指一个具体的事物 ,
变量和属性的相同点:
他们都是用来储存数据的
变量和属性的不同点:
变量需要单独声明并赋值,使用时直接写变量名,单独存在
属性在对象里面,不需要声明,调用的时候使用时
对象名.属性名
函数和方法的相同点:都是实现某些功能做某些事
函数和方法的不同点:
函数时单独声明,并且调用,是单独存在的
方法在对象里面
new的执行过程:
new 构造函数可以在内存里面创建一个空的对象
this 就会指向刚刚创建的空对象
执行构造函数的代码,给这个对象添加属性和方法
返回这个空的对象
for.....in循环:
for (变量 in 对象){
}
输出变量输出的属性名,输出对象名[变量]输出的属性值
js中的对象分三种:自定义对象,内置对象,浏览器对象
内置对象就是js语言自带的对象,提供一些常用的或者基本而必要的功能
mdn,w3c
查阅该方法的作用
查看里面参数的意义和类型
查看返回值的意义和类型
自己动手试试
Math对象:
它不是一个构造函数
常用的属性,不需要new来调用,可以直接使用里面的属性和方法
Math.PI():求圆周率
Math.floor():向下取整,往小取值
Math.ceil():向上取整,往大取值
Math.round():四舍五入就近取整
负数除了.5其他的都正常,只取大的
Math.abs():绝对值
Math.max/Math,min():求最大值最小值
会自动把数字字符串转换为数字
Math.random() :返回一个随机的小数,这个方法里面不跟参数
他只能取到大于等于0小于1不能取到1
我们想要取到两个数之间的随机整数并能取到两个整数的公式:
function grty(min,max){
return Math.floor(Math.random()*(max-min+1))+min;
}
console.log(grty(1,10));
Date():日期对象是一个构造函数,必须使用new来创建日期对象
如果没有参数返回系统当前时间
参数的写法:
数字型:var 变量名=new Date(2019,1,1)
字符型:var 变量名=new Date(’2019-8-9 8:8:8)
数字型用逗号隔开,字符串日期用-隔开,时间用:隔开
数字型返回的1值要比实际输入的大
Date.getFullYear():获得当年
Date.gateMonth()获得当月(从0开始没有12,比正常少一个月,使用时要+1)
Date.getDate():获得当
天日期
Date.getDay():获取星期记(周日0到周六6)
Date.getHours():获得当前小时
Date.getMinutes():获取当前分钟
Date.getSeconds():获取当前秒钟
用函数封装一个可以返回当前时间的时分秒
date对象是基于1370年一月一日起的毫秒数
获得date总的毫秒数(时间戳)
1.通过valueof()获取:
var date =new date();
console.log(date.valueof());
2.通过getTime()获取
var date =new date();
console.log(date.getTime());
3.简单的写法(常用)
var date = +new Date()
cnosole.log(date1)
4.h5新增加的
console.log(Date.now());
毫秒数不会重复
用Array创建数组
var arr=new Array();
(里面一个数代表数组长度,立马输入大于1个时输入的为数值)
检查是否为数组的方法1:
instanceof 运算符 可以检测是否为数组使用方法为
console.log(数组名或者其他变量等 instanceof Array)
实例:
function reverse(arr){
if(arr instanceof Array){
var newArr=[];
for(var i=arr.length-1;i>=0;i--){
newArr[newArr.length]=arr[i];
}
return newArr;
}else{
return '这个参数不是数组格式';
}
}
console.log(reverse([1,2,3]));
console.log(reverse(1,2,3));
方法2: Array.isArray方法
Array.isArray是优先于instanceof
用法:Array.isArray(检测值)
1.数组名,push:从末尾添加一个数组值
使用方法:数组名.push(需要添加的值)
可以添加不止一个
push完毕后会返回数值,返回的是新数组的长度
2.数组名.unshift:在数组的前面添加一个数组值
使用方法:数组名.unshift(需要添加的值)
可以添加不止一个
unshift完毕后会返回数值,返回的是新数组的长度
1数组名.pop() 可以删除数组最后一个数组值
使用方法:数组名.pop()
里面没有参数;
pop完毕后会返回数值,返回的是你删掉的数组值
2数组名.shift() 可以删除第一个数组值
使用方法:数组名.shift()
里面没有参数;
shift完毕后会返回数值,返回的是你删掉的数组值
1.reverse:翻转数组
用法:数组名.reverse()
2.sort:冒号排序
用法: 数组名.sort(funcation(a,b){
return a-b(升序)
或者return b-a(降序)
})
1.indexof:返回数组元素索引
用法:数组名.indexof(数组元素名)
只返回第一个满足条件的索引号
当没有找到元素是则返回-1
从前面开始获取元素
2.lastIndexof:返回数组元素索引
用法:数组名.lastIndexof(数组元素名)
只返回第一个满足条件的索引号
当没有找到元素是则返回-1
从后面开始获取元素
1.toString:将数组转换为字符串
用法:数组名.toString()
2.join:将数组转换为字符串,可以添加分隔符
用法:数组名.join(分隔符)
括号内不填默认为逗号