Javascript前半部分

277 阅读3分钟

Javascript

javascript是一种运行在客户端的(游览器)的编程语言,实现人机交互。

作用:

网页特效(监听用户的一些行为让网页作出对应的反馈)

表单验证(针对表单数据的合法性进行判断)

数据交互(获取后台数据,渲染到前端)

服务端编程(nide.js)

组成:

ECMAScript:规定了js基础语言核心知识。比如:变量、分支语言、循环语句、对象等等

Wed Apls:

DOM:操作文档,比如对页面元素进行移动、大小、添加删除等操作

BOM:操作游览器,比如页面弹窗,检测窗口宽度、储存数据到游览器等等

javascript书写位置:
内部javascript:

直接写在html文件里,用script标签包住

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    
    
    
    
    
    <script>   </script>
</body>
</html>
外部javascript:

代码写在以.js结尾的文件里,通过script标签引入到html页面中(body标签底部)

<body>
    
    
    <script src="./user.js"> </script>
</body>
内联javascript:

代码写在标签内部

<body>
    <p onclick="alert('就是玩')">你能怎么样</p>
</body>
Javascript注释

单行注释:

符号:// ;让一行代码被注释掉; 快捷键:ctrl+/

多行注释(块注释)

符号:在/* 和 */ 之间的所有内容都会被注释掉 ; 快捷键:shift+alt+a

Javascript结束符

代码后面写分号

可写可不写

<body>
    
    
    
    <script>
        alert(1);
    </script>
</body>
Javascript输入输出语法

三种输出语法:

内容输出在body里面

<script>
    document.write('内容')
</script>

内容以弹窗方式显示内容

<script>
    alert('内容')
</script>

内容显示在鼠标右键检查里面的控制台内

<script>
    console.log('内容')
</script>

一种输出语法:

弹出一个对话框,输入内容即可

<script>
    prompt('输入内容')
</script>
Javascript变量:

变量是计算机存储数据的"容器"(变量是装内容的盒子)

声明变量

要使用变量,首先要创造变量。let 是script标签里面声明变量的关键字

<script>
    let 变量名字
</script>
变量赋值

变量名后面加上 '=' ,然后是内容。赋值完成

<script>
    let name
    name = 周树人
</script>
变量赋值

连用

<script>
    let age = 18 
</script>
更新变量

变量赋值后,可以通过再给变量赋值覆盖掉前面的赋值

<script>
    let age = 18
    age = 23
    document.write(age)
</script>
多个变量声明赋值

变量之间逗号隔开

<script>
    let age = 23 ,name = "周树人"
变量命名规则和规范

规则:

不能用关键字,例如:有特殊含义的字符,JavaScript 内置的一些英语词汇。例如:let、var、if、for等

只能用下划线、字母、数字、$组成,且数字不能开头

字母严格区分大小写,如 Age 和 age 是不同的变量

规范:

起名要有意义

遵守小驼峰命名法, 第一个单词首字母小写,后面每个单词首字母大写。例:userName

Javascript数据类型

两种数据类型:基本数据类型,引用数据类型

基本数据类型

number 数字型 string 字符串型 boolean 布尔型 undefined 未定义型 null 空类型

字符串类型:

