1、JavaScript概述
1、一门客户端脚本语言,运行再客户端浏览器中,每个浏览器都有JavaScript的解析引擎,不需要编译,直接就可以被浏览器执行了
2、可以用来增强用户和html页面的交互过程,可以控制html元素,让页面有一些动态的效果,增强用户体验
3、js源码不需要编译,浏览器就可以直接解释运行
4、js是弱类型语言,js变量声明不需要指明类型
5、ECMAScript:构成了JS核心的语法基础
BOM:Browser Object Model 浏览器对象模型,用来操作浏览器上的对象
DOM:Document Object Model 文档对象模型,用来操作页面中的元素
2、JavaScript基础语法
HTML引入JS:
JS的引入:
内部:定义script标签,标签体内就是js代码(推荐插在body尾部)
外部:<script src="js/文件名.js"></script>
1、script标签不能闭合
2、如果script标签使用src属性,那么浏览器将不会解析此标签体的js代码
JS三种输出数据方式:
浏览器弹框输出字符:
<script>
alert('浏览器弹框输出字符');
</script>
输出html内容到页面:
<script>
document.write('输出html内容到页面');
</script>
输出到浏览器控制台:
<script>
console.log('输出到浏览器控制台');
</script>
JS变量声明:
1、java是强类型语言,注重变量的定义,所以在定义变量时都需要指定数据类型
2、js时弱类型语言,不注重变量的定义,所以定义变量时不需要指定数据类型
let 变量名 = 值;
var 变量名 = 值;
const 常量名 = 值;
3、ECMAScript6之前定义变量使用var,但是会有很多坑,所以ECMAScript6之后开始推出了let声明变量,const声明常量
4、在js中,未赋值的变量,也是可以使用的,但是这个值时undefined,未定义的变量
JS数据类型:
js和java一样,数据类型分为基本数据类型(原始数据类型)和引用数据类型
属性 描述
number 数字类型
string 字符串类型
boolean true/false
object 对象(function,null)
undefined 未定义
typeof判断数据类型
JS运算符:
JavaScript中的运算符和大多数编程语言中的运算符都接近,只有个别运算符因其活活性而带来了些许不同
===:全等于
问:==和===之间的区别?
答:1、==只比较内容是否相同,根本不比较数据类型
2、===,在比较之前,先判断数据类型,如果类型不一样,则直接返回false
1、数值在与字符串加法运算时,结果都是字符串
2、做除法时,java中两个整数相除得到的结果还是整数,而js中是有小数点的
3、如果数值与boolean类型的数据,进行运算时,会将boolean数据转换成数值(true转为1,false转为0)
JS流程控制语句:
js与java一样,也有三个流程控制语句:顺序结构,选择结构,循环结构
if结构:
js的条件语句和java语法基本一样,但对数据类型的真假有些许区别
boolean true为真,false为假
number 非0为true
string 除了空字符串(“”),其他都是true
null&undefied 都是false
对象 所有对象都为true
总结:无意义的数据都为flase,反之都为true
switch结构:
1、在java中,switch语句可以接受的数据类型:byte,int,short,char,枚举(1.5),String(1.7)
2、switch(变量):
case 值:
3、在JS中,switch语句可以接受任意的原始数据类型
for循环:
1、普通for循环:
for(let 初始化语句;条件表达式;条件控制语句){循环体;}
2、增强for循环:
for(let 变量名 of 对象){需要执行的代码;}
3、索引for循环:
for(let 变量 in 对象){需要执行的代码}
问:forof与forin之间的区别
答:1、forin可以遍历对象,forof不能遍历对象
2、forin遍历出数组的索引,对象中的属性名key,forof遍历出数组的元素
while循环和dowhile循环:用法和java一样
forin:遍历出数组的索引
遍历出对象的属性名key
forof:遍历数组中的元素
JS函数:
js函数时执行特定功能的代码块,也可以称为js方法,与java 中的方法的功能是一样的
function 函数名 (参数列表){
函数体;
[return 返回值;]
}
注意事项:
1、方法定义时,形参的类型不用写,返回值类型可写可不写
2、如果定义名称相同的方法,会被覆盖,js中没有方法的重载的概念
3、在JS中,方法的调用只与方法的名称有关,和参数列表无关
4、在方法声明中有一一个隐藏的内置对象(数组),arguments,封装所有的实际参数
5、JS函数中也可以有匿名函数
匿名函数经常会跟事件进行结合着使用
function(参数列表){
函数体;
[return 返回值;]
}
3、JS常用内置对象
String对象:
三种方式代表string对象:单引号,双引号,反引号
常用方法:
substring(x,y); 截取从x索引到y索引之间的字符,包含x不包含y
toLowerCase(); 把字符转换为小写
toUpperCase(); 把字符转换为大写
replace(); 替换与正则表达式匹配的子串
charAt(); 返回指定位置的字符
trim();移除字符串首尾空白
split(x); 把字符串分割为子字符串数组,以x字符分割
Array对象:
let 数组名 = [元素1,元素2,元素3 。。。] ;
let 数组名 = new Array(元素1,元素2,元素3 。。。);
常用方法:
concat() 连接两个或更多的数组,并返回结果
push() 向数组的末尾添加一个或更多元素,并返回新的长度
join(参数) 将数组中的元素按照指定的分隔符拼接为字符串
1、在JS中,数组元素的类型可变的
2、在JS中,数组长度可变的
Math对象:
Math对象不用创建,直接使用:Math.方法名( );
常用方法:
round(x):把数四舍五入为最接近的整数
floor(x):向下取整
ceil(x):向上取整
random():随机数,返回0~1之间的随机数,包含0不包含1
Math.PI :圆周率=====》3.141592653589793
Date对象:
var date = new Date();
常用方法:
toLocaleString():返回当前date对象对应的时间本地字符串格式
getTime();返回当前时间到1970年1月1日零点的毫秒值差
getFullyear:获取年
getMonth:获取月
getDate:获取日
getHours:获取时
getMinutes:获取分
getSeconds:获取秒
常用全局函数:
字符串与number之间的转换
parseint():将字符串解析成一个整数
parseFloat():将字符串解析成一个浮点数
isNaN():判断是否是一个NaN类型的数据(非数字)
isNaN六亲不认,连自己都不认
如果要判断是否是一个NaN类型的数据,使用isNaN();
字符编码:
encodeURI():把字符串编码为URI
decodeURI():解码某个编码的URI
普通字符串解析js代码:
eval():计算JavaScript字符串,并把它作为脚本代码来执行
let jscode = "alert(123)";
eval(jscode);