JavaScript基础知识点

146 阅读5分钟

JavaScript

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

组成

1648110293885.png ECMAScript:

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

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

Web APIs(接口):

  • DOM操作文档,比如对页面元素进行移动、大小、添加删除等操作
  • BOM操作浏览器,比如页面弹窗,检测窗口宽度、存储数据到浏览器
  • 注意DOM属于BOM

作用

  • 网页特效(监听用户的一些行为让网页作出对应的反馈)
  • 表单验证(针对表单数据的合法性进行判断)
  • 数据交互(获取后台的数据,渲染到前端)
  • 服务端编程(node.js)

切换按钮案例

<!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <style>
 *{
     margin: 0;
     padding: 0;
     box-sizing: border-box;
 }
 </style>
 </head>
 <body>
 <button>点击</button>
 </body>
 <script>
 // 更换背景按钮
 document.querySelector("button").onclick=function(){
 document.body.style.backgroundColor="black";
 }
 </script>
 </html>

添加JavaScript方式

1648168963567.png

1、内部JavaScript

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

规范Script标签写在上边

<body>
    <script>
    alert('嗨!!!')
    </script>
 </body>

注意事项

我们将

如果先加载的 JavaScript 期望修改其下方的 HTML,那么它可能由于 HTML 尚未被加载而失效。

因此,将 JavaScript 代码放在 HTML页面的底部附近通常是最好的策略。

2、外部JavaScript

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

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

<body>
  <script src="js/flexible.js"></script>
  </body>

注意事项

  • script标签中间无需写代码,否则会被忽略!
  • 外部javaScript会使代码更加有序,更易于复用,且没有了脚本的混合,html也会更加易读。

3、内敛JavaScript

代码写在标签内部

语法:

    <body>
    <button onclick="alter('逗你玩~')">点击我月薪过万</button>
    </body>

注意事项

此处作为了解即可,但是后面vue框架会用这种模式

注释

  1. 单行注释 符号:// 快捷键:ctrl+/
  2. 块注释 符号:/* */ 快捷键:shift+alt+A

变量

1、声明变量

语法:

let 变量名
let age;

``

  • 声明变量有两部分构成:声明关键字、变量名(标识)
  • let 即关键字 (let: 允许、许可、让、要),所谓关键字是系统提供的专门用来声明(定义)变量的词语

2、变量赋值

语法

<script>
let username='张三';
console.log(username);

let age=18;
console.log(age);

let height=160,weight=110;
console.log(height+weight);

</script>

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

3、更新变量

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

1648173324859.png

注意:let不允许多次声明一个变量

4、声明多个变量

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

let one=10,two=20,three;

交换变量案例

<script>
let one=10,two=20,three;
three=one;
one=two;
two=three;

console.log('one'+'='+one);
console.log('two'+'='+two);

</script>

变量命名规则与规范

1648176556845.png

1648176565949.png

变量数组

数据类型

  1. number数字型

    即我们数学中学习到的数字,可以是整数、小数、正数、负数。

let age=18

注意事项

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

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

2. ### string字符串型

