day5 总结

js

1.什么是js

js是JavaScript的缩写,是web标准中的行为标准。负责网页中变化的部分。

2.在哪里写js代码

a.写在标签的事件相关属性中,例如按钮的onclick属性

b.写在script标签中(将js代码作为script标签的内容)
注意:script标签理论上可以放在html中的任何位置,但是一般放在head或者body中

c.写在js文件中,在html中通过script标签将文件导入(src属性值就是要导入的js文件的路径)

3.js能做什么

a.在网页的指定位置插入标签
b.修改网页中标签的内容
c.修改标签样式

4.怎么写js代码

JavaScript是一门编程语言,和python一样是动态语言也是脚本语言。和Java没有半毛钱关系!

补充:
window.alert(信息) - js代码,在浏览器上弹出一个对话框,对话框中显示指定的信息。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        
    </head>
    <body>
        <!--1.js代码写在哪儿-->
        
        <!--<script type="text/javascript" src="js/index.js">
            
        </script>
        
        <script type="text/javascript">
            //在这儿写js代码
            window.alert('python and js!')
        </script>
        
        <button onclick="window.alert('你好!')">点我呀!</button>
        -->
        
        <h1>我是标题</h1>
        <!--2.js能做什么-->
        <!--a.插入内容-->
        <script type="text/javascript">
            arr = ['海贼王', '火影', '魁拔', '一拳超人']
            for (index in arr) {
                message = '<h1>'+arr[index]+'</h1>'
                //在网页中添加内容
                document.write(message)
            }
            
//          for (i=0; i < 20; i++){
//              document.write('<h1>我是标题</h1>')
//          }
            
            
        </script>
        <!--b.修改标签内容-->
        <p id="p1">我是段落</p>
        <button onclick="document.getElementById('p1').innerHTML='我是JavaScript!'">修改内容</button>
        
        <!--c.修改标签的样式-->
        <button onclick="document.getElementById('p1').style='color:red; font-size:30px'">修改样式</button>
        
        
    </body>
</html>

01.基本语法

1.控制台输出

console.log(输出的内容) - 和print的功能一样
console.log(100)
console.log('abc', 200)

2.注释 - 和c一样

单行注释

/*
* 多行注释
* 多行注释
*/
3.标识符

由字母数字下划线和$组成,数字不能开头。

a = 10
a20 = 100
a_100 = 200
$12s = 23
//12abc = 100 //报错!

4.行和缩进

从语法角度,js代码怎么换行和缩进都无所谓。js中通过大括号{}来确定代码块。

5.常见的数据类型:数字,布尔,字符串,数组,对象,和函数

a.数字(Number) - 包含所有的数字,包括整数、小数和科学计数法(不支持复数类型!)。例如:10,12.3,-14,-2.34,3e2
b.布尔(Boolean) - 只有两个值true和false。这两个值是关键字,分别代表真和假。
c.字符串(String) - 使用单引号或者双引号引起来的字符串集, 'abc', "abd"
d.数组(Array) - 相当于python中的列表,[12, 'abc', ture]
e.对象(Object) - 相当于python中的字典和对象,{name: '小明', age: 10}
f.函数(Function) - 相当于python中的函数

console.log(3e2, '我是字符串', "我是字符串!")
    
obj1 = {name: '小明', age: 10}
console.log(obj1['name'], obj1.name)
    
//声明函数
function eat(name,food){
    console.log(name+'吃'+food)
}
eat(obj1.name,'面条')

02.变量

1.变量的声明

语法1:变量名 = 值
变量名 - 标识符,不能是关键字;
驼峰式命名(第一个单词首字母小写,后面每个单词的首字母大写)

语法2:var 变量名 = 值 或 var 变量名
var - 声明变量的关键字

区别:声明的时候加var,变量可以不用赋值,默认是undefined;不加var,变量必须赋值,否则会报错

补充:js中两个特殊的值 - undefined(没有,空)和null(清空)

    name = '小明'
    console.log(name)
    
    var age = 10
    var sex  // 通过var声明变量的时候如果不赋值,默认是undefined
    console.log(age, sex)
    
    //重新给变量赋值
    name = '小明'
    age = 18
    sex = '男'
    console.log(name, age, sex)
    
    //同时声明多个变量,赋一样的值
    a1 = a2 = a3 = 10
    console.log(a1, a2, a3)
    
    var b1 = 1, b2 = 2, b3 = 3, b4
    console.log(b1, b2, b3, b4)
    
