前端-JavaScript
js使用方式
在script标签中使用
<!--
1. 可以在head 和 body嵌入script
2. 执行顺序从上到下
3. 建议放在head
-->
<script type="text/javascript">
//在head中使用JavaScript
console.log("head hello")
</script>
在script标签中引入外部js文件
1.创建js目录,编写js文件
2.引入js文件
<script type="text/javascript" src="./JS/test.js"></script>
查看js错误信息
- 浏览器 F12
js变量
JavaScript是弱类型
定义变量时,前面写上var,如 var num = 10;
不写也行 如 num = 10;
并且 变量的类型是可以随时变化的,如num = 10 此时它是number类型,后面在使用 num = “hello”,那么它现在是String类型
js数据类型
-
数值类型:number
-
字符串类型:string [可以双引号括起来,也可以单引号括起来] “jack”、‘abc’、“a”、“”
-
对象类型:object
-
布尔类型:boolean
-
函数类型:function
js特殊值
- undefined:变量未赋初始值时,默认undefined
- null:空值
- NaN:Not a Number非数值
js运算符
算术运算符
- 算术运算符用于执行变量与/或值之间的算术运算
- +、-、*、/、%、++、–
赋值运算符
- 赋值运算符用于给JavaScript变量赋值。
- =、+=、-=、*=、/=、%=
关系运算符
- 关系(比较)运算符在逻辑语句中使用,以测定变量或值是否相等。
- ==、===(全等<值和类型>)、!=、>、<、>=、<=
逻辑运算符
- 逻辑运算符用于测定变量或值之间的逻辑。
- &&、||、!
-
在 JavaScript语言中,所有的变量,都可以做为一个boolean类型的变量去使用
-
0、null、undefined、“”(空串)、 NaN 都认为是false
-
&&运算,有两种情况
(1)当表达式全为真的时候。返回最后一个表达式的值。
(2)当表达式中,有一个为假的时候。返回第一个为假的表达式的值 -
|| 运算,有两种情况
(1)当表达式全为假时,返回最后一个表达式的值
(2)只要有一个表达式为真。就会返回第一个为真的表达式的值 -
&&运算和|运算有短路现象
短路现象:当这个&&或||运算有确定结果后,后面的表达式不再执行
条件运算符
判断表达式 ? 结果为真 : 结果为假;
数组的定义
- var cars1 = [“参数1”,“参数2”,“参数3”];
- var cars2 = [ ]; //空数组/添加元素
- var cars3 = new Array(“参数1”,“参数2”,“参数3”);
- var cars4 = new Array(); //空数组
- 越界访问返回undefined
- 跨组添加,中间元素为undefined
数组遍历
for (i = 0; i < cars.length; i++){
console.log(cars[i]);
}
函数定义方式
方式1: function关键字来定义函数
//定义没有返回值函数
function f1() {
...
}
// 定义有形参的函数
// 这里的形参,不需要指定类型
function f2(参数1,参数2...) {
...
}
// 定义有形参和返回值的函数,不需要指定返回类型,返回类型由返回的数据来决定
function f3(n1,n2) {
...
return ;
}
方式2:将函数赋给变量
var f1 = function() {
...
}
js函数注意事项
- js中函数的重载会覆盖掉上一次的定义
- 函数的
arguments隐形参数
(作用域在function函数内)
(1)隐形参数:在 function函数中不需要定义,可以直接用来获取所有参数的变量
(2)隐形参数特别像java 的可变参数一样。public void fun( int … args )
(3) js 中的隐形参数跟java的可变参数一样。操作类似数组
function f2() {
console.log("arguments=" , arguments);
}
f2(100,"字符串",1.1,null);
(1)如果我们的函数有形参,在传入实参的时候,仍然按照顺序匹配
(2)如果有匹配上,就赋给他,如果没有匹配上,也无所谓
(3)仍然会把所有的实参,赋给arguments
function f3(name) {
console.log(name);
console.log("arguments=" , arguments);
}
f3(100,200,300);
js中自定义对象
自定义对象方式1:Object形式
1.对象的定义
var对象名=new Object(); //对象实例(空对象)
对象名,属性名=值; //定义一个属性
对象名.函数名= function() //定义一个函数
2.对象的访问
对象名.属性
对象名,函数名();
<script type="text/javascript">
//person是一个空对象,没有自定义的函数和属性
var person = Object();
person.name = "小李";
person.age = 30;
person.say = function (){
console.log("hello" + this.name + this.job); //这里也会出现变量提升
}
//调用
//访问属性
console.log(person.name);
//访问方法
person.say();
//小细节: 如果没有定义属性,直接使用,就会出现变量提升,显示undefined
console.log(person.address);
</script>
自定义对象方式2:{}形式
1.对象的定义
var对象名 = {
属性名:值, //定义属性
属性名:值, //定义属性,注意有,号
函数名: function(){} //定义函数
};
2.对象访问
对象名.属性
对象名.函数名();
<script type="text/javascript">
var person = {
name: "小李",
age: 30,
hi: function () {
console.log("name: " + this.name + " " + "age: " + this.age);
},
sum: function (n1, n2) {
return n1 + n2;
}
}
</script>
JavaScript能致变HTML内容,能改变HTML属性,能改变HTML样式(CSS),能完成页面的数据验证
js特点
1.JavaScript是一种解释型的脚本语言,C、C++等语言先编译后执行,而JavaScript是在程序的运行过程中逐行进行解
2.JavaScript是一种基于对象的脚本语言,可以创建对象,也能使用现有的对象(有对象)。
3.JavaScript是弱类型的,对变量的数据类型不做严格的要求,变量的数据类型在运行过程可以变化。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--
1.js代码可以写在script标签中
2.type="text/javascript”表示这个脚本(script)类型是javascript
3.type="text/javascript”可以不写,但是建议写上
4.js语句可以不写;
5.js可以不写; 建议写上
-->
<script type="text/javascript">
//弱类型
var age = "hello world";
//alert使用弹框输出
//输出 console.log 调试输出
console.log("age=" + age);
console.log(typeof age);
//typeof 输出变量类型
//alert(typeof name);
age = 10;
console.log("age=" + age);
console.log(typeof age)
//跟Java一样,对任何类型与字符串拼接,都会变为String类型
console.log("age=" + age + "111");
console.log(typeof (age + "111"))
</script>
</head>
<body>
</body>
</html>
js使用方式
两种使用js文件的方式,只能选择一个
在script标签中使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--
1. 可以在head 和 body嵌入script
2. 执行顺序从上到下
3. 建议放在head
-->
<script type="text/javascript">
//在head中使用JavaScript
console.log("head hello")
</script>
</head>
<body>
<script type="text/javascript">
//在body中使用JavaScript
console.log("body world")
</script>
</body>
</html>
在script标签中引入外部js文件
创建JS目录,编写js文件
console.log("hello world")
引入js文件
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="./JS/test.js"></script>
</head>
<body>
</body>
</html>
查看js错误信息
js变量
JavaScript是弱类型
定义变量时,前面写上var,如 var num = 10;
不写也行 如 num = 10;
并且 变量的类型是可以随时变化的,如num = 10 此时它是number类型,后面在使用 num = “hello”,那么它现在是String类型
js数据类型
js特殊值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//1.typeof()是JavaScript 语言提供的一个函数
//2.返回变量的数据类型
//3个特殊值undefined没有赋值就使用null,NaN当不能识别类型
var num;
console.log(typeof num); //特殊值undefined
var address = null;
console.log(typeof address); //null
console.log(10 * "abc"); //NaN = not a Number
</script>
</head>
<body>
</body>
</html>
js-String类型注意事项
js运算符
算术运算符
赋值运算符
关系运算符
逻辑运算符
&&
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
var n1 = 1;
var n2 = 5;
var res1 = n1++ && n2++; //&& 结果为真,返回最后一个表达式的值
console.log("n1=" + n1 + "," + "n2="+n2);
var res2 = "123" && NaN; //&& 结果为假,返回第一个为假的值
console.log(res2);
</script>
</head>
<body>
</body>
</html>
||
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
var n1 = 1;
var n2 = 5;
var res1 = n1++ || n2++; // || 结果为真,返回第一个为真表达式的值
console.log("n1=" + n1 + "," + "n2="+n2);
var res2 = null || NaN; // || 结果为假,返回最后一个为假的值
console.log(res2);
</script>
</head>
<body>
</body>
</html>
条件运算符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
var n1 = 90;
var res3 = n1 > 100 ? "Hello" : "World";
console.log(res3);
var res5 = n1 < 100 ? n1 + 100 : "World";
console.log(res5);
</script>
</head>
<body>
</body>
</html>
数组
数组的定义
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
//"AUal", “BW" , "volvo";
// 数组定义方式1
var cars1 = ["Audi","BMW","Volvo"];
console.log( "cars1=" + cars1);
console.log(cars1[1]);//表示访问 cars1 数组的第2个元素,1表示下标/索引,从0开始编号
//数组定义方式2
var cars2 = [];//空数组/添加元素
cars2[0] ="奥迪";
cars2[1] ="宝马";
cars2[2] ="奔驰";
console.log( "cars=" + cars2)
console.log(cars2[2]);
console.log(cars2[10]);//undefined
///数组定义方式3
var cars3 = new Array( "Audi","BMW","Volvo");
console.log("cars3=" + cars3);
console.log( "cars3[0]=" +cars3[0]);//Audi
//数组定义方式4
var cars4 = new Array();//空数组console.log(typeof cars4);
cars4[0] ="法拉利";
cars4[1] ="保时捷";
cars4[2] = "yy"; //扩容
cars4[0] = "zz";//替换
cars4[8] = "红旗";//扩容,如果是跳过了下标给赋值,那么中间没有赋值的元素为undefined
console.log(cars4[3]);
console.log( "cars4= " +cars4 );
</script>
</head>
<body>
</body>
</html>
数组遍历
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
var cars = [ "Audi","BMW","Volvo",100,1.1,true];
for (i = 0; i < cars.length; i++){
console.log(cars[i]);
}
</script>
</head>
<body>
</body>
</html>
js函数
函数基本使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
//定义一个简单的函数
//如果不调用函数,那么该函数时不会执行
//在js中如果要执行函数,有两种方式1.主动调用hi(); 2.通过事件去触发该函数
function hi() {
alert("hello world");
}
</script>
</head>
<body>
<!--这里表示给button绑定了onclick事件-->
<!--当用户点击了该button,就会触发hi()函数-->
<button onclick="hi()">点击按钮</button>
</body>
</html>
函数定义方式
方式1: function关键字来定义函数
定义没有返回值函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
//定义没有返回值函数
function f1() {
alert("f1()被调用~")
}
f1();
// 定义有形参的函数
// 这里的形参,不需要指定类型,name的数据类型是由实参决定
function f2(name) {
alert("hi" + name);
}
f2(888);
// 定义有形参和返回值的函数,不需要指定返回类型,返回类型由返回的数据来决定
function f3(n1,n2) {
return n1 + n2;
}
alert("f3(10,20)=" + f3(10,20));
</script>
</head>
<body>
</body>
</html>
方式2:将函数赋给变量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
var f1 = function (){
console.log("hello world");
}
f1();
var f3 = f1; //这样可以赋值,调用f3也相当于调用上面的函数
f3();
var f2 = function (n1){
console.log(n1);
}
f2(200);
var f4 = function (n1,n2){
return n1 + n2;
}
console.log(f4("你好","世界"));
</script>
</head>
<body>
</body>
</html>
js函数注意事项
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
//1. JS中函数的重载会覆盖掉上一次的定义
//2.当你调用f1()时候其实调用的是f1(name)
//3.调用于1(name)如果你没有传入实参,那么这个name就是undefined
function f1() {
console.log("hello world");
}
function f1(name){
console.log("OK" +","+ name);
}
f1();
//2.函数的arguments 隐形参数(作用域在function函数内)
//(1) 隐形参数:在function函数中不需要定义,可以直接用来获取所有参数的变量。
//(2) 隐形参数特别像java 的可变参数一样。public void fun( int ... args )
//(3) js中的隐形参数跟java 的可变参数一样。操作类似数组
function f2() {
console.log("arguments=" , arguments);
}
f2(100,"字符串",1.1,null);
//3 (1)如果我们的函数有形参,在传入实参的时候,仍然按照顺序匹配
// (2)如果有匹配上,就赋给他,如果没有匹配上,也无所谓
// (3)仍然会把所有的实参,赋给arguments
function f3(name) {
console.log(name);
console.log("arguments=" , arguments);
}
f3(100,200,300);
</script>
</head>
<body>
</body>
</html>
js中自定义对象
自定义对象方式1:Object形式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
//person是一个空对象,没有自定义的函数和属性
var person = Object();
//定义一个name属性
person.name = "小李";
//定义一个age属性
person.age = 30;
//定义一个方法
person.say = function (){
console.log("hello" + this.name + this.job); //这里也会出现变量提升
}
//调用
//访问属性
console.log(person.name);
//访问方法
person.say();
//小细节: 如果没有定义属性,直接使用,就会出现变量提升,显示undefined
console.log(person.address);
</script>
</head>
<body>
</body>
</html>
自定义对象方式2:{}形式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
var person = {
name: "小李",
age: 30,
hi: function () {
console.log("name: " + this.name + " " + "age: " + this.age);
},
sum: function (n1, n2) {
return n1 + n2;
}
}
console.log(person.name);
console.log(person.age);
person.hi();
console.log(person.sum(100, 200));
</script>
</head>
<body>
</body>
</html>