通过单引号( '') 、双引号( "")或反引号( ` )包裹的数据都叫字符串,单引号和双引号没有本质上的区别,推荐使用单引号。

注意事项:

  1. 无论单引号或是双引号必须成对使用
  2. 单引号/双引号可以互相嵌套,但是不以自已嵌套自已(口诀:外双内单,或者外单内双)
  3. 必要时可以使用转义符 \,输出单引号或双引号
<script>
    let name1='小明'
    let name2="小红"
    let name3=`小亮`
    let name4=''(空字符)
    let name5='无穷'小亮'日常'(不符合要求)
</script>

字符串拼接

<script>
    document.write('还有'+'谁')//输出  还有谁
    let name1='我爱你'
    let name2='能不能开玩笑'
    document.write(name1+name2)// 输出  我爱你能不能开玩笑
</script>

模板字符串

拼接字符串和变量

所有内容用``(tab键上方,要英文状态下)符号包裹,变量用${}包裹,自然连接内容和变量


<script>
    document.write(`你们好,我${ai}你们`)
</script>
布尔类型:

表示肯定或否定时在计算机中对应的是布尔类型数据。

它有两个固定的值 true 和 false,表示肯定的数据用 true(真),表示否定的数据用 false(假)。

<script>
    //你叫小红?
    let name=true//没错
    name=false//你叫小丽
</script>
未定义类型:

未定义是比较特殊的类型,只有一个值 undefined。

只声明变量,不赋值的情况下,变量的默认值为 undefined,一般很少【直接】为某个变量赋值为undefined。

<script>
    let age//声明了但没有给变量赋值
    document.write(age) //输出undefined
</script>

工作中的使用场景: 我们开发中经常声明一个变量,等待传送过来的数据。 如果我们不知道这个数据是否传递过来,此时我们可以通过检测这个变量是不是undefined,就判断用户是否 有数据传递过来。

空类型

null 表示 值为 空

<script>
let name=null
</script>

null 和 undefined 区别:

  1. undefined 表示没有赋值

  2. null 表示赋值了,但是内容为空

    null 开发中的使用场景: 官方解释:把 null 作为尚未创建的对象 大白话: 将来有个变量里面存放的是一个对象,但是对象还没创建好,可以先给个null

引用数据类型

object 对象 function 函数 array 数组

控制台检测数据类型

通过typeof关键字检测数据类型

<script>
    let age =18
    let name='小明'
    let flag=flase
    let money
    console.log(typeof age)//number  数字类型
    console.log(typeof name)//string 字符串
    console.log(typeof flag)//flag   布尔类型
    console.log(typeof money)//undefined  未定义类型
类型转换

JavaScript是弱数据类型: JavaScript也不知道变量到底属于那种数据类型,只有赋值了才清楚。 坑: 使用表单、prompt 获取过来的数据默认是字符串类型的,此时就不能直接简单的进行加法运算。

<sript>
    console.log('100'+'100')//输出100100
</sript>

此时需要转换变量的数据类型。 通俗来说,就是把一种数据类型的变量转换成我们需要的数据类型。

隐式转换

某些运算符被执行时,系统内部自动将数据类型进行转换,这种转换称为隐式转换。

规则:+号两边只要有一个是字符串,都会把另外一个转成字符串

​ 除了+以外的算术运算符 比如 - * / 等都会把数据转成数字类型

缺点:转换类型不明确,靠经验才能总结

<script>
   name=+prompt('数字')有''有字符串符号在,输入数字也会变成字符串,但是前面加了+就会转换成数字类型
显式转换

Number(数据)**** 转成数字类型

如果字符串内容里有非数字,转换失败时结果为 NaN(Not a Number)即不是一个数字

NaN也是number类型的数据,代表非数字

parseInt(数据)

只保留整数

parseFloat(数据)

可以保留小数

<script>
    let age ="18"
    document.write(Number(age))//转为数字类型
    document.write(parsInt(age))
    document.write(parsFloat(age))
    

转换为字符型: String(数据)

变量.toString(进制)

<script>
    let age=18
    document.write(String(age))//转为字符串
Javascript运算符
算术运算符

数学运算符也叫算术运算符,主要包括加、减、乘、除、求余。

'+' '-' '*' '/' '%(求余)'。

先乘除后加减,有括号先算括号里面的

*圆的的Π:Math.PI.

赋值运算符

对变量进行赋值的运算符:将等号右边的值赋予给左边, 要求左边必须是一个容器

'+=' '-=' '*=' '/=' '%='

等号两边有同一变量可以使用赋值运算:

<script>
    let number=12
    number=number+1
    //可以使用赋值运算符简写成
    number+=1
</script>
一元运算符

自增:

<script>
    let i=1
    i++(自增)
</script>

前置自增:

<script>
    let i =1
    ++i//每执行一次,变量加一
    document.write(++i + 2)//输出结果为4
    //document.write(i+1+2)
    i先自身自增加一,在和后面的2相加
    document.write(i)//输出结果为2
    //相当于document.write(i=i+1)所以i输出为2
    因为i是自增
</script>

后置自增:

<script>
    let i=1
    i++//每执行一次,变量加一
    document.write(++i + 2)//输出结果为3
    //i先和2相加,先运算输出完毕后,i在加自增加一
    document.write(i)//输出结果为2
    //相当于document.write(i=i+1)所以输出为2
</script>

后置自增如果前面有后置自增的运算,那么先运算后自增

<script>
    let i=1
    document.write(i++ +2)
    //运算输出结果为3,运算输出后i++开始自增,此时i的值结果为2
    document.write(i++ +1)
    //运算输出结果为3,因为前面i已经后置自增了一次,那么i现在的值为2,所以运算结果是3,而这个运算里面i还是后置自增,所以运算输出后,i++开始自增,所以i的值为2+1=3
    document.write(i)
    //输出结果为3
</script>

案例

<script>
    let i =1
    document.write(i++ + ++i + i)//输出结果为7
    //拆分,i++是后置自增,先运算后自增,所以在运算里面i++是1,但是i的输出值却是2,因为自增的关系,但是不影响运算里面i++是1。
    //++i是前置自增,先自增,因为前面已经有一个i++后置自增了,而i++的输出值是2,所以运算里面++i是i++ + 1等于2+1等于3,此时i的输出值为3
    //所以运算document.write(i++ + ++i + i)输出值是(1+3+3)等于7
</script>
比较运算符

">" 左边是否大于右边

"<" 左边是否小于右边

">=" 左边是否大于或等于右边

"<=" 左边是缶小于或等于右边

"==" 左右两边是否想等

"===" 左右两边是否类型和值都相等(类型指基本数据类型)

"!==" 左右两边是否不全等

比较结果为boolean(布尔)类型,即只会得到true或false

逻辑运算符

用来解决多重条件判断

符号 名称 日常读法 特点

"&&" 逻辑与 并且 符号两边都符合条件才成立

"||" 逻辑或 或者 符号两边有一个符合条件就成立

"!" 逻辑非 取反 符号两边都不符合条件就成立

逻辑短路

只存在于符号"&&" "||",当满足一定条件会让右边的代码不执行

"&&" 左边不符合条件就短路

"||" 左边符合条件右边就不需要执行了,短路

Javascript语句

表达式和语句

表达式:是一组代码的集合,JavaScript解释器会将其计算出一个结果

语句:js整句或命令,js语句是以分号结束

区别:表达式计算出一个值,但语句用来自行以使某件事发生(做什么事)

<script>
    let i=1
    i=i+1//表达式
    document.write(i)//语句
</script>
分支语句

分支语句可以让我们有选择性的执行想要的代码

if分支语句

执行满足条件的代码

if单分支语句

<script>
    if (条件) {
        符合条件后要执行的代码
    }

if双分支语句

<script>
    if (条件) {
        满足条件后执行的代码
} else {
    不满足条件后执行的代码
}

if多分支语句

<script>
    if (条件1) {
        满足条件1后执行的代码
    } else if (条件2) {
        满足条件2后执行的代码
    } else {
        以上条件都不满足后执行的代码
    }//先判断条件一,条件一符合,执行条件1代码,其他不执行。条件1不符合则向下判断条件2,满足条件2执行条件2代码,其他不执行,若依然不满足继续往下判断,以此类推,如果所有条件都不符合,执行else的代码。
    //条件可以写n个
</script>
三元运算符

比if双分支更简单的写法,有时候也叫三元表达式

符号:"?" ":" 配合使用,一般用来取值

<script>
    条件?满足条件执行的代码:不满足条件执行的代码
</script>
switch语句
<script>
    switch(数据) {
        case1:
            代码1
            break
        case2:
            代码2
            break
        default:
            代码n
            break
}//找到跟条件全等的case值,并执行里面的代码,若没有全等,则执行default里的代码。
</script>

switch case语句一般用于等值判断,不适合于区间判断

switch case一般需要配合break关键字使用 没有break会造成case穿透

for循环

循环语句
断点调试

作用:学习时可以帮助更好的理解代码运行,工作时可以更快找到bug

浏览器打开调试界面

  1. 按F12打开开发者工具
  2. 点到sources一栏
  3. 选择代码文件

断点:在某句代码上加的标记就叫断点,当程序执行到这句有标记的代码时会暂停下来

while循环

while循环语法

<script>
    while (循环条件) {
        要重复执行的代码(循环体)
}//while大括号里代码执行完毕后不会跳出,而是继续回到小括号里判断条件是否满足,若满足又执行大括号里的代码,然后再回到小括号判断条件,直到括号内条件不满足,即跳出

循环的本质就是以某个变量为起始值,然后不断产生变化量,慢慢靠近条件的过程。所以循环需要具备三要素:

1.变量起始值

2.终止条件(没有终止条件,会一直循环,造成死循环)

3.变量变化量(用自增或自减)

<script>
    let i =1(变量起始值)
    while (i<=5){//终止条件,当i大于5时就不符合条件,停止循环
        document.witer('我')
        i++(变量变化量)
    }
</script>
循环退出

continue:结束本次循环,继续下次循环

while循环退出

<script>
    let i=1
    while(i<=10){
        if (i==5) {
            i++(不加自增会陷入死循环)
            continue 
        }
        document.write(i)
        i++
    }//输出结果为1234678910,因为设置了if(i=5)就跳过5的循环,继续下次循环。所以输出结果中没有5
</script>

for循环退出

<script>
    for(let i=1;i<=10;i++) {
        if (i==5) {
            continue
        }
        document.write(i)
    }//输出结果为1234678910,因为设置了if(i=5)就跳过5的循环,继续下次循环。所以输出结果中没有5
    //for循环中,不需要加i++,它会跳到i++,然后在进行判断条件,不会死循环。
</script>
循环嵌套
<script>
     for (let i = 0; i <= 3; i++) {   //外部循环
            document.write(i)//外部循环体
            for (let z = 4; z <= 9; z++) {//内部循环
                document.write(z)//内部循环体
            }
            document.write('<br />')//外部循环体结束后换行
        }
    //输出结果0456789
           // 1456789
           // 2456789
           // 3456789
    //可以看出每一个外部循环体都有一个内部整体循环
</script>
数组

let+数组名(变量名)=【1,2,3,4,........】

数组是按顺序保存,所以每个数据都有自己的编号

计算机中的编号从0开始,所以1的编号为0,2编号为1,以此类推

在数组中,数据的编号也叫索引或下标

数组可以存储任意类型的数据

<script>
    let number = [1,2,3,4,......]
    unmber[0]//表示1,1是编号0
    unmber[1]//表示2,2是编号1
</script>

输出

<script>
    let number = [000,111,222,333,444]
    document.write(number[0])//输出内容000,000是编号0
</script>
<script>
    let numbers = [111,222,333,444,555]
    document.write(numbers.length)//数组长度,输出结果为5,因为数组长度为5
    document.write(numbers[100])//超出数组长度,显示undefined
</script>
数组长度

属性单位:nums.length

<script>
    let nums=[11,22,33,44]
    document.write(nums.length)//输出4
</script>
数组元素增加删除

数组前面添加元素

<script>
    let numbers=[11,22,33,44,55]
    numbers.unshift('00')
    document.write(numbers)
    //输出数组【00,11,22,33,44,55】
</script>

数组后面添加元素

<script>
     let numbers=[11,22,33,44,55]
     numbers.push('00')
     document.write(numbers)
    //输出数组【11,22,33,44,55,00】

删除数组第一个元素

<script>
     let numbers=[11,22,33,44,55]
     numbers.shift()
     document.write(numbers)
    //输出数组【22,33,44,55】
</script>

删除数组最后一个元素

<script>
     let numbers=[11,22,33,44,55]
     numbers.pop()
     document.write(numbers)
    //输出数组【11,22,33,44】
</script>

改变数组元素

<script>
    let nums=[11,22,33,44,55]
    nums[2]=99//把编号2(33)改成99
    //如果是改成0000的话,输出最对只能输出一个0
    document.write(nums)//输出[11,22,99,44,55]
</script>

清空数组

<script>
    let nums=[11,22,33]
    nums.splice(0)
    //或者num.length=0
</script>

获取数组最后一个元素

<script>
    let nums=[11,22,33]
    document.write(nums[nums.length-1])