//  arr1 = [1, 24, 45]
//  console.log(arr1[10])

03.运算符

1.数学运算符:+, -, *, /, %, ++, --

前面五个运算符合python一模一样

++, -- - 都是单目运算符,使用方式:变量++/--, ++/--变量
a.++ - 自加1运算;让变量本身的值加1
b.-- - 自减1运算;让变量本身的值减1

num = 10
num ++
console.log(num)  // 11
++num
console.log(num)  // 12
num--
console.log(num)  // 11
--num
console.log(num)  // 10

坑:用一个变量单独使用++/--的时候,++/--放前面和放后面效果一样;
如果是使用++/--运算的结果给另一个变量赋值,++/--放前面是先自加再自加或自减,++/--放后面是先赋值再自加或自减

num2 = 10
num = ++num2  //相当于: num2 += 1; num = num2
console.log(num, num2)  // 11  11

num2 = 10
num = num2++  //相当于: num = num2 ; num2 += 1
console.log(num, num2)  // 10  11
2.比较运算符:>, <, ==, !=, >=, <=, ===, !==

结果是布尔值
比较大小和python一样
a.== - 判断值是否相等
b.=== - 判断值和类型是否相等(完全相等), 相当于python中的==,!==相当于python中的!=

console.log(5 == 5)  //true
console.log(5 == '5')  //true
console.log(5 != 5)  //false
console.log(5 != '5')  //false

console.log(5 === 5)  //true
console.log(5 === '5')   //false
console.log(5 !== 5)  //false
console.log(5 !== '5')  //true
3.逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)

运算规则和使用方式和python的逻辑运算一模一样

console.log('=================')
console.log(true && true)  //true
console.log(true && false)  //false
console.log(false || true)  //true
console.log(false || false)  //false
console.log(!true)  //false
4.赋值运算符:=, +=, -=, *=, /=, %=

和python一模一样

5.三目运算符 - ?:

语法:
条件语句?值1:值2 - 判断条件语句的值是否为true,为true整个表达式的结果就是值1,否则就是值2

age = 16
is_man = age >= 18 ? '成年' : '未成年'
console.log(is_man)
6.运算顺序

数学 > 比较 > 逻辑 > 赋值
如果由括号,先算括号里


04.分之结构

js中的分之结构有两种:if和switch

1.if语句

a.if
if(条件语句){
满足条件会执行的代码
}

b.if-else
if(条件语句){
代码段1
}else{
代码段2
}
c.if - else if - else
if(条件语句){
代码段1
}else if(条件语句2){
代码段2
}else if(条件语句3){
代码段3
}else{
代码段4
}

执行过程和python一模一样

num = 11 
if (num % 2) {
    console.log('奇数')
    
} else{
    console.log('偶数')   
}
age = 18
if (age < 18) {
    console.log('未成年')
} else if(age < 60){
    console.log('成年')
}else{
    console.log('老年')
}
2.switch语句

a.结构:
switch(表达式){
case 值1:
代码段1
case 值2:
代码段2
...
default:
代码段3
}
b.执行过程:
使用表达式的值依次和后面每个case后面的值进行比较,看是否相等;找到第一个和表达式的值相等的case,将这个case作为入口,依次执行后面的所有的代码,直到执行完成后或者遇到break位置。如果每个case的值和表达式的值都不相等,就执行default后面的代码。

注意:case后面必须是一个有结果的表达式

a = 15
switch (a){
    case 5:
        console.log('表达式1')
    case 6:
        console.log('表达式2')
    case 7:
        console.log('表达式3')
    case 10:
        console.log('表达式4')
    case 11:
        console.log('表达式5')
        break
    default:
        console.log('表达式6')
}

练习:用一个变量保存10分制的成绩,根据成绩打印情况:0 ~ 5(不及格)、6(及格)、7 ~ 8(良好)、9~10(优秀)

scoers = 3
switch (scoers){
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        console.log('不及格')
        break
    case 6:
        console.log('及格')
        break
    case 7:
    case 8:
        console.log('良好')
        break
    default:
        console.log('优秀')
}

