前端js基础

目录

                1.变量及声明方式,常量,数据类型,类型转换,算数运算符,小案例

2.运算符

3.流程控制语句

4.数组

5.函数 

6.对象

7.web APIs

DOM对象

DOM 获取元素对象、修改属性

操作元素内容、属性、样式

定时器-间歇函数

综合案例 

DOM 事件基础 注册事件、tab栏切换

DOM 事件对象、事件委托

DOM 节点操作、节点的增删改查

BOM 操作浏览器 BOM、插件、本地存储

正则表达式、综合案例

小实战


1.变量及声明方式,常量,数据类型,类型转换,算数运算符,小案例

        let uname=prompt('请输入姓名');
        let age=prompt('请输入年龄');
        let gender=prompt('请输入性别');
        document.write(uname+'/'+age+'/'+gender);
        let arr=[10,20,40,50,99,88,77,66];
        let arrs=['刘德华','张学友','黎明','郭富城'];
        document.write(arrs[3]);
        document.write(arrs.length);
        const ggb_value=9.8;
        console.log(ggb_value);

let和var都是申明变量的方式,let更规范

prompt输入框

document.write将数据显示在页面上

console.log控制台输出

const常量

数据类型:

        number数字型:整数,小数,正数,负数

                操作,加减乘除取余,+-*/%,()有优先级,对NaN进行任何操作都为NaN,NaN表示未知结果

        string字符型

                单引号‘’双引号“”反引号’’都为字符串,拼接用+

                console.log('abc"def"');

        boolean布尔型

                ture和false

        undefined未定义型

                声明不赋值,值为undefined

                 传值时为undefined,表明还没有传递

        null空类型

                null表示有赋值,内容为空

        object对象,引用类型

        附带

                检测数据类型

let age=18;

console.log(typeof age);

        类型转换:

                场景:单选框等传值为字符串型,所以要类型转换

                隐式转换:+-*/%都会隐式转换

                                字符串的加法,“”+1,为“1”

                                减法,“1”-1,为0

                                null转换为数字为0

                                undefined数字转换为NaN

                显式转换: number(),ParseInt(),ParseFloat()

        小案例    

<!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>
                h2{
                    text-align: center;
                }
                table{
                    border-collapse: collapse;
                    height: 80px;
                    margin: 0 auto;
                    text-align: center;
                }
                th{
                    padding: 5px 30px;
                }
                /* table,
                th,
                td{
                    border: 1px,solid,#000;
                } */
                
            </style>
</head>
<body>
    <h2>订单确认</h2>
    


    <script>
        let price=prompt('请输入价格')
        let num=prompt('请输入购买数量')
        let address=prompt('请输入地址')
        let tatol=Number(num)*Number(price)
        document.write(`
        <table >
        <tr>
           <th>商品名称</th>
           <th>商品价格</th>
           <th>商品数量</th>
           <th>总价</th>
           <th>收货地址</th>
        </tr>
        <tr>
            <th>小米青春版</th>
            <th>${price}元</th>
            <th>${num}</th>
            <th>${tatol}元</th>
            <th>${address}</th>
         </tr>
    </table>
        `)
    </script>
</body>
</html>

2.运算符

赋值运算符

        = ,+=,-=,/=,*=,%=  对变量进行赋值

一元运算符

        ++,--  自增,自减

        前置自增,后置自增 单独使用无区别

        返回值,前置先自加

        后置  先参与运算在加

比较运算符

               比较数据大小,是否相等

                >,<,<=,>=,== 这些简单,不说了,对值进行判断

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

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

                只返回true,false

                涉及到NaN都为false

逻辑运算符

                &&,||,! 与,或,非

运算符优先级

                小括号>一元运算符>算术运算符>关系运算符

                >相等运算符>逻辑运算符>赋值运算符>逗号运算符

