Javascript

本文详细介绍了JavaScript的基础知识,包括它的本质、作用、组成、书写位置、输入输出语法、变量、数据类型以及运算符。此外,还探讨了流程控制语句如if、while和for循环,以及如何进行断点调试。最后,通过实例展示了JavaScript在网页特效、表单验证、数据交互和服务端编程等方面的应用。
摘要由CSDN通过智能技术生成

Javascript介绍

1、Javascript(是什么?)

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

2、作用(做什么?)

1、网页特效

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

2、表单验证

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

3、数据交互

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

4、服务端编程

(node.js)

3、Javascript的组成(有什么?)

1、ECMAScript:

规定了js基础语法核心知识。

比如:变量、分支语句、循环语句、对象等等

2、Web APIs:

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

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

4、javascript书写位置

css位置:

1、行内样式表

2、内部样式表

3、外部样式表

Javascript

1、内联JavaScript

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

规范:script标签写在</body>上面

拓展:slert(‘你好,js')页面弹出警告对话框

顺序加载html

2、内部JavaScript

代码写在标签内部

3、外部JavaScript

代码写在以.js结尾的文件里

语法:通过script标签,引入到html页面中

1、script标签中间无需写代码,否则会被忽略

2、外部Javascript会使代码更加有序,更易于复用,且没有了脚本的混合,HTML也会更加易读

一、内部JavaScript

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

规范:

script标签写在</body>上面

拓展:

alert(‘你好,js’)页面弹出警告对话框

JaveScript输入输出语法

1、输出语法:

document.write(’ 要输出的内容’);

向body内输出内容

如果输出的内容写的是标签,也会被解析成网页元素

alert(‘要输出的内容’);

页面弹出警告对话框

console.log(‘控制台打印’);

控制台输出语法,程序员调试使用

2、输入语句:

prompt(‘您今年多大了’)

Javascript变量

1、变量:

-白话:

变量就是一个装东西的盒子。

-通俗:

变量是计算机中用来存储数据的“容器”,它可以让计算机变得有记忆。

-注意:

变量不是数据本身,它们仅仅是一个用于存储数据值的容器。可以理解为是一个个用来装东西的纸箱子

变量基本使用

1、声明变量:

要想使用变量,首先需要创建变量(专业说法:声明变量)

语法:

let : 变量名

1、声明变量有两部分构成:声明关键字、变量名(标识)

2、let即关键字(let:允许、许可、让、要),所谓关键字是系统提供的专门用来声明(定义)变量的词语

2、变量赋值:

定义了一个变量后,你就能够初始化它(赋值)。在变量名之后跟上一个"=",然后是数值。

3、更新变量

变量赋值后,还可以通过简单地给它一个不同的值来更新它。

变量的初始化:

let age=18

console.log(age)

4、声明多个变量

变量赋值后,还可以通过简单地给它一个不同的值来更新它

变量的本质

内存:计算机中存储数据的地方,相当于一个空间

变量:是程序在内存中申请的一块用来存放数据的小空间

变量命名规则与规范

规则:必须遵守,不遵守报错

规范:建议,不遵守不会报错,但不符合业内通识

1、规则:

-不能用关键字

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

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

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

2、规范:

起名要有意义

遵守小驼峰命名法

第一个单词首字母小写,后面每个单词首字母大写。例:userName

let和var区别:

let为了解决var的一些问题

var声明:

1、可以先使用在声明(不合理)

2、var声明过的变量可以重复声明(不合理)

3、比如变量提升、全局变量、没有块级作用域等等

结论:

以后声明变量我们统一使用let

数据类型使用

数组:

(Array)是一种可以按顺序保存多个数据

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

-计算机中的编号从0开始,所以小明的编号为0,小刚编号为1,以此类推

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

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

2、取值语法

-通过下标取数据

-取出来是什么类型的,就根据这种类型特点来访问

数据类型:

为什么要给数据分类?

1、更加充分和高效的利用内存

2、也更加方便程序员使用数据

JS数据类型整体分为两大类:

1、基本数据类型:

number数字型

string字符串型

boolean布尔型

undefined未定义型

null空类型

2、引用数据类型

object对象

function函数

array数组

可以是整数、小数、正数、负数

JavaScript中的正数、负数、小数等,统一称为——数字类型

注意事项:

1、JS是弱数据类型,变量到底属于哪种类型,只有赋值之后,我们才能确认

2、Java是强数据类型,例如 int a = 3 必须是整数

字符串类型(sring)

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

注意事项:

1、无论单引号或是双引号必须成对使用

2、单引号/双引号可以互相嵌套,但是不可以自己嵌套自己(口诀:外双内单,或者外单内双

3、必要时可以使用转义符\,输出单引号或双引号

模板字符串

1、作用:

拼接字符串和变量

在没有它之前,要拼接变量比较麻烦

document.write('大家好,我叫' + name + ',今年' + age + '岁')

2、符号

``

在英文输入模式下按键盘的tab键上方那个键(1左边那个键)

内容拼接变量时,用${}包住变量

document.write(`大家好,我叫${name},今年${age}岁`)

数据类型—布尔型

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

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

数据类型—未定义类型

只有一个值undefined

什么情况出现未定义类型?

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

工作中的使用场景:

我们开发中经常声明一个变量,等待传送过来的数据。

如果我们不知道这个数据是否传递过来,此时我们可以通过检测这个变量是不是undefined,就判断用户是否有数据传递过来。

null表示值为空

let obj = null

null 和 undefined区别

1、undefined表示没有赋值

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

null开发中的使用场景:

官方解释:

把null作为尚未创建的对象

大白话:

将来有个变量里面存放的是一个对象,但是对象还没创建好,可以先给个null

检测数据类型

1、控制台输出语句:

控制台语句经常用于测试结果来使用

可以看出数字型和布尔型颜色为蓝色,字符串和undefined颜色为灰色

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

let age = 18
let umane = '刘德华'
let flag = false
let buy 
console.log(age)    // number
console.log(uname)  // string 
console.log(flag)   // boolean
console.log(buy)    // undefind

类型转换

Javascript是弱数据类型:

Javascript也不知道变量到底属于哪种数据类型,只有赋值了才清除。

坑:

使用表单、prompt获取过来的数据默认是字符串类型的,此时就不能直接简单的进行佳发运算

console.log('10000'+‘2000)  //  输出结果  100002000

此时需要转换变量的数据类型:

通俗来说:

就是把一种数据类型的变量转换成我们需要的数据类型。

隐式转换:

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

规则:

1、+号两遍只要有一个是字符串,都会把另外一个转成字符串

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

缺点:

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

小技巧:

+号作为正号解析可以转换成Number

<script>
        let num = prompt('请输入一个数字')
        console.log(num,typeof num)
        // 内部悄悄的把18转换成了字符串的'18'
        console.log('pink老师'+18)  // pink老师18
        console.log(10+'10')  // 1010
        // - * / 把字符串的'10'转换成数字型10
        console.log(10-'10') // 0
        // 小技巧
        let num = '10'
        console.log(num)
        console.log(+num)
        // console.log(-num)
        console.log(10 + +'10') ; // 20
</script>

练习:

<script>
      console.log(11 + 11)          // 22
      console.log('11' + 11)        // 1111
      console.log(11 - 11)          // 0
      console.log('11' - 11)        // 0
      console.log(1 * 1)            // 1
      console.log('1' * 1)          // 1
      console.log(typeof '123')     // string
      console.log(typeof + '123')   // number
      console.log(+'11' + 11)       // 22 
</script>

显式转换:

编写程序时过度依靠系统内部的隐式转换是不严谨的,因为隐式转换规律并不清晰,大多是靠经验总结的规律。为了避免因隐式转换带来的问题,通常根逻辑需要对数据进行显示转换呢

概念:

自己写代码告诉系统该转换成什么类型

转换为数字型

1、Number(数据)

转成数字类型

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

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

2、paresInt(数据)

只保留整数

3、parsFloat(数据)

可以保留小数

<script>
      
      console.log(Number('10'))          //10
      console.log(parseInt('10'))        //10
      console.log(parseInt('10.111'))    //10
      console.log(parseFloat('10.999'))  //10.999
      // 区别:
      // 1、Number()只能放数字类型的字符,不能放abc这样的
      // 否则返回额是NaN  not a number
      console.log(Number('10.01abc'))  //NaN
      // parseFloat()经常用于过滤单位
      console.log(parseFloat('10.01abc'))  // 10.01
      
</script>

概念:

自己写代码告诉系统该转成什么类型

转换为字符型:

1、String(数据)

2、变量.toString ( 进制)

案例:

分析:

1、提示age变量没有定义过

2、很可能age变量没有声明和赋值

3、或者我们输出变量名和声明的变量不一致引起的

分析:

1、提示“age”已经声明

2、很大概率是因为使用let重复声明了一个变量

3、注意let变量不允许多次声明同一个变量

分析:

1、提示参数少了)

2、很大概率是小括号不匹配,掉了一半

Javascript操作符

运算符

算术运算符

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

1、+ :求和

2、- :求差

3、* :求积

4、/ : 求商

5、% :取模(取余数)

开发中经常作为某个数字是否被整除

同时使用多个运算符编写程序时,会按着某种顺序先后执行,我们称为优先级

JavaScript中优先级越高越先被执行,优先级相同时以书从左向右执行

1、乘、除、取余优先级相同

2、加、减优先级相同

3、乘、除、取余优先级大于加、减

4、使用()可以提升优先级

5、总结:先乘除后加减,有括号先算括号里面的~~~

赋值运算符

对变量进行赋值的运算符

已经学过的赋值运算符: = 将等号右边的值赋予给左边,要求左边必须是一个容器

其他赋值运算符:

1、+=

2、-=

3、*=

4、/=

5、%=

我们以+=赋值运算符来举例

1、以前我们让一个变量1如何做的?

<script>
      let num = 1
      num = num + 1
      console.log(num)  // 结果是2
</script>
2、现在我们有一个简单的写法啦~~~

<script>
      let num = 1
      num += 1
      console.log(num)  // 结果是2
</script>

一元运算符

根据所需表达的个数,分为一元运算符、二元运算符、三元运算符玉

二元运算符:

例:

let num = 10 + 20

一元运算符:

例:正负号

我们以前让一个变量每次+1,以前我们做的呢?

let num = 1
num = num + 1
let num = 1
num += 1

更简便的写法:

自增:

符号:++

作用:让变量的值+1

自减:

符号:--

作用:让变量的值-1

使用场景:

经常用于计数来使用。比如进行10次操作,用它来计算进行了多少次了?

自增运算符的用法:

前置自增:

let num = 1
++num        // 让num的值加1变2
let num = 1
num++      // 让num的值加1变2

1、每执行1次,当前变量数值加1

2、其作用相当于num +=1

前置自增和后置自增如果参与运算就有区别:(难点)

前置自增:

先自加再使用(记忆口诀:++在前 先加)

// 前置自增
   let i = 1
​
// 先自加再使用
// console.log(++i + 2)  // 4
// 后置自增
   let i = 1
// 先使用后自加
    console.log(i++ + 2)  // 3

后置自增:

先使用再自加(记忆口诀:++在后 后加)

let i = 1
console.log(i++ + 2)  // 结果是3
//注意:此时的i是1
//先和2相加,先运算输出完毕后,i再自加是2

自增运算符的用法:

1、前置自增和后置自增独立使用时二者并没有差别

2、一般开发中我们都是独立使用

3、后面i++后置自增会使用相对较多

比较运算符

>:左边是否大于右边

<:左边是否小于右边

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

<=:左边是否小于或等于右边

==:左右两边是否相等

===:左右两边是否类型和值都相等

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

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

<script>
     console.log(3 > 5 )  // false
    console.log(5 >= 5)  //true
    // console.log(5 == 5)
    // == 只要值一样就是true ,不管数据类型
    console.log(5 = '5')
    console.log(5 == 'pink')
    // === 以后判断要用 === 开发常用  要求值和数据类型都一样
    console.log(5 === 5)
    console.log(5 === '5')
</script>

比较运算符的细节

一、字符串比较,是比较的字符对应的ASCII码

1、从左往右依次比较

2、如果第一位一样再比较第二位,依次类推

3、比较较的少,了解即可

二、NaN不等于任何值,包括它本身

三、尽量不要比较小数,因为小数有精度问题

四、不同类型之间比较会发生隐式转换

1、最终把数据隐式转换转成number类型再比较

2、所以开发中,如果进行准确的比较我们更喜欢===或者!==

逻辑运算符

符号名称日常读法特点口诀
&&逻辑与并且符号两边都为true,结果才为true一假则假
||逻辑或或者符号两边有一个true就为true一真则真
!逻辑非取反true变false,false变true真变假,假变真

逻辑运算符里的短路

符号短路条件
&&左边为false就短路
||左边为true就短路

false 的五个值 : 数字0 、 ''、 undefined、 null

Javascript流程控制及案例

表达式:

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

x = 7
3 + 4
num++

表达式和语句的区别:

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

表达式 3+4

语句 alert()弹出对话框

其实某些情况,也可以把表达式理解为语句,因为它是在计算结果,也是做事

程序三大流程控制语句

1、顺序结构

2、分支结构

3、循环结构

分支语句:

1、可以让我们有选择性的执行想要的代码

2、分支语句包含:

、if分支语句

、三元运算符

、switch语句

if语句:

1、if语句有三种使用:单分支、双分支、多分支

2、单分支使用语法:

if (条件) {
     满足条件要执行的代码
}

括号内的条件为true时,进入大括号里执行代码

小括号内的结果若不是布尔类型时,会发生隐式转换转为布尔类型

双分支 if语法

if (条件) {
    满足条件要执行的代码
} else {
    不满足条件执行的代码
}

多分支if语法

例:

// 1、用户输入时间,等我们学api 自动获取时间
let time = prompt('请输入小时:')
// 2、多分支判断
if (time < 12) {
              document.write('上午好,好好工作')
 } else if (time < 18 ) {
              document.write('下午好,好好工作')
} else if (time < 20 ) {
              document.write('夜深了,头发还有吗?')
}

三元运算符

1、其实是比if双分支更简单的写法,有时候也叫做三元表达式

2、符号:?与:配合使用

3、语法:

条件?满足条件执行的代码:不满足条件执行的代码

4、一般用来取值

例:

<script>
if (3 < 5) {
       alert('第一个')
} else {
          alert('第二个')
}
  
 3 > 5 ? alert('第一个') : alert('第二个')
 </script>

案例:

判断2个数的最大值

需求:用户输入2个数,控制台输出最大的值

let num1 = 40
let num2 = 30
// num1 > num2 ? console.log(num1) : console.log(num2)
​
let re = num1 > num2 ? num1 : num2
console.log(re)
//

断点

断点调试

作用:

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

浏览器打开调试界面

1、按f12打开开发者工具

2、点到sources一栏

3、选择代码文件

断点:

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

while循环

循环:

重复执行某段代码,而while:在....期间

while循环语法:

while (循环条件) {
       要重复执行的代码(循环体)
}

释义:

1、跟if语句很像,都满足小括号里的条件为true才会进入执行代码

2、while大括号里代码执行完毕后不会跳出,而是继续回到小括号里判断 条件是否满足,若满足又执行大括号里的代码,然后再回到小括号判断条件,直到括号内条件不满足,即跳出

while循环注意事项:

循环的本质就是以某个变量为起始值,然后不断产生变化量,慢慢靠近终止条件的过程。

循环需要具备三要素:

1、变量起始值

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

3、变量变化量(用自增或者自减)

案例:1~100

<script>
      //1、输出1~100个数字
      //起始值
      let i = 1
      // 终止条件
      while (i <=100) {
            document.write(' <p>是:${i} </p>') 
          //变量变化
          i++
      }
    
    
       //2、计算1~100 的累加和 1+2+3....+100
         let j = 1
         let sum = 0
         while (j <= 100) {
             // sum = sum +j
             sum += j
             j++
         }
         console.log(sum)  //5050
    
    
       //3、求1~100之间的偶数累加和
         let i = 1
         let sum =0
         while (i <=100) {
             if (i % 2 === 0){
                 // 此时 i 一定是偶数
                 sum = sum + i
             }
             i++
         }
         console.log(sum) 
        //3、求1~100之间的奇数累加和
         let i = 1
         let sum =0
         while (i <=100) {
             if (i % 2 !== 0){
                 // 此时 i 一定是偶数
                 sum = sum + i
             }
             i++
         }
         console.log(sum) 
    
</script>

循环退出:

循环结束:

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

2、break:跳出所在循环

案例:

页面弹出对话框,'你爱我吗',如果输入'爱',则结束。否则一直弹出对话框

分析:

1、循环条件永远为真,一直弹出对话框

2、循环的时候,重新让用户输入

3、如果用户输入:爱,则退出循环(break)

<script>
     while (true) {
         let str = prompt('如果我是DJ,你还爱我吗?')
         if (str === '爱') {
             alert('我也爱你啊~~')
             break
         }
     }
</script>

简易ATM取款机

1、循环的时候,需要反复提示输入框,所以提示框写到循环里面

2、退出的调价是用户输入了4,如果是4,则结束循环,不在弹窗

3、提前准备一个金额预先存储一个数额

4、取钱则是减法操作,存钱则是加法操作,查看余额则是直接显示金额

5、输入不同的值,可以使用switch来执行不同的操作

<script>
      // 1、不断的弹出对话框
      // 2、金额的变量
      let money = 100;
      while (true) {
        let str = prompt(`请您选择操作:
          1、存钱
          2、取钱
          3、查看余额
          4、退出
          `);
        // 3、除非输入的是4 则退出循环 break
        if (str === "4") {
          break;
        }
        // 4、switch加减操作
        switch (str) {
          case "1":
            let cun = +prompt("请您输入存钱的金额:");
            // money = money + cun
            money += cun;
            break;
          case "2":
            let qu = +prompt("请您输入取钱的金额:");
            // money = money + qu
            money -= qu;
            break;
          case "3":
            // let  = prompt(`请您卡上的金额为:`)
            // money = money + cun
            // money += cun
            alert(`您卡上的余额是${money}元`);
            break;
        }
      }
    </script>

for循环语法

语法:

1、重复执行代码

2、好处:把声明起始值、循环条件、变化值写到一起,让人一目了然

for (声明记录循环次数的变量;循环条件;变化值) {
      循环体
}

循环练习

<script>
// 1、利用for循环输出多少岁
for (let i = 1; i <=100; i++) {
        document.write(`我今年${i}岁了 <br>`)
}
​
​
// 2、求1~100偶数的累加和
let sum = 0 
for (let i = 1; i <= 100; i++) {
           // 筛选偶数
           if(i % 2 === 0) {
          //sum = sum + i
            sum += i
           }
       }
       document.write(sum) 
​
// 3、页面打印5个小星星
for (let i = 1; i <= 5; i++) {
              document.write('☆')
}
​
// 4、数组['马超'、 '赵云'、 '张飞'、 '关羽'、 '黄忠'] 依次打印出来
let arr = ['马超', '赵云', '张飞', '关羽', '黄忠']
// console.log(arr)
// document.write(arr)
// document.write(arr[0])
// document.write(arr[1])
// document.write(arr[2])
// document.write(arr[3])
// document.write(arr[4])
// 利用循环的方式
// arr.length 数组的长度 通过他可以告诉我们数组里面有几个元素
// 可以自由增加数组中的数据
// for (let i = 0; i <=4; i++){
   for (let i = 0; i <= arr.length - 1; i++){
    // docuent.write(arr[i])
    docuent.write(`名字是:${arr[i]} <br>`)
}
</script>

for循环的最大价值:循环数组

总结:

1、for循环和while循环有什么区别呢

— 当如果明确了循环的次数的时候推荐使用for循环

— 当不明确循环的次数的时候推荐使用while循环

循环结束:

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

— break:跳出所在的循环

<script>
    for (let i = 1; i < 6; i++){
        if (i === 2) {
            // continue  // 1345 继续 退出本次循环,继续下一次循环
            break        // 结束循环 退出整个循环
        }
        document.write(i)
    }
</script>

for循环嵌套

for (外部声明记录循环次数的变量;循环条件;变化值) {
  for (内部声明记录循环次数的变量;循环条件;变化值) {
    循环体
    }
}

一个循环里再套一个循环,一般用在for循环里

练习案例

<script>
     // 循环嵌套
    for (let i = 1; i < 6;i++){
        for (let j = 1; j < 6; j++) {
            document.write('
        for (let j = 1; j < 6; j++) {
            document.write('星')
        }
    }
        // 5*5=25 先执行i = 1 ,再在j循环里重复5次,往复五次就是五乘五
    
        
// 计算:加入每天记住5个单词,3天后一共能记住多少单词?
// 拆解:
// 1、第一天:5个单词
// 2、第二天:5个单词
// 3、第三天:5个单词
        // 1、外面的循环 记录第n天
        for ( let i = 1; i < 4; i++) {
            // 2、里层的循环记录多少个单词
            for ( let j = 1; j < 6; j++ ) {
                document.write(`记住第${j}个单词 <br>`)
            }
        }
        
// 打印五行五列的小星星
        // 外层行  里层每行几个小星星
        for (let i = 1; i < 6; i++) {
            for ( let j = 1; j < 6; j++){
                document.write('☆')
            }
            document.write('<br>')
        }
   
​
</script>

<script>
      // 打印倒三角星星
      // 1、利用双重for循环来做
      // 2、外层循环控制打印行,内层循环控制每行打印几个(列)
      // 3、内层循环的个数跟第几行是一一对应的
     // 外层打印几行
      for ( let i = 1; i < 6; i++) {
          // 里层打印几个星星
          for ( let j = 1; j <= i; j++) {
              document.write('☆')
          }
          document.write('<br>')
      }    
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值