05.循环结构

js中有for循环和while循环两种

1.for循环

a.for-in
结构:
for(变量 in 序列){
循环体
}
执行过程和python一样,但是变量取到的不是元素,而是下标/key(属性名)
序列 - 字符串,数组,对象

str1 = 'abc'
for(x in str1){
    console.log('=========')
    console.log(x, str1[x])
}

arr1 = [1, 'aaa', true, 12.5]
for (index in arr1) {
    console.log(index, arr1[index])
}

person1 = {name:'小明', age: 18, sex:'男'}
for (x in person1) {
    //typeof() - 获取值的类型
    console.log(x, typeof(x))
    console.log(person1[x])
}

b.c的for循环
结构:
for(表达式1;表达式2;表达式3){
循环体
}
执行过程:先执行表达式1;判断表达式2的值是否为true,如果为true就执行循环体,执行完循环体再执行表达式3;然后再判断表达式2是否为true,如果为true就执行循环体;
...以此类推,直到表达式2的结果为false为止(循环结束)。

类似:
表达式1
while 表达式2:
循环体
表达式3

表达式1
for(;表达式2;){
循环体
表达式3
}

num = 1
sum1 = 0
while(num <= 100){
    sum1 += num
    num++
}
console.log(sum1)

for(num=1, sum1=0;num<=100;++num){
    sum1 += num
}
console.log(sum1)
2.while循环

a.while循环
while(条件语句){
循环体
}
执行过程和python一模一样

b.do-while循环
do{
循环体
}while(条件语句)

区别:do-while的循环体至少会执行一次

//1~100的和
num = 1
sum1 = 0
do{
    sum1 += num
    num++
}while (num<=100)
console.log(sum1)

06.函数

1.函数的声明

function 函数名(参数列表){
函数体
}

js中的函数除了声明的关键字不一样,其他的都一样

参数可以设置默认值,也可以通过关键字参数来调用函数

function sum(num1, num2=3){
    console.log('求两个数的和')
    return num1 + num2
}
2.函数的调用

函数名(实参列表)

console.log(sum(10, 20))
console.log(sum(10))
console.log(sum(num1=12, num2=200))

js中所有的函数都有返回值,默认值是undefined

function func1(){
    console.log('我是js函数')
}
re = func1()
console.log(re, typeof(re))
3.匿名函数(函数的字面量)

函数名 = function(参数列表){函数体}

func2 = function(a, b){
    console.log(a, b)
    return a * b
}
console.log(func2(3, 4))


funcs_arr = [func1, function(a){console.log(a)}]
funcs_arr[0]()
funcs_arr[1]('abc')
4.变量的作用域

a.全局变量:只要声明在函数的外面的变量就是全局变量

b.局部变量

var1 = 1000   //这是一个全局变量
var var2 = 'abc'   //这是一个全局变量

for(xxx in 'hello'){
    
}

function abc(){
    var3 = 111  //这是一个全局变量
    var4 = 222   //这是一个局部变量
    console.log(var1, var2, xxx)
}
abc()

console.log(var3)
function func3(){
    num3 = 4
}
func3()
num4 = 5
console.log(num3+num4)

07.字符串

1.字符串字面量

a.使用双引号或者单引号括起来的字符集
b.除了普通字符以外还可以是转移字符:\n, \t, \, ', "
c.\u4位16进制值对应的Unicode编码,\u4e00 - ——

str1 = '\\abc\n"123\''
str2 = "abc\"123\u4e00==="
console.log(str1, str2)
2.获取字符

字符串[下标] - 获取单个字符
下标 - 范围是0 ~ 长度-1;
js中没有切片语法([::])

str1 = 'hello js'
console.log(str1[1])
3.相关运算: +

NaN - js中一个特殊的值,类似undefined、null,用来表示一个不存在是数值。
支持字符串和其他任何数据相加,是将其他数据全部转换成字符串,然后再拼接。

str2 = 'abc'+'123'
console.log(str2)
str2 = 'abc'+100
console.log(str2)
str2 = 'abc'*2
console.log(str2)   // NaN
str2 = 'abc'+[1, 'abc', 2, '123']
console.log(str2)

补充:js中数据类型转换:类型名()