3.流程控制语句

       1. 顺序结构  从上至下

        2.分支结构 选择性执行

                if语句

                        if ( ) {

                        }else if( ) {

                        }else{

                        }

                三元运算符

                        a>b?1:0

                        a>b为真则1,假则0

                switch           

                        switch(){

                                case 1:

                                    break

                                case 2:

                                    break

                                default:

                                       }

               3. 循环结构  重复执行   

                        while,for

                let num=10

               while(num<20){

                        document.write(`${num}<br>`)

                        num++

               }

                break 退出循环,continue结束本次循环

                let i=['1','2','3','4','5']

               for(let num=0;num<i.length;num++){

                    document.write(i[num])

               }

4.数组

        数组【】表示,下标从0开始

let i=['1','2','3','4','5']

       i[i.length+1]='99'

       console.log(i)

        数组添加元素,push 添加在尾部,unshift 添加在头部,返回值是数组的长度

        删除元素,pop()删除最后一个元素,返回删除元素的值

        shift删除头部的元素,返回删除元素的值

        splice()删除指定的元素,两个参数,起始位置和个数

5.函数 

<script>
       
        sheet()
      
        function sheet(){
            let i=0
            for(i=0;i<10;i++){
                document.write(i);
            }
        }
    </script>

可以多次调用,可用于封装代码,除此之外,还有封装好的系统函数,pop()等

函数名冲突,后者覆盖前者,return后不再执行

let b=sum([1,2,3,4,5])
        document.write(b)
        function sum(arr){
            let a=0
            for (let i = 0; i < arr.length; i++) {
                a=a+arr[i]
                
            }
            return a
        }

局部作用域:函数内申明的变量,函数外无效

全局作用域:全局变量全局有效

匿名函数

        函数表达式

 let t=function(x,y){
            console.log(x+y)
        }
         t(1,2)   
         //函数表达式需先声明,在调用,有顺序
let btn=document.querySelector('button')
        btn.onclick=function(){
            alert('说出吾名,吓汝一跳!')
        }

        立即执行函数 避免全局变量的污染,本质上是调用函数 格式:(函数(形参){})(实参)

        需注意封号

        (function(){
            let num=10
            console.log(num);
        })();
        (function(){
            let num=20
            console.log(num);
        })();

第二种写法

       (function(){}());

小案例,时间

        let second=+prompt('请输入秒数')
        function getTime(t){
            console.log(t)
            h=parseInt(t/60/60%24)
            m=parseInt(t/60%60)
            s=parseInt(t%60)
            h=h<10? '0'+h:h
            m=m<10? '0'+m:m
            s=s<10? '0'+s:s
            return h+'/'+m+'/'+s
        };
        let a=getTime(second)
        document.write(a)

        逻辑中断

    function fn(x,y){
            x=x || 0
            y=y || 0
            console.log(x+y)
        }
//为真则返回x,为假则返回0

        转换为布尔型

        ‘空字符串和0,undefined,null,NaN 都为假,其他为真

6.对象

对象也是一种数据类型,无序的数据集合,详细的描述某个事物

        let lisi={}
        let zhangsan={
            gender:'男',
            sg:185,
            tz:70
        }

属性的操作

增 可以直接对象.属性,新增属性

删 delete 对象.属性

改 属性等于变量,重新赋值即可

查 对象.属性,点等于的 第二种zhangsan['sg']

对象方法

         let zhangsan={
            gender:'男',
            sg:185,
            tz:70,
            song:function(){
                console.log('冷冷的冰鱼在脸上胡乱的拍')
                document.write('冷冷的冰鱼在脸上胡乱的拍')
            }
        }
        zhangsan.song()

遍历对象

        let zhangsan={
            gender:'男',
            sg:185,
            tz:70,
            song:function(){
                console.log('冷冷的冰鱼在脸上胡乱的拍')
                document.write('冷冷的冰鱼在脸上胡乱的拍')
            },
            forP:function(){
                for(k in zhangsan){
                    console.log(k);
                    console.log(zhangsan[k]);
            }
            //for in 不推荐遍历数组,推荐遍历对象
            //k是字符串值,用查的第二种方法
        }
        }
        zhangsan.forP()

