Javascript基础(1)

JavaScript 基础

1.1JS的组成

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

WEBAPIs:

DOM: 操作文档,比如:对页面元素进行移动,大小,提娜佳删除等操作

BOM:操作浏览器,比如:页面弹窗,存储数据大浏览器等

1.2JavaScript输入输出语法

  • 输出语法

语法一

document.write('要出的内容')//向body内输出内容
doucument.write('<h1>我是标题标签</h1>')//可以输出标签

语法二

alert('要弹出的内容')//页面弹出警告对话框

语法三

console.log('看看对不不对')//控制台输出语法,程序员调试使用

小练习

<!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>document.write('你是狗吧')
        console.log('zhehshi魔法')
        alert('hapihapi')
    </script>

</body>

</html>
  • 输入语法

语法一

prompt('请输入你的年龄:')//显示一个对话框,其中包含一条文字信息,用来提示用户输入文字

2.1变量

变量就是容器,可以用来存储数据

2.2变量的基本使用

2.2.1变量的初始化

声明变量,变量名称,变量赋值

let声名的变量不允许多次声名

let age = 18
let uname = 'pink老师'
console.log(num)
console.log(uname)

2.2.2变量的更新

let age = 18, uname = 'pink老师'
age = 19
//此处不能写let age = 19 let声名的变量不允许多次声名
uname = 'orange老师'
console.log(num, uname)

2.3变量的本质

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

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

2.4变量命名规则与规范

规则(必须遵守):

  • 不能用关键字if,var,let,for等
  • 只能用下划线,字母,数字,$组成且数字不能开头
  • 字母严格区分大小写,如Age与age是不同变量

规范(最好遵守):

  • 起名要有意义
  • 遵守小驼峰命名法:第一个单词首字母小写,后面每个单词首字母大写例userName

2.5数组(Array)

JS的数组跟c语言的数组不一样在c中一个数组中的元素都需要是同一个数据类型,JS中随便

将一组数据存储到一个变量名称

let arr = [10,20,30,40]
//let arr = ['刘德华','张学友','黎明','郭富城']
console.log(arr[i])//其中i是索引号或下标号
console.log(arr.length)//数组长度=索引号+1

2.6常量

  • 概念使用const声名的变量称为常量
  • 当某个变量永远不会改变的时候,就可以用const来声明,而不是let
  • 命名规范和变量一样
  • 使用
const G = 9.8
console.log(G)
  • 注意:常量不允许重新赋值,生命的时候必须初始化
  • 小技巧:不需要重新赋值的数据使用const
letvarconst
现在实际开发变量声明方式(局部变量用完就死翘翘了)以前声名变量方式,会有很多问题类似于let,但值无法被修改

2.7数据类型

数据类型分为两类:基本数据类型和引用数据类型

基本数据类型:

  1. number数字型
  2. 默认值:0

三个特数量infinity,代表无穷大,打鱼人和数量

​ -infinity,代表无穷大,打鱼人和数量

​ NaN:代表一个非数值

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

算术运算符中先乘除取余(从左到右)再加减

  1. string字符串型 :默认值:’ ’

通过单引号(‘’),双引号(“”)或反引号(``)漂号都是字符串类型

使用’+'可以实现字符串的拼接

console.log('pink'+'老师')

模板字符串

        let uname = prompt('您的姓名:')
        let age = prompt('您的年龄:')
        document.write(`大家好,我叫${uname},今年${age}岁了`)
  1. boolean布尔型默认值:false

只有两个固定的值true和false

let iStudy = true
console.log(iStudy)
  1. undefined未定义型 默认值:undefined

只有一个值,只声名变量不赋值的变量为未定义型

如果检测变量为undefined说明值还未传过来

  1. null空类型

不确定存什么数据类型时使用

表示已经赋值,但为空,undefined没有赋值.

将来有个变量存放的是一个对象,但对象还没创建号,先给个null

引用数据类型:

  • object对象

检测数据类型

通过typeof关键字检测数据类型,typeof可以返回被检测的数据类型

let age = 18 ,uname = '刘德华' ,flag = true
console.log(typeof uname ,age)//两种写法
console.log(typeof(flag))//两种写法

2.8类型转换

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

2.8.1隐式转换为数字型

某些运算再执行时系统会自动将数据类型进行转换,这种转换成为隐式转换

规则:

  • +号两边只要有一个是字符串,就会把另一个转化为字符串
  • 除了+号以外的运算符如-*/等都会把数据类型转换为数字类型
  • +'123’可以将字符串类型转化为数字类型

小测验

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

2.8.2显式转换为数字型

自己强制转换

  • Number(数据) 转换成数字型

  • parseInt(数据) 只保留整数

  • parseFloat(数据) 可以保留小数

  • prompt(1 + ‘’)//在数字后面加上空的字符串能转化为字符串型