通过单引号('')、双引号("")或反引号(`)包裹的数据都叫字符串(推荐单引号)

let username='张三';
 console.log(username);
document.write(username+' ');

字符串拼接

let UserName=prompt('请输入名字'),UserAge=prompt('请输入年龄'),UserSex=prompt('请输入性别')
document.write(`大家好,我叫${UserName},年龄${UserAge},性别${UserSex}<br>`)

注意事项:

  • 无论单引号或是双引号必须成对使用
  • 单引号/双引号可以互相嵌套,但是不以自已嵌套自已(口诀:外双内单,或者外单内双)
  • 必要时可以使用转义符 \,输出单引号或双引号
  1. boolean布尔型

    表示肯定或否定时在计算机中对应的是布尔类型数据。 它有两个固定的值 true 和 false,表示肯定的数据用 true(真),表示否定的数据用 false(假)。

let isCool=true
isCool=false    
  1. undefine未定义型

( 只有一个值 undefined )

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

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

let age
document.write(age) //undefind

工作中的使用场景:

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

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

1648304512704.png

  1. null空类型

    null 表示 值为 空

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

null 和 undefined 区别:

  1. undefined 表示没有赋值
  2. null 表示赋值了,但是内容为空

类型转换

JavaScript是弱数据类型: JavaScript也不知道变量到底属于那种数据类型,只有赋值了才清楚。

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

let numone=prompt('请输入第一个数值'),numtwo=prompt('请输入第二个数值'),numthree
numthree=numone+numtwo
console.log(numthree,typeof numthree) //100200 string

隐式转换

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

方法

    • 号两边只要有一个是字符串,都会把另外一个转成字符串
  • 除了+以外的算术运算符 比如 - * / 等都会把数据转成数字类型

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

<script>
console.log(11+11) //22
console.log('11'+11) //1111
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>

显式转换

转换为数字型

  • Number(数据)

    • 转换数据类型
    • 如果字符串内容里有非数字,转换失败时结果为 NaN(Not a Number)即不是一个数字
    • NaN也是number类型的数据
let str='132px'
console.log(parseInt(str))//打印数字型 ‘132’
let str1=123+''
let str2=Number(str1)
console.log(typeof str1)//转换前是字符串型
console.log(typeof str2)//转换后是数字型
  • parsenInt(数据)

    • 只保留整数
let numone=prompt('请输入第一个值'),numtwo=prompt('请输入第二个数值'),numthree
numthree=parseInt(numone)+parseInt(numtwo)
console.log(numthree)
let str='132px'
console.log(parseInt(str))//打印数字型 ‘132’
  • parseFloat(数据)

    • 可以保留小数
let numone=prompt('请输入第一个值'),numtwo=prompt('请输入第二个数值'),numthree
numthree=parseFloat(numone)+parseFloat(numtwo)
console.log(numthree)

转换为字符型

String(数据)

let num1=123
let str=String(num1)//转换方法一
console.log(typeof num1)//转换前是数字型
console.log(typeof str)//转换后是字符串型

变量.toString(进制)

let num1=12
console.log(num1.toString())//打印出 字符串‘12
let num1=123
let str =num1.toString()//转换方法二
console.log(typeof num1)//转换前是数字型
console.log(typeof str)//转换后是字符串型

订单案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
    *{
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }
    table{
        text-align: center;
        border-collapse: collapse;
    }
    </style>
</head>
<body>
    
</body>
<script>

  let goodsName="红米手机",price=1999,count=prompt("购买数量"),total,address=prompt("地址")

 total=parseInt(price)*parseInt(count)
 document.write(`
<table border="1" align="center">
    
    <caption>
        <h2>订单付款确认页面</h2>
    </caption>
<thead>
    <tr>
          <th>商品名称</th>
            <th>商品价格</th>
           <th>商品数量</th>
             <th>总价</th>
            <th>收货地址</th>
    </tr>
 </thead>
   <tbody>

    
   <tr>
        <td>${goodsName}</td>
       <td>${price}</td>
        <td>${count}</td>
       <td>${total}</td>
        <td>${address}</td>
    </tr>
</tbody>
</table>`)
</script>
</html>

运算符

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

  • +:求和
  • -:求差
  • *:求积
  • /:求商
  • %:取模(取余数)
console.log(1+1) //2
console.log(1*1) //1
console.log(3-2) //1
console.log(6/3) //2
console.log(10%6) //求余4

运算优先级

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

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

  • 加、减优先级相同

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

  • 使用 () 可以提升优先级

    ( 总结: 先乘除后加减,有括号先算括号里面的)

console.log(1+2*3) //7
console.log(10-8/2) //6
console.log(2%5+4*2)  //10

运算符案例

1648362829886.png

赋值运算符

定义:将等号右边的值赋予给左边, 要求左边必须是一个容器

  • +=
  • -=
  • *=
  • /=
  • %=
let num1=1
num1 +=1
console.log(num1)

let num1=1
num1 -=1
console.log(num1)

let num1=1
num1 *=1
console.log(num1)

let num1=1
num1 /=1
console.log(num1)

let num1=1
num1 %=1
console.log(num1)

一元运算符

  • 自增

    • 符号:++
    • 作用:让变量的值 +1
  • 自减

    • 符号:--
    • 作用:让变量的值 -1

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

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

// 前置自增
let a=1
console.log(++a + 2)//结果为4
console.log(a)//结果为2
// i先自加1,变成2之后,在和后面的2相加

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

//后置自增
let i=1
console.log(i++ + 2)// 结果为3
console.log(i)//自加 结果为2
//此时i是1  先和2相加 输出完毕后,i再自加++  结果为2

案例

let i=1
console.log(i++ + ++i + i)//7
//第一部分 先打印i=1 , 然后自加i=2  
//第二部分 i=2 --> ++i=3
//第三部分 i=3


let k=5
console.log(--k)//4
console.log(k--)//先打印  4
console.log(k)//然后自减 打印为 3

比较运算符


> : 左边是否大于右边
<: 左边是否小于右边
 >=: 左边是否大于或等于右边
<=: 左边是否小于或等于右边
==: 左右两边是否相等
===: 左右两边是否类型和值都相等
!==: 左右两边是否不全等
比较结果为boolean类型,即只会得到truefalse

console.log(3<=3) //true
console.log(3==2) //false
console.log(3=='3') //true
console.log(3==='3')//false
console.log(3===3)//true
console.log(3 !=='3') //true
console.log('A'>'B')//false 先把字符串 转换成数字 然后才能做大小比较
console.log('你'>'我')//false 同上
console.log(NaN===NaN)//false NaN=A || NaN=B 代码不一致
console.log(0.4+0.2==0.6)//false js处理小数有问题 需要补充精度问题
console.log(4>Number('3'))//true

= 和 == 和 === 怎么区别?

  • = 是赋值
  • == 是判断 只要求值相等,不要求数据类型一样即可返回true
  • === 是全等 要求值和数据类型都一样返回的才是true (开发常用)

(返回结果: true 或者 false )

逻辑运算符

1648353629576.png

let money=1
console.log(money===1||money===0) //true

let money1=1
console.log(money===1 && money===0) //false

let man=1
console.log(!man)//false

逻辑运算符里的短路 ( 短路:只存在于 && 和 || 中,当满足一定条件会让右边代码不执行 )

console.log(2>10&&1<3&&3>1&&9>5)//false

console.log(2>10||1<3)//true


//或运算 左边为false(不满足)就短路 
let rain=true
rain||console.log('去玩')// false

let rain=false
rain||console.log('去玩')// true '去玩'


//与运算 左边为ture(满足)就短路
let rain=true
rain&&console.log('去玩')// ture '去玩'

let rain=false
rain&&console.log('去玩')// false 


//&&:一假全假  ||:一真则真

1648354667026.png