内置对象

js内部提供的对象,包含属性和方法给开发者调用

例如:document.write()

        console.log()

 Math 数学对象

        相关文档:MDN Web Docs

        document.write(Math.PI)
        console.log(Math.ceil(1.5));
        let a=Math.random()*11
        a=Math.floor(a);
        document.write(a+'<br/>')
        
        let b=Math.floor(Math.random()*6+5)
        document.write(b)

小案例

        let names=['张三','李四','王五']
        let random=Math.floor(Math.random()*names.length)
        document.write(names[random])
        names.splice(random,1)
        console.log(names);
        let random=Math.floor(Math.random()*11)
        document.write(random+'<br/>')
        let a=prompt('猜数字游戏,请输入');
        while (a!=random) {
            if(a<random){
                a=prompt('猜小了,请重新输入')
            }else
            if(a<random){
                a=prompt('猜大了,请重新输入')
            }else{
               
                break;
            }
        }
        document.write('恭喜,猜对了')

对象地址图解

小知识:

var let const

var容易出错,不建议用,优先const,值不变直接用const,值改变在改为let

对于引用数据类型,声明的变量里面存放的是地址,需要注意的是const 声明数组或对象,增加删除元素是可以的,因为他们存放在堆上,引用没变,引用存放在栈上,但如果赋值一个新对象或数组,引用改变就会报错

7.web APIs

DOM是浏览器提供的用来操作网页内容的功能,用来开发网页内容特效和实现用户交互

DOM树 体现标签与标签之间的关系

        将html文档以树状结构体现,例如html标签包含head和body标签,这两个标签又包含很多标签,很多标签里又有标签,一层一层可以理解为树状结构

        api通过js的形式操控标签

DOM对象

        浏览器根据html标签生成js对象,既然是对象,便有属性和方法,document是DOM提供的一个对象,网页所有内容都在document里。

<body>
    <div>123</div>
    <script>
        const div=document.querySelector('div')
        console.dir(div)
    </script>
</body>

DOM 获取元素对象、修改属性

 <div class="box">qweqweqweqweqw</div>
    <div class="box">123</div>
    <p class="nav">导航栏</p>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>

    <script>
        //获取匹配的第一个元素
        const c=document.querySelector('div')
        const nav=document.querySelector('.nav')
        
        const li=document.querySelector('ul li:first-child')
        console.dir(li)
        console.log(li)
        const lis=document.querySelectorAll('ul li')
        console.log(lis)
    </script>

根据CSS选择器获取DOM元素,返回的是匹配的第一个元素对象,没有匹配,返回空

 querySelectorAll返回的是NodeList集合,是个伪数组,有索引,有长度,但没有数组方法

操作元素内容、属性、样式

    <div class="box">嘿嘿嘿</div>
    <script>
        const box=document.querySelector('.box')
        // console.log(box.innerText);
        box.innerText='哈哈哈' //不解析标签
        box.innerHTML='<strong>嘻嘻嘻</strong>' //解析标签
        //看着用即可
    </script>
<div class="box">
        <h1>一等奖:<span id="one">???</span></h1>
        <h2>二等奖:<span id="two">???</span></h1>
        <h3>三等奖:<span id="three">???</span></h1>
    </div>
    <script>
        const index=['one','two','three']
        const personArr=['刘德华','周杰伦','郭富城','黎明','张学友']
        for(let i=0;i<index.length;i++){
            let ran=Math.floor(Math.random()*personArr.length)
            const one=document.querySelector('#'+index[i])
            one.innerHTML=personArr[ran];
            personArr.splice(ran,1)
            console.log(personArr);
        }
        
    </script>
<img src="aaa.jpeg" alt="">
    <script>
        const images=document.querySelector('img')
        images.src='bbb.jpeg'
        
    </script>
<style>
        .box{
            width: 200px;
            height: 200px;
            color: pink;
        }
    </style>