比较两个浮点数(浮点数一般都是小数点后14位数),所以比较多时候

console.log(parseFloat('12px'))//12不是12.0
console.log(parseFloat('12.34px'))//12.34
console.log(parseFloat('12.69px'))//12.69
console.log(parseFloat('abc12px'))//NaN 数字前面不能有字符串

2.8.3转换为字符串型

  • num.toString
  • string()

测试

let num1 = +prompt('请输入第一个数字:')
let num2 = +prompt('请输入第二个数字:')
alert(num1 + num2)

综合案例

<!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>
<style>
    h2 {
        text-align: center;
    }

    table {
        border-collapse: collapse;
        height: 100px;
    }

    table,
    th,
    tr,
    td {
        margin: 0 auto;
        border: 1px solid #000;
    }

    td,
    th {
        padding: 0 30px;
        text-align: center;

    }
</style>

<body>
    <h2>订单确认</h2>



    <script>
        let num = +prompt('请输入商品数量:')
        let price = +prompt('请输入商品价格:')
        let address = prompt('请输入收货地址:')
        let total = num * price
        document.write(`    <table>
        <tr>
            <th>商品名称</th>
            <th>商品价格</th>
            <th>商品数量</th>
            <th>总价</th>
            <th>收货地址</th>
        </tr>
        <tr>
            <td>小米手机青春版PLUS</td>
            <td>${price}元</td>
            <td>${num}</td>
            <td>${total}元</td>
            <td>${address}</td>
        </tr>
    </table>`)

    </script>

</body>

</html>

3.1运算符

  • 赋值运算符

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

+= -= *= /=

  • 一元运算符

+'123’中的+

自增一元运算符 ++

let i = 1
console.log(i++ + ++i + i)//7
  • 比较运算符

    比较字符对应的ASCII码

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

!==:不全等

console.log(2 == '2')//true 其中有隐式转换
console.log(2 === '2')//false 严格判断 推荐
console.log(NaN === NaN)//false 严格判断 
  • 逻辑运算符

与或非

运算符的优先级

优先级运算符包含
1小括号()
2一元运算符++ – !
3算术运算符先* % /再+ -
4关系运算符> >= < <=
5相等运算符== != === 和 ! ==
6逻辑运算符先&&后||
7赋值运算符=
8逗号运算符,

一元运算符中逻辑非优先级很高

逻辑与比逻辑或优先级高

3.2语句

  • 表达式和语句

表达式:是可以被求值的代码,有值

语句:是一段可以被执行的代码,不一定有值

  • 分支语句

if分支

三元运算符分支

使用场景:比if双分支更简单发写法,可以使用三元表达式

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

一般用来取值

let sum = 3 < 5 ? 3 : 5
console.log(sum)

数字补0案例

        let num = prompt('请输入:')
        num = num < 10 ? 0 + num : num
        alert(num)

switch语句分支

找到跟小括号里面数据全等的case值并执行里面对应的代码

若没有全等===的则执行default里的代码

一般用于等值判断,不用于区间判断

/*switch(数据){
case 值1:
     代码一
	 break//退出switch
case 值2:
	 break//退出switch
default:
	 代码n
	 break//退出switch
}*/

测验

        let num1 = +prompt('请输入第一个数:')
        let num2 = +prompt('请输入第二个数:')
        let y = prompt('请输入要进行的操作符:')
        switch (y) {
            case '+':
                alert(num1 + num2)
                break
            case '-':
                alert(num1 - num2)
                break
            case '*':
                alert(num1 * num2)
                break
            case '/':
                alert(num1 / num2)
                break
            case '%':
                alert(num1 % num2)
                break
            default:
                alert('error')
        }

  • 循环语句

循环退出

break:退出循环

一般用于结果已经找到

continue:退出本次循环,进行下一次循环.上一行加i++

一般用于跳过某一项

测试存钱取钱

 let money = 100
        while (true) {
            let re = +prompt(`
            请您选择操作
            1.存钱
            2.取钱
            3.查看余额
            4.退出
            `)
            if (re === 4) break
            if (re === 1) {
                let cun = +prompt(`请输入要存的金额:`)
                money += cun

            }
            if (re === 2) {
                let qu = prompt(`请输入要取的金额:`)
                money -= qu
            }
            if (re === 3) {
                alert(money)
            }
        }

for循环最大作用就是打印数组

let arr = ['刘德华', '刘晓强', '刘晓庆','刘若英']
for(let i = 0;i < arr.length;i++)
	console.log(arr[i]) 

for循环嵌套

打印5*5星星

        for (let i = 0; i < 5; i++) {
            for (let j = 0; j < 5; j++) {
                document.write('⭐')
            }
            document.write('<br>')
        }