num_str =  String(123)
str_num = Number('a23.45')
console.log(num_str, str_num, typeof(num_str), typeof(str_num))
4.字符串长度
console.log('hello world'.length)

str3 = 'abc'   // str3是String类型
str4 = new String('abc')   //object
console.log(str3 == str4, str3 ===str4)
console.log(str3[1], str4[1])
5.字符串相关方法
function gary_print(aa){
    console.log(aa)
}
gary_print('abc'.charAt(2))
gary_print(String.fromCharCode(97))
result = 'abcd12abc23hhh123'.replace(/\d+/g, '*')
gary_print(result)
for(index in result){
    gary_print(index)
}
6.js中的数组只需要关注:

a.怎么获取数组中的元素
b.数组对应的方法
c.元素可以是任何类型

arr = [1, 'abc', true]
gary_print(arr)
nums = [1, 34, 67, 2, 344]
new_nums = nums.sort(function(a,b){return b-a})
gary_print(new_nums)

08.数组

输出函数

function gary_print(aa){
    console.log(aa)
}

1.数组 - 数组对象是使用单独的变量名来存储一系列的值

a.创建数组
var arr = [3, 'abc', true, [2,'ag']]
//  var arr = new Array()
//  arr[0] = 3
//  arr[1] = 'abc'
//  arr[2] = true
//  arr[3] = [2, 'ag']
    var num_arr = [1, 2, 56, 23, 376]
var str_arr = ['gary', 'ab', 'left', 'right']
b.输出数组中的元素 - for...in
for (index in arr) {
    gary_print(index)  //直接遍历数组,得到的是数组元素中的下标
    gary_print(arr[index])  //只能通过索引值获取数组中的元素
}
c.合并数组 - concat
gary_print(arr.concat(num_arr))    //[3, "abc", true, Array(2), 1, 2, 56, 23, 876] - 元素中有数组,合并后以Array(n)显示
gary_print(arr.concat(num_arr, str_arr))  //[3, "abc", true, Array(2), 1, 2, 56, 23, 876, "ab", "gary", "left", "right"]
d.获取数组的长度 - length
gary_print(arr.length)   // 4 - 获取数组的长度
gary_print(num_arr.indexOf(876))
e.join - 用数组的元素组成字符串
str1 = str_arr.join('*')
gary_print(str1)  //数组中的元素合成一个字符串   -  ab*gary*left*right
gary_print(str1[5])  //r
f.pop - 删除数组中的最后一个元素

``
gary_print(arr.pop()) // [2, "ag"]
gary_print(arr) // [3, "abc", true]

###### g.push - 数组的末尾添加新的元素
``
gary_print(arr.push(89))
gary_print(arr)  //[3, "abc", true, 89]
h.reverse - 将数组中的元素反向排序

str2 = str_arr.reverse()
gary_print(str2) //["right", "left", "ab", "gary"]

i.shift - 删除数组中的第一个元素

``
arr1 = arr.shift()
gary_print(arr) //["abc", true, 89]

###### j.slice - 从数组中选择元素
``
arr2 = str_arr.slice(1,4)
gary_print(arr2)  // ["left", "ab", "gary"]
k.sort() - 数组排序,默认是按数组中每个元素中的字符一一比较,根据Unicode编码值大小排序,类似python中的字符串排序方法。
gary_print(arr.sort())   //[89, "abc", true]
gary_print(num_arr.sort())   //[1, 2, 23, 376, 56]
gary_print(num_arr.sort(function(a,b){return a-b}))  // [1, 2, 23, 56, 376] 升序- 如需按数字大小排序,需要一个判断两个数大小的函数
gary_print(num_arr.sort(function(a,b){return b-a}))  //[376, 56, 23, 2, 1]  降序 - function(a,b){return b-a}:两个数比较后,返回一个大于0的数
l.splice - 在数组的第二个元素添加一个元素
arr2 = ["abc", true, 89]
arr2.splice(2,0,"gary")
gary_print(arr2)  //["abc", true, "gary", 89]
toString - 将素组转换成字符串
str3 = arr2.toString()
gary_print(str3)  //abc,true,gary,89
gary_print(str3[4])  // 4
unshift - 在数组开头添加新元素
arr2.unshift(17)
gary_print(arr2)  // [17, "abc", true, "gary", 89]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容