</head>
<body>
    <div class="box"></div>
    <script>
        const box=document.querySelector('.box')
        box.style.width='300px'
        box.style.backgroundColor='hotpink'
        
    </script>
<style>
        body{
            background-image: url(ccc.jpeg);
        }
    </style>
</head>
<body>
    <script>
        document.body.style.backgroundImage='url(https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2F2fb712eb-bd51-464e-aea4-eb92e209d9df%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1688625342&t=8def16ad8747a69bdc25c61c5ac4ad6a)'
    </script>

 修改样式比较多的情况下,可以通过修改类名减少代码量,如果需要添加一个类,要保留之前的类,覆盖直接赋值, 添加则 原类名 空格 新类名

 还可以通过classlist操控css ,追加,删除,切换

    <style>
        .nav{
            height: 200px;
            width: 200px;
            background-color: pink;
        }
        .aaa{
            height: 300px;
        }
        .bbb{
            background-color: skyblue;
        }
        .ccc{
            width: 300px;
        }
    </style>
</head>
<body>
    <div class="nav"></div>
    <script>
            const nav=document.querySelector('.nav')
            
            nav.classList.add('aaa')
            nav.classList.add('bbb')
            nav.classList.add('ccc')
            nav.classList.remove() //删除
            nav.classList.toggle() //切换
    </script>

定时器-间歇函数

<style>
        .btn{
            width: 80px;
            height: 30px;
        }
    </style>
</head>
<body>
    <p onmousemove="bbb()" onmouseleave="aaa()">10</p>
    <button class="btn" onclick="aaa()">开始</button>
    <script>
        let i=10
        let t=0;
        let a=0;
        let p=document.querySelector('p')
        let btn=document.querySelector('.btn')

       function bbb(){
            t=0
            btn.innerHTML='开始'
            clearInterval(a)
       }
        
       function aaa(){
            if(t===0){
                t=1
                btn.innerHTML='暂停'
                a=setInterval(function(){
                    if(i<=0){
                        i=11
                    }
                    --i
                    p.innerHTML=i 
                },1000);
                return;
            }
           
            t=0
            btn.innerHTML='开始'
            clearInterval(a)
       }
       document.onkeyup = function() {
                aaa()
       };
    </script>
</body>

DOM 事件基础

键盘监听,焦点的聚焦和失焦

功能:密码框切换

<body>
    <input type="text" class="aa">
    <input type="text" class="bb">
    <input type="text" class="cc">

    <script>
        const aa=document.querySelector('.aa')
        const bb=document.querySelector('.bb')
        const cc=document.querySelector('.cc')
        aa.focus();
        //addEventListener不会被覆盖,onclick会被覆盖
        aa.addEventListener('keyup',function(KeyboardEvent){
            
            if(KeyboardEvent.keyCode>48 && KeyboardEvent.keyCode<90){
                bb.focus();
                return;
            }
            alert('请输入0-9或者a-zA-Z的密码')
        })
        bb.addEventListener('keyup',function(KeyboardEvent){
            if(KeyboardEvent.keyCode>48 && KeyboardEvent.keyCode<90){
                cc.focus();
                return;
            }
            
        })
        cc.addEventListener('keyup',function(KeyboardEvent){
            if(KeyboardEvent.keyCode>48 && KeyboardEvent.keyCode<90){
                cc.blur();
                return;
            }
            
        })
    </script>
</body>

鼠标事件:click,mouseenter,mouseleave

焦点事件:focus,blur

键盘事件:keydown,keyup

文本事件:input 

this 的指向(基本概念)

谁调用指向谁,例:button点击事件,this指的是button,

回调函数

函数A作为参数传递给函数B,A就是回调函数

tab栏切换

DOM 事件对象、事件委托

DOM 节点操作、节点的增删改查

BOM 操作

浏览器 BOM、插件、本地存储

正则表达式、综合案例

小实战

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂铁不狂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值