倒三角

        for (let i = 1; i <= 5; i++) {
            for (let j = 1; j <= i; j++) {
                document.write('⭐')
            }
            document.write('<br>')
        }

乘法口诀表

<!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>
    <style>
        span {
            display: inline-block;
            height: 20px;
            width: 90px;
            text-align: center;
            border: 3px solid pink;
            margin: 5px 5px;
            border-radius: 10px;
            box-shadow: 5px 2px #eee;
        }
    </style>
</head>

<body>


    <script>
        for (let i = 1; i <= 9; i++) {
            for (let j = 1; j <= i; j++) {
                document.write(`<span>${j}*${i} = ${i * j}</span>`)
            }
            document.write('<br>')
        }



    </script>

</body>

</html>

3.3数组

求已知数组的和与平均值

        let sum = 0
        let arr = [2, 6, 1, 7, 4]
        for (let i = 0; i < arr.length; i++) {
            sum += arr[i]
        }
        document.write(sum)
        document.write('<br >')
        document.write(sum / arr.length)

求已知数组最大值最小值

    <script>
        let arr = [2, 6, 1, 77, 52, 25, 7]
        let max = arr[0], min = arr[0]
        for (let i = 0; i < arr.length; i++) {
            if (arr[i] > max) max = arr[i]//arr[i] > max ? max= arr[i] : max
            if (arr[i] < min) min = arr[i]//
        }
        document.write(`最大值是${max}<br> 最小值是${min}`)
    </script>

3.3.2操作数组

  1. 查:查询数组数据(访问数组数据)
  2. 改:重新赋值 数组[下标]=新值

用下标直接改就完事了 统一改可以for用循环

增数组添加新的数据

arr.push(新增的内容)

方法将一个或多个元素添加到数组的末尾,并且返回新数组的长度

    <script>
        let arr = ['pink', 'hotpink']
        arr.push('deeppink','lightpink')
        console.log(arr)
        console.log(arr.push('deeppink'))//arr.push()返回值是新数组的长度2+2
    </script> 

arr.unshift(新增的内容)

将一个或者多个元素添加到数组的开头,并且返回新数组的长度

语法同arr.push()

​ 筛选数组中的元素

        let arr = [2, 0, 6, 1, 77, 0, 52, 25, 7]
        let a = []
        for (let i = 0; i < arr.length; i++) {
            if (arr[i] >= 10) a.push(arr[i])
        }
        document.write(a)

删:删除数组中的数据

arr.pop()

删除数组中的最后一个元素,并且返回该元素的值

arr.shift()

删除第一个元素,并且返回删除的值

arr.splice(操作的下标,删除的个数) 可以删除指定的元素

使用场景:随机抽奖,中奖的用户就需要从数组里删除,不允许重复抽奖

		   点击删除按钮,相关数据会从商品数据中删除
        let arr = ['pink', 'deeppink', 'lightpink']
        arr.splice(1, 1)
        console.log(arr)//arr=['pink','lightpink']

3.4综合案例渲染柱形图

<!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>
    <style>
        .box {
            display: flex;
            justify-content: space-around;
            align-items: flex-end;
            text-align: center;
            height: 500px;
            width: 1000px;
            border-bottom: 1px solid #000;
            border-left: 1px solid #000;
            margin: 100px auto 0;
        }

        .box .shuju {
            display: flex;
            flex-direction: column;
            justify-content: space-between;
            background-color: pink;
            width: 50px;
        }

        .box .shuju span {
            margin-top: -20px;
        }

        .box .shuju h5 {
            /* margin-left: -10px; */
            margin-bottom: -20px;
        }
    </style>
</head>



<body>
    <script>
        let arr = []
        for (let i = 1; i <= 4; i++) {
            let num = prompt(`请输入第${i}季度`)
            arr.push(num)
        }
        document.write(`<div class="box"> `)

        for (let i = 0; i < 4; i++) {
            document.write(`<div class="shuju" style="height:${arr[i]}px">
                         <span>${arr[i]}</span>
                         <h5>第${i + 1}季度</h5>
                         </div>`)
        }
        document.write(`</div> `)



    </script>

</body>

</html>

3.5冒泡排序

  //原理  <script>
        let temp
        let arr = [1, 54, 4, 45, 484, 5, 7, 84, 84, 4, 8489, 7489, 4]
        for (let i = 0; i < arr.length - 1; i++) {
            for (let j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j + 1]
                    arr[j + 1] = arr[j]
                    arr[j] = temp
                }
            }
        }
        document.write(arr)
    </script>

实际开发中使用函数

let arr = [2,1,3,5,4]
arr.sort()
document.write(arr)//arr=[1,2,3,4,5]默认升序用函数可实现降序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值