一个完整的 JavaScript 实现应该由下列三个不同的部分组成:
1.核心(ECMAScript)
2.文档对象模型(DOM)
3.浏览器对象模型(BOM) *js下学习
js可以实现页面交互效果,主要运行在客户端,浏览器解释执行,种差家属Python,PHP的一种专门为网页交互设计的客户端解释性脚本语言,1995年创建。
1995年JS诞生;97年ECMAscript诞生,2009年ECMA5出现,2015年ECMA6出现
onclick 点击事件【onclick="" js行内样式】 src引入外部js文件地址路径 ,js文件从上到下逐渐显示
js内嵌样式:script
js输入输出语句:(主要三个) # 页面输出文字 document.write(‘叽叽呱呱’) 在页面输出叽叽呱呱。【可以识别标签】
1.alert(msg) 浏览器弹出警示框 归属于浏览器 【有堵塞页面执行的作用】
2.prompt(info) 浏览器弹出输入框,用户可以输入 归属于浏览器
3.console.log(msg) 浏览器控制台打印输出信息 归属于浏览器,在控制台可以看见,在审查元素中console显示
变量:变量是一个可以存储单个可变信息的容器
变量的使用分两步(1.声明变量 2.赋值)
1.var是一个js关键字,用来声明变量(variable变量的意思),使用关键字声明后,计算机会自动为变量分配空间,不需要程序员参与。
2.age是程序员定义的变量名,通过变量名访问内存中分配的空间。
3.=用来把右边的值赋予左边的变量名空间中,右边的值为变量值。即程序员保存到变量空间中的值。
4.声明变量并直接给他一个值,叫变量的初始化。#
声明多个变量,在var后面加变量名和变量值,中间用逗号隔开就可以。console.log()括号中的变量用逗号隔开,也可以添加多个变量。
5.一个变量给多个值,以最后一个变量值为准。变量之间用逗号隔开可以声明多个变量。【不建议】
声明变量的特殊情况:
1.只声明不赋值[var sex; console.log(sex)],程序不能识别,会显示undefined(未定义的)。defined 定义。
2.不声明直接赋值使用【console.log(tel)】,系统会报错,不删除会导致后续变量无法无法识别。
3.不声明直接赋值使用【QQ=123; console(QQ)】,可以识别,但不建议使用
变量命名规范:
1.由字母,数字,下划线,美元符号$组成。【空格也不允许】
2.严格区分大小写 var app;和var APP;是两个不同的变量。
3.不能以数字开头。 命名错误会在下方出现波浪线标识。
4.不能是关键字,保留字。如var,for,while,name
5.遵循驼峰命名法,即首单词字母小写,后面的单词首字母大写。(myName 小驼峰命名法【推荐使用】 MyName 大驼峰命名法)
6.变量名必须有意义,即不取中文拼音,尽量取英文。英文命名单词可以在有道,爱词霸翻译网站搜索。
DOM操作是一个使程序和脚本有能力动态的访问和更新文档的内容,结构以及样式的平台和语言中立的接口。
DOM节点分为三大类:元素【标签】节点,属性节点,文本节点
节点之间的关系:文本节点,属性节点是属于元素节点的子节点。
查找DOM节点:
1.通过ID名查找DOM元素 语法:document.getElementByld("id名")
var 变量名=document.getElementByld(‘id名’);
console.log(‘变量名’);
2.通过标签名找DOM元素 语法:document.getElemensByTagName(“标签名”)【classname 通过class名查找元素】
3.修改设置元素的内容 语法:innerHTML=‘内容
’
4.修改添加样式 # 在变量名.innerHTML修改之前添加
语法:1. 变量名.style=‘修改内容’; 2.变量名.style.css属性名【背景,边框之类的】=‘属性值’; 3.变量名.style.cssText=‘修改内容’;【扩展】
5.数组[]:所有数据的集合,[]中可以添加数字,字符
document.querySelectorAll(‘ul>li’)获取ul下所有li,不获取其他ol下li。
document.querySelector(‘ul>li’) 获取ul下第一个li。
document.querySelector(# 或者. )获取id为某某或class名为某某的元素
【变量名.length】获得打印输出的总个数
获取元素class名语法:元素.className
修改元素class名语法:元素.className=‘内容’
数据类型:基本数据类型:数字,字符串,布尔,undefined,null
布尔类型 boolean:返回值:true真 false假 一个=是赋值,==是判断【返回值为布尔类型】,===是全等,不仅判断结果还要判断类型
null==undefined null===undefined false
引用类型:object:array
function
临时变量【temp】:有一个容器类的作用,可以在交换两个变量的值时,做临时储存使用。;
举例: 这样可以把app1的变量值与app2的变量值互相转换。
var temp;【声明一个临时变量为空】
var app1=‘青苹果’;
var app2=‘红苹果’;
temp=app1; (把右边给左边)
app1=app2;
app2=temp;
console.log(app1);
console.log(app2);
js的变量数据类型是只有在程序运行过程中,根据等于号右边的值来确定的。
var nub=10; nub为数字型
nub=‘嘎嘎’ nub变为字符串型
js把数据类型分为两类:简单数据类型【Number,String,Biilean,Undefined,Null】和复杂数据类型【object】
数值类型number【用来表示数字的,任何数字都可以使用数值类型,比如年份,价格等】:
包含有整数,小数,NaN【NaN!=NaN 不等于他本身。NaN与任何值运算,都等于他本身】
字符串要加引号,如果没加引号。js会把它当做变量对待
转义字符单引号' 双引号" \r回车 \n换行
进制,常用的进制有二,八,十,十六进制 八进制前加0,十六进制前加0x;
八进制数字序列范围0~7 十六进制数字序列范围09以及af
var num1=07; 对应十进制的7
var num2=019; 对应十进制的19
var num3=08; 对应十进制的8
var num4=0xa; 推出num4变量值为10
数字型最大值 console.log(number.max_value)
数字型最小值 console.log(number.mix_value)
数字型无穷大 console.log(number.max_value2) 得出infinity【无穷大】
数字型无穷小 console.log(-number.max_value2) 得出-infinity【无穷小】
数字型非数字 console.log(pink-100) 得出nan 非数字
isnan()用来判断一个变量是否为非数字类型,并返回一个值,如果是数字返回false,如果不是数字,返回true。
console.log(isnan(pink)) 返回true
console.log(isnan(123)) 返回false
typeof:检测数据类型,但是type检测数据 语法:typeof(内容) typeof 内容
parselnt【取整】 parselnt (值) 小数点之后,字符串之后不显示,输出NaN
parsefliat【取小数】 parsefloat(值) 显示第一个小数点之后的小数,第二个小数点之后的数和字符串不显示。
isNaN 检测是否是非数字 语法:isnan(检测值) 返回值:非数字true 数字false
字符串转换:string toString【undefined,null不能使用】
运算符是用于执行一个及以上操作数项目运算的符号
包括:算术运算符,辅助运算符,比较运算符,逻辑运算符,条件运算符
Infinity 正无穷 -Infinity负无穷
负无穷减负无穷=NaN
toFixed 保留小数 语法:值.toFixed(保留几位小数) 举例:str.toFixed(2)
如何比较运算符
两个操作数都是数值,数值比较
两个操作数都是字符串,则比较两个字符串对应的字符串编码值
两个操作数有一个是数值,则将另一个数转换为数值,进行比较
&&逻辑与:遇到&&找假,如果有假,则返回第一个假值,如果全为真,则返回最后一个真值
【假值:0,"",NaN,null,undefined,false】
||逻辑或:遇到||,找真,如果有真值,则返回第一个真值,如果全部为假值,则返回最后一个假值
三元表达式:变量名=表达式?表达式1:表达式2
条件语句:
if语句:多用于区间判断
switch语句【多用于固定值判断】:利用我们表达式的值和case后面的选项值相匹配,如果匹配上,就执行case里面的语句,如果没有匹配上,那么就执行default里面的语句
switch(表达式){
case 表达式1:
输出方式
break;
switch(表达式【通常用一个以声明的变量来容纳】){
case 表达式2:
输出方式
break;
default:
输出方式
}
循环语句:条件控制循环 计数控制循环
while(表达式){
语句块;
}
do
{
语句块
}while(表达式)
for(表达式1;表达式2;表达式3){
语句块;
}
先执行表达式1,再判断表达式2,条件成立,执行语句块然后执行表达式3增加变量
break 跳转 可以用在switch和循环中,结束本层循环
contioue 继续,移动,跳过本次循环,继续下一个循环 只能用在循环中
funcition 声明函数,是代码中的模具
var 声明变量
函数声明式
funcition 函数名()
形参:形式函数,声明函数时,定义的参数名
实参:实际参数,调用函数时,传过去的参数值
形参和实参一一对应
匿名函数:function(){}
调用匿名函数:
(function(){})()
变量提升
在js环境中只要出现var或者funcition,先提升变量
全局变量,局部变量
函数返回值return return 变量名 可以返回js中的任意数据类型
函数返回值未定义 return 和没有return 如果函数没有显示使用return语句,或后面没有任何值,那么函数默认返回值是undefined return后语句不会再执行,return语句只适应函数
arguments 类数组,返回所有实参的集合
arguments[i] 获取某一项实参 i是数组的下标,从0开始计算
arguments.length:获取实参长度
arguments[arguments.length-1]获取实参最后一位
函数中没有var,为全局变量,可以在外部使用这个变量;如果var了,即使和函数外的变量名一样,也没有任何关系
markdown文档
客观说法:一切皆对象【面试不能说】
定义对象两种方法:
字面量定义:var obj={属性名:属性值,属性名:属性值}
new关键字定义:var obj=new Object({属性名:属性值,属性名:属性值}); 【new后首字母大写】
获取属性值:obj.属性名 obj[‘属性名’]
添加属性的方法:
obj.属性名=属性值
obj[‘属性名’]=属性值
修改属性
obj.属性值=属性名
obj[‘属性名’]=属性值
Math对象
console.log(Math.PI) π 3.1415926535
console.log(Math.pow(3,2)) 三的二次方 幂
console.log(Math.floor(2.2334)) 向下取整 2
console.log(Math.ceil(2.2342)) 向上取整 3
console.log(Math.round(3.54) 四舍五入 4
console.log(Math.random()) 0~1的随机数
console.log(Math.E) 自然数 Math.log
console.log(Math.max(2,3,7) 获取最大值 7 ()没有内容时,输出-infinity 如果max内部有非数字,先转换成数字;如果转后出现NaN,直接输出NaN
console.log(Math.min(false,null,3) 获取最小值 0 ()没有内容时,返回infinity
Math.floor( (Math.random()(m-n+1))+n) 获取n-m中随机数
Math.floor((Math.random()arr.length) 获取arr数组中随机下标
arr[Math.floor(Math.random()*arr.length)] 获取arr数组中随机某一项
Date 日期,日历 计算机中月份是从零开始计算的,自己设置时间时,注意要比想设置月份减一,如果用字符串包裹,则可以直接设置时间,年月日用逗号,-,/隔开都可以
直接获取当前时间 new Date()
先获取时间,然后:
new.Date().getFullYear() 获取年份
new.Date().getMonth()+1 获取月份
new.Date().getDate() 获取日期
new.Date().getDay() 获取星期 【周日是0,其他正常】
new.Date().getHours() 获取小时
new.Date().getMinutes() 获取分钟
new.Date().getSeconds() 获取秒钟
new.Date().getMilliseconds() 获取毫秒
new.Date().setFullYear() 设置年份 括号里加数值,否则返回NaN
new.Date().setMonth()+1 设置月份
new.Date().setDate() 设置日期
new.Date().setDay() 设置星期 【周日是0,其他正常】
new.Date().setHours() 设置小时
new.Date().setMinutes() 设置分钟
new.Date().setSeconds() 设置秒钟
new.Date().setMilliseconds() 设置毫秒
获取时间戳
new Date()*1
new Date().getTime()
myDate.valueOf()
继承的方法:
valueOf() 返回日期对象的原始值,从1970年1月1日开始计数的毫秒值
display:flex flex:1
[]数组 有序集合 Array数组
maxIndex=变量.length-1 最大下标index=数组长度-1
声明数组方式:
字面量声明:var arr=[1,2,3,4];
new关键字声明:var arr=new Array(1,2,3,4)
1.只有一个参数时,并且这个参数是数值类型,这个参数代表数组长度
2.只有一个参数,这个参数不是数值类型,这个参数代表数值本身
获取数组中某一项 array[下标]
获取数组长度 array.length
修改数组某一项 array[下标]=值
向后添加数组 array[下标]=值
通过长度清空数组 arr.length=0
删除末项 arr.length=数组长度-1
arr.push() 向后添加数组项 返回值:添加后数组的长度,改变原数组
arr.unshift() 向前添加数组项 返回值:添加后数组的长度 改变原数组
arr.pop() 删除数组最后一项 返回值:删除项 改变原数组
arr.shift() 删除数组第一项 返回值:删除项 改变原数组
arr.splice() 万能法:删除【arr.splice(删除起始数下标,删除个数,添加内容。。。)】 返回值:删除项 改变原数组
arr.reverse() 反转数组顺序 返回值:顺序反转后结果 改变原数组
arr.sort() 排序 数组中必须是数字
arr.sort(function(a,b){return a-b}) 升序排列,从小到大
arr.sort(function(a,b){return b-a}) 倒序排列,从大到小
没有参数时,按字符串排序,默认升序
arr.slice(startIndex,endIndex) 截取数组中某一项 第一个参数为开始下标【如果只有第一项,默认从这个下标截取到最后一项,如果参数为负数,代表从后朝前去找】,第二个参数为结束下标,结束项向后推一 【两个参数要满足从小到大,如果没有参数,全部截取(第一个参数默认为0,第二个参数默认为参数长度)】 返回值:截取后的数组项 不改变原数组
arr.concat(arr1) 数组拼接 合并项 返回值:数组拼接后的结果,数组 不改变原数组
arr.indexOf() 数组查找 查找项,开始查找下标 返回值:数组中第一个查找项下标,如果数组中没有这项,返回-1 不改变原数组
lastIndexOf() 从后往前数据查找 返回值:对象下标
arr.join() 数组转化为字符串 返回值:字符串
var arr=[[1,2]3,4] 二维数组
字符串 string
声明方式:字面量:var str=‘’; new关键字:var str=new String();
获取字符串元素:str[下标] 字符串长度:str.length
字符串只要被定义就不能被设置
charAt() 字符串查找
slice() 字符串截取 开始下标,结束下标
substr(a,b) 从a开始,截取b个数 参数下标取值是否能取正
substring() 截取
concat() 合并
toUpperCase() 转大写 toLowerCase() 转小写
str.replace() 替换 第一个参数,改变目标项 第二个参数,改变内容 返回新字符串
str.trim() 字符串去前后空格,中间空格去不掉
str.split() 字符串转数组 用空格会单独分开 ‘ef’分隔符
字符串大小写转化: 转大写:toUpperCase() 转小写:toLowerCase()
Number()转换数字 undefined,‘abc’==>NaN ‘’,null,false,‘0’==>0
null,undefined 不能使用String()字符串转换
Boolean() 转换布尔值 NaN,undefined,‘’,null,0 转换为false
算术运算符:+,-,*,/,%,++,-- 除了+以外,都有隐式转换
赋值运算符 + += -= /= %= 有隐式转换
关系运算符 < > >= <= == === != !== 有隐式转换
逻辑运算符 && || ! 会出现短路情况
三元运算符 A ? B : C
跳转语句 break 终止语句,后续不执行 continue 结束本次循环,进行下一次
函数声明式和表达式区别: 声明式可以前后调用,表达式只能在定义后调用
返回值 return 没有return 函数返回undefined