1 js简介
- 什么是js
- js是JavaScript的缩写,是一门唯一的用来控制网页内容的脚本语言;
- 是web标准中的行为标准-用来控制网页内容的变化
- .js写在什么位置
- 内联 - 将js代码写在标签的事件相关属性中,例如:onclick属性
- 内部 - 将js代码写在script标签中(既可以放在head标签中也可以放在body标签)
- 外部 - 将js代码写在js文件中, 然后通过script标签导入
- js能做什么事情
- 修改标签内容
- 修改标签属性
- 修改标签样式
- 添加内容
- 怎么写js代码?
- js语法
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<!--1.内联js-->
<button onclick="alert('内联js')">按钮</button>
<!--2.内部js-->
<!--<script type="text/javascript">
//弹出警告框
alert('内部js')
</script>-->
<!--3.外部js-->
<!--<script type="text/javascript" src="js/index.js"></script>-->
<!--修改标签内容-->
<p id="p1">我是段落</p>
<button onclick="document.getElementById('p1').innerText = 'hello js'">修改内容</button>
<br /><br />
<!--修改标签属性-->
<img src="img/luffy.jpg" id="img1"/>
<button onclick="document.getElementById('img1').src = 'img/luffy1.png'">修改图片</button>
<br /><br />
<!--修改标签样式-->
<p id="p2">我是一段文字</p>
<button onclick="document.getElementById('p2').style='color:red;font-size:25px;'">修改样式</button>
<!--网页中添加内容-->
<script type="text/javascript">
for(x=1;x<=10;x++){
document.write('<h1>我是标题'+x+'</h1>')
}
</script>
</body>
</html>
2 js 语法基础
2.1 注释(和C语言注释一样)
//单行注释:在注释文字前加//
/*
多行注释1
多行注释2
*/
2.2 标识符
- 由字母、数字、下划线和$符组成,数字不能开头。
- 注意:$不轻易使用,在JQ有特殊的意义
num = 23
_num = 100
2.3 关键字
//for、if、var、while、func、true、false等....
2.4数据类型
- 类型名首字母都是大写的 js有以下数据类型 Number(数字)、String(字符串)、Boolean(布尔)、Array(数组)、Object(对象)
- Number - 包含所有的数字(包括整数和小数),例如: 100, 0.23, -23, 2e5
- String - 用双引号或者单引号引起来的字符集, 支持转义字符和编码字符
- Boolean - 只有true和false两个值,分别代表真和假
- Array - 相当于python中的列表, 用中括号括起来的多个元素。[12, 'abc', true, [1, 2, 3]]
- Object - 类似python中字典和对象的结合
- typeof函数 查看数据类型
- 类型名(数据) - 类型转换
- parseFloat(数据) - 将数据转换成浮点数
- parseInt(数据) - 将数据转换成整数 数据类型不变 js里没整除,可以用parseInt实现
- 语句
- 一行一般情况下只写一条语句,语句结束后可以有分号也可以没有;如果一行有多条语句,语句之间必须有分号
- 缩进无要求
- 大小写敏感
<script type="text/javascript">
//转换类型
result = String(100)
console.log('=====:',result, typeof(result))
result = parseFloat('12.34')
console.log('=====:',result, typeof(result))
result = parseInt('12.34')
console.log('=====:',result, typeof(result))
//typeof(数据) - 获取数据对应的类型
console.log(2e5) //在控制台打印,相当于python的print
console.log(typeof(0.12))
console.log(typeof(120))
str1 = 'hello'
str2 = "Hello\t你好\u4e00"
console.log(str2)
arr1 = [10, 'abc', false, [1, 2, 3]]
console.log(arr1, arr1[1])
obj1 = {
'name':'小明',
'age': 18,
'sex':'女'
}
console.log(obj1, typeof(obj1))
console.log(obj1['name'], obj1.name)
obj2 = {
name:'小明',
age:18,
sex:'男'
}
console.log(obj2, typeof(obj2))
//语句
num1 = 100
num2 = 200
num3 = 300
num = 1000
NUM = 2000
console.log(num, NUM)
</script>
2.5变量
声明变量的语法
- 语法1:
- 变量名 = 值
- 语法2:
- var 变量名 / var 变量名 = 值
- 说明
- 变量名 - 标识符、不能是关键字; 采用驼峰式命名
- 声明变量如果没有给变量赋值(语法2才支持),变量的默认值是undefined
<script type="text/javascript">
num = 100 //必须赋值
console.log(num)
var num2 //不赋值是undefined
console.log(num2)
studentName = '小明'
//同时声明多个变量,赋相同的值
a = b = c = 10
console.log(a,b,c)
//同时声明多个变量,赋不同的值
var a1, b1=10, c1=30
console.log(a1, b1, c1)
</script>
2.6 运算符
js支持数学运算符、比较运算符、逻辑运算符、赋值运算符、(位运算)
<script type="text/javascript">
//1.数学运算符:+, -, *, /, %, ++,--
//+, -, *, /, %和python一样
console.log(10+20, 10-20, 10*20, 10/20, 10%20)
//1)自加1运算: 变量++, ++变量
num = 10
num++ //num += 1
console.log(num) // 11
++num
console.log(num) // 12
//2)自减1运算: 变量--, --变量
num = 10
num--
console.log(num)
--num
console.log(num)
//3)自加自减的坑
num = 10
num2 = num++ // num2 = num; num+=1
console.log(num2)
num = 10
num2 = ++num // num+=1; num2=num
console.log(num2)
//2.比较运算符: >,<,==,!=,>=,<=, ===, !==
// 比较大小和python一样
// == : 判断值是否相等(不管类型)
// === : 同时判断值和类型是否相等(python中的==)
console.log(5 == '5') // true
console.log(5 === '5') // false
console.log(5 != '5') //false
console.log(5 !== '5') // true
// 支持表示范围的连续写法
num = 10
reslut = 0 < num <100
console.log(reslut)
//3.逻辑运算:&&(逻辑与运算)、||(逻辑或运算)、!(逻辑非运算)
//和python中的and,or,not功能一样
console.log(true && true, true && false)
console.log(true || true, true || false)
console.log(!true)
//4.赋值运算符: =, +=, -=, *=, /=, %=
//和python一样
//5.复合运算和python一样
//6.三目运算符 - 表达式?值1:值2
//判断表达式的值是否为true,如果为true整个运算的结果是值1,否则是值2
age = 16
reslut = age>18?'成年':'未成年'
console.log(reslut)
</script>
2.7 分之结构
js有if和switch两种分之结构
2.7.1 if分之
- 结构1: if
if(条件语句){
满足条件执行的代码块
} - 结构2: if-else
if(条件语句){
满足条件执行的代码块
}else{
不满足条件执行的代码块
} - 结构3:if-elif...else
if(条件语句1){
满足条件1执行的代码块
}else if(条件语句2){
满足条件2执行的代码块
}
2.7.2 switch
- 语法:
switch(表达式){
case 值1:
代码块1
case 值2:
代码块2
case 值3:
代码块3
...
default:
代码块N} - 执行过程
先计算表达式的结果,然后让这个结果按顺序从前往后和每个case后面的值进行比较。
如果哪个case后面的值和表达式的结果相等,就将这个case作为入口,依次后面所有代码块,
直到执行完最后一个代码块或者遇到break为止。
如果每个case后面的值都和表达式的结果不相等,直接执行default后面的代码块(default可以不写)
<script type="text/javascript">
switch(2){
case 1:
console.log('表达式1')
case 15:
console.log('表达式15')
case 10:
console.log('表达式10')
case 8:
console.log('表达式8')
default:
console.log('表达式d')
}
grade = 2
switch(grade){
case 0:
console.log('不及格')
break
case 1:
case 2:
case 3:
console.log('及格')
break
case 4:
case 5:
console.log('优秀')
break
}
</script>
2.8 循环结构
js中循环分为for循环和while循环
2.8.1 for循环
- for-in循环
for(变量 in 序列){
循环体}
让变量依次获取序列中元素的下标(下标/属性名),一个一个取,取完为止,每取一个值执行一次循环体 - c中的for循环
- for(表达式1;表达式2;表达式3){
循环体 } - 执行过程:
- 先执行表达式1,再判断表达式2的值是否为true;如果为true执行循环体,执行完循环体再执行表达式3;
- 再判断表达式2是否为true,如果为true执行循环体,执行完循环体再执行表达式3;
- 再判断表达式2是否为true,如果为true执行循环体,执行完循环体再执行表达式3;
- 依此类推,直到表达式2的结果为false,循环结束
- 相当于python中的以下结构:
表达式1
while 表达式2:
循环体
表达式3
- for(表达式1;表达式2;表达式3){
2.8.2 while循环
- while循环
while(条件语句){
循环体}
执行过程和python一样 - do-while循环
do{
循环体
}while(条件语句)
执行过程: 执行循环体,判断条件语句是否为true,为true再执行循环体,执行完循环体又判断条件语句是否为true,以此类推,直到条件语句为false循环结束
<script type="text/javascript">
str1 = 'abc'
for(x in str1){
console.log(x, str1[x])
}
//2)C中的for循环
sum1 = 0
for(num=1;num<=100;num++){
sum1 += num
}
console.log(sum1)
//2.while循环
sum1 = 0
for(num=1;num<=100;num++){
sum1 += num
}
console.log(sum1)
sum1 = 0
num = 1
while(num<=100){
sum1 += num
num++
}
console.log(sum1)
sum1 = 0
num = 1
for(;num<=100;){
sum1 += num
num++
}
console.log(sum1)
//练习: 打印所有的水仙花数
//153 == 1**3+5**3+3**3
console.log('===========================')
for (num=100;num<=999;num++) {
ge = num % 10
shi = parseInt(num/10)%10
bai = parseInt(num/100)
if (ge**3 + shi**3 + bai**3 == num){
console.log(num)
}
}
</script>
3 js函数
语法:
function 函数名(参数列表){
函数体}
<script type="text/javascript">
function sum(num1, num2=20){
console.log(num1, num2, num1+num2)
}
//位置参数有效
sum(10, 30)
//关键参数不报错,但是顺序无效
sum(num1=2, num2=4) // 2 4 6
sum(num2=9, num1=8) // 9 8 17
//参数可以设置默认值(有默认值的参数要在后面)
sum(10)
function sum1(num1=10, num2){
console.log(num1, num2, num1+num2)
}
sum1(20) // 20 undefined NaN(无效数字)
function sum3(num1, num2){
return num1+num2
}
console.log(sum3(23, 45))
//声明函数其实就是声明一个类型是Function的变量
x = sum3
console.log(typeof(x))
console.log(x(90, 9))
/*
2.匿名函数
function (参数列表){
函数体
}
*/
func1 = function(x, y){
console.log(x, y, x+y)
return x+y
}
func1(1, 2)
a = function(x, y){
console.log(x, y, x+y)
return x+y
}(10, 20)
console.log(a) // 30
</script>
4 字符串
<script type="text/javascript">
//1.字符串
//单引号或者双引号引起来的字符集,支持转义字符和编码字符
str1 = 'hello world'
str2 = 'hello\t\'world\''
//2.获取字符
//字符串[下标]
//注意: 1)下标只有正值,没有负的; 2)下标越界不会报错,获取到的值是undefined
console.log(str1[0])
console.log(str1[-1])
//js中不支持[]对应的切片语法,但是有相应的方法
//3.相关操作
//1)加法运算
//支持字符串和任何数据相加, 如果另外一个数据不是字符串就先转换成字符串再进行拼接操作
console.log('abc'+'hello') //abchello
console.log('abc'+123) // abc123
//2)比较运算: 和python一样
//3)字符串长度: 字符串.length
console.log(str2.length)
//4.相关方法
str2 = new String('hello world')
console.log(str2)
//1)字符串.charCodeAt(下标)
console.log(str2.charCodeAt(0))
//2)字符串.match(正则表达式),相当于python中的re.match
re = /\d{3}[a-z]{3}/
console.log('234abc====='.match(re))
//3)字符串.slice(开始下标,结束下标)
console.log(str2.slice(0, 3))
</script>
##5 数组
~~~html
<script type="text/javascript">
//js中的数组相当于python中的列表
//1.查
arr1 = [10, 2, 30, 4, 5]
//1)获取单个元素: 数组[下标]
console.log(arr1[3]) //4
console.log(arr1[10]) //undefined
//2)遍历
for(index in arr1){
console.log('index:'+index, arr1[index])
}
//2.增
console.log('=============增加==================')
//1)数组.push(元素) - 在数组的最后添加元素
arr1.push(100)
console.log(arr1)
//2)数组.splice(下标,0,元素) - 在指定的下标前插入指定的元素
//数组.splice(下标,0,元素1,元素2,...) - 在指定的下标前插入多个元素
arr1 = [1, 2, 3, 6, 7,8]
arr1.splice(3,0,4,5)
console.log(arr1)
//3.删
console.log('=============删除==================')
//1)数组.pop() - 取出数组中的最后一个元素
re = arr1.pop()
console.log(arr1, re)
//2)数组.shift() - 取出数组中第一个元素
re = arr1.shift()
console.log(arr1, re)
//3)数组.splice(开始删除的下标,删除的个数)
arr1 = [10, 30, 20, 40]
arr1.splice(1,2)
console.log(arr1)
//4.改
//数组[下标] = 值
arr1[0] = 200
console.log(arr1)
//5.排序
//sort(函数对象)
//函数对象 - 函数,有两个参数(代表数组中的两个元素), 返回值代表排序方法
console.log('=================排序==============')
nums = [90 ,23, 56, 7, 89, 70]
//数组元素从大到小排序
nums.sort(function(a,b){return b-a})
console.log(nums)
//数组元素从小到大排序
nums.sort(function(a,b){return a-b})
console.log(nums)
students = [
{name:'小明', age:18, score:90},
{name:'小花', age:20, score:70},
{name:'小红', age:15, score:78},
{name:'小李', age:30, score:60}
]
//将数组元素按照元素的age属性从下到大排序
// students.sort(function(a,b){return a.age - b.age})
// console.log(students)
//将数组元素按照元素的score属性从大到小排序
students.sort(function(a,b){return b.score - a.score})
console.log(students)
</script>
6 对象
<script type="text/javascript">
//1.什么是对象
//和python类的对象一样,主要由对象属性和对象方法组成
//2.创建对象
//1)对象值
obj1 = {
name: '张三',
}
console.log(typeof(obj1), obj1)
//2)new 类型()
obj2 = new Object()
console.log(typeof(obj2), obj2)
obj2.name = '小明'
console.log(obj2)
//3.构造方法 - 一个用来创建对象的函数
//1)函数名相当于类名,首字母要大写
//2)函数的功能是通过this添加对象属性和对象方法(这儿的this就相当于self)
//3)返回值是this
function Person(name, age, gender='男'){
// 通过new的方式调用, this:Person {}
// 直接调用, this: Window
console.log(this)
//添加对象属性
this.name = name
this.age = age
this.gender = gender
//添加对象方法
this.eat = function(food){
console.log(this.name+'在吃'+food)
}
return this
}
//4.使用构造方法创建对象
//对象 = new 构造方法()
p1 = new Person('小花', 20, '女')
p2 = new Person('小明', 35)
//5.通过对象使用对象属性和调用对象方法
p1.name = '小花花'
console.log(p1.name, p1['name'])
p1.eat('面条')
p2.eat('面包')
//6.添加/修改属性
//对象.属性 = 值
p1.height = 160
console.log(p1, p2)
function func1(){
console.log('普通函数')
console.log(this)
}
// func1()
window.func1()
num = 100 // window.num=100
console.log(num, window.num)
</script>