web前端 js笔记

本文介绍了JavaScript的基本语法,包括内部和外部引入JS的方式,输入输出语句,变量和常量的声明与赋值,数据类型的特性,如数字、字符串和布尔类型。此外,还涉及运算符、控制结构(如if-else和switch),循环结构(for,while等),数组的使用,对象的定义与访问,以及函数的定义与调用。文章还讲解了事件监听、节点操作等DOM交互相关知识。
摘要由CSDN通过智能技术生成

JS引入方式;


内部:
在body结尾处写
<script>...</script>

外部:
在body结尾处写
<script src=""一个已经写好了的.js文件地址></script>


输入输出语句:

    <script>
        prompt('请输入您的密码:')        //输入
        document.write('你们真是小天才')    //打印到页面    括号里可以为内容添加标签
        console.log('我现在要在控制台输出')    //打印到控制台    括号里的标签不识别
    </script>

变量:
    <script>
        let 变量名;                //声明变量        //可以同时定义多个变量 let a = prompt('请输入您的密码:')
        age = prompt('请输入您的密码:');    //变量赋值        //声明和赋值可以同时进行
        console.log(age)            //不加引号
    </script>

常量
    <script>
        const 名 =                //声明    用于区分最好用大写做常量名
    </script>    


js是弱数据类型,只有赋值后才知道其数据类型

基本数据类型:
    1.数字类型:
        let a=33
        let b=23
        console.log(a +/-/*/除/% b)        //除号会保留小数点
    2.字符串类型:
        let uname='huangheping'        //可以写双引号,但是一个字符串不能出现两个单引或双引,'abcd"efgh"mn'这个是可以的
        console.log(typeof (uname))        //typeof检查类型,可以不写
        字符串拼接用+
            console.log(a + b)
        模板字符串:
             let name = prompt('输入名字:')
             let  age   = prompt('输入年龄:')
            document.write('你叫:' + name, '今年:' + age)    //很麻烦,不推荐
            document.write(`你叫${name},今年${age}岁`)    //模板字符串,用的反引号,可识别标签

    3.布尔类型

        <script>
            console.log(typeof (3>5))            //undefined声明,未赋值    null,返回值是true/false
        </script>    

    
    4.显示转换                            //(隐式转换:在数字+字符串时,会把数字当作字符串)
        let uname=prompt('输入名字:')    
        console.log(number/+ (uname))            //number/+ 转化为数字类型

        let c='200px'
        console.log(parseInt (c))                //提取数字,将末尾Int改成Float可以保留数字的小数部分

alert(a+b)//警示框


运算符:
    =  +=  *=  -=  /=  ++ --  >  <  ==  >=  <=   ===    && || !        //除号会保留小数点;==只比较数值,将其他类型转化为数值在比较;
                                //===既比较数值,也比较类型
    


单分支语句
    if(条件){......}else{.....}                        //与c类似
    
    条件?语句一 :语句二                    //条件成立执行语句一,条件不成立执行语句二
多分支语句
    switch(a)
    {
        case 1: alert('.......')break
        case 2: alert('.......')break
        default: 
    }

循环结构(for  while    do...while)
循环嵌套


let arr = [1,2,3,4,5]
for(let i in arr)    
    {
        console.log(arr[i])        //按顺序输出数组的每个值    
    }

for(let k of arr)    
    {
        console.log(k)        //按顺序输出数组的每个值,效果与上面相同
    }

数组; let arr = [...,...,...,]            //定义 console.log(数组名 instancef Array)判断是不是数组如果是,返回值true
访问通过下标,也可以通过下标进行修改

增加数组:
    数组名.unshift/push(内容)        //添加在数组最前面/后面

删除数组:
    数组名.shift/pop(内容)        //删除在数组最前面/后面的内容
    数组名.splice(数字1,数字2)        //数字1代表删除的起始位置,数字2代表往后删除的个数

数组的合并:  数组3=数组1.concat(数组2)        //将数组2连接在数组1后面并赋值给数组3


把所有数据放进一个字符串console.log(arr.join('每个数据用什么隔开'))
截取数组的值    console.log(arr.slice(3))    //截取前三个

二维数组:
    let student =[[...],[...],[...],[...]]

    for(let i in stuent)
    {
        for(int j in stuent[i])
            console.log(student[i][j])
    }

获取数组长度 student.length


函数:
    function 函数名(形参){
            执行代码            //函数定义和内容
            console.log(arguments)    //arguments接受所有实参,并存在数组里,srguments[i]
            
            return ....            //函数有返回值一定要写return,
                    }
    
    函数名(实参)                //调用


例:    function a(b){
            b()    
                }

    function c(){
            打印c    
                }
        a(c)                //结果是打印了c


let a = function c(){
        ....
                }                //这时候函数名只能用a

立即执行函数(function(){......})()

值传递不影响原数据,引用传递会影响

箭头函数
    setInterval(()=>{console.log('.......')},1000)


递归函数
    function jiecheng(n){
                if(n===1){return 1}
                else{
                    return n*jiecheng(n-1)
                    }
            }


闭包:function out(){
        let  a = '变量'
        function over(a){
                打印a
                }
        }


数组遍历
    let arr=[.........]
    for(let i = 0; i < arr.length; i++){
                        arr[i] 是遍历的数组的元素
                }


对象(无序的数据结合):
        let obj={
            uname:'zhangsan',
            age:21,
            gender:'nan'
            }
访问:          console.log(obj.uname) /console.log(obj['uname']) 


对象的遍历:
        for(let k in obj){
                console.log(k)/console.log(obj[k])
                }

数组对象    let arrobj=[
            {
                uname:'zhansgan'
                age:'18'
            },
            {
                uname:'lisi'
                age:'20'
            }

        ]
        
查看    arrobj[i]['uname']

遍历    for(let i=0;i<arrobj.lenth;i++){
                for(let k in  arrobj[i]){
                        console.log(arrobj[i][k])
                        }
                }

Math内置对象
    console.log(Math.E)            //数学e的自然数
    console.log(Math.PI)            //数学圆周率    
//Math.ceil()向上取整        //Math. floor()向下取整    //Math.abs()取绝对值        //Math.pow(数字1,数字2) 数字1的数字2次方
//Math.sqrt()开方        //Math.random()默认0-1随机数左闭右开区间         //Math.floor(Math.random()*(m-n+1))+n 表示m-n随机数    


日期内置对象
    let date=new Date()
    alert(date)                        //获取时间到date
    
    let year = date.getFullYear()                //或取年
    let month = date.getMonth()+1            //获取月
    let day = date.getDate()                //获取日
    let hh = date.getHours()                //获取时
    let mm = date.getMinutes()                //获取分
    let ss = date.getSeconds()                //获取秒
    let gg= date.getDay()                //获取星期
document.write(`${year}-${month}-${day} ${hh}:${mm}:${ss}`)
    

a.toFixed(n)                                //a保留n位小数

获取对象
    1.通过css
        document.querySelector('...')                    //括号里面跟的是css选择器的名字,只显示找到的第一个
        document.querySelectorAll('...')                    //获取所有,伪数组,可以通过遍历打开
    
    2.其他
        document.getElementsByTagName('...')                //括号里跟标签名
        document.getElementsById('...')                    //括号里跟id

修改元素内容
    1.const box=获取元素

    2.操作
        box.innerText = '修改内容'/box.innerHTML = '修改内容'        //前者不识别标签,后者能识别标签
            
修改元素属性
<body>
    <ing src="地址1">
    <script>
        const/let img=document.querySelector('img')            //获取
        img.src="地址2"                        //修改元素属性   元素.属性="修改值"
    </script>

</body>        

修改元素样式属性
    <style>
        div{
            width:300px;
            height:300px;
            background-color:red;
            }
    </style>
    
    <script>
        const/let div=document.querySelector('div')            //获取
        div.style.witdh =""                        //修改元素样式   元素.style.属性="修改值"
        div.style.height=""
        ..........
    </script>


通过类(class)修改
    <div class"box"><div>
    <script>
        const/let div=document.querySelector('div')    
        div.className=""                        //会将原来的类名覆盖
    </script>

通过其classList对类名进行修改
    <div class"box1"><div>
    <script>
        const div=document.querySelector('div1')    
        div.classList.add('box2')                    //添加一个box2的类名
        div.classList.remove("box2")                    //若原来有box2类名,则删除它。若原来没有box2类名,则添加他
    </script>

定时器(setTimeout/setInterval)
setTimeout:某段代码或者函数在多久后执行
            setTimeout(代码/函数/函数名 , 时间(单位是毫秒) , 实参....)    //返回值为一个整数,代表定时器编码
        例:    setTimeout('console.log("再看一眼就会爆炸")' , 1000 )    


setInterval:每隔一段时间,代码和函数执行一次
            setInterval(代码/函数/函数名 , 时间(单位是毫秒) , 实参....)        


事件监听:
    const div=document.querySelector('div')                    //获取元素
    div.addEventListener('click',()=>{执行的操作})                //添加事件监听,click鼠标点击


事件绑定
    const div=document.querySelector('div')                    //获取元素
    div.οnclick=function(){........................}                    //元素.on事件名 = 回调函数


事件委托
    const ul=document.querySelector('ul')                    //获取li的父级元素ul
    ul.addEventListener('click',(e)=>{e.target.style.backgroundColor='pink'})        //点击父级下的哪个li,哪个li变成粉色


常见事件
    鼠标点击click    鼠标经过mouseenter    鼠标离开mouseleave    获得焦点focus    失去焦点blur    键盘按下事件/    用户输入事件input....................................
    


滚动事件
    

捕获,冒泡
    <style>
        .grandfather{
                .....
               }
        .father{
            .....
                  }
        .son{
            ...
               }
    </style>

    <div class="grandfather">
        <div class="father">
            <div   class="son">
            </div>
        </div>
    </div>

    <script>
        document.querySelector('.grandfather').addEventListener('click',(e)=>{console.log('我是爷爷')} , true)
        document.querySelector('.grandfather').addEventListener('click',(e)=>{console.log('我是父亲')})
        document.querySelector('.grandfather').addEventListener('click',(e)=>{console.log('我是儿子')})
    <scripy>
//默认fales冒泡,   true捕获


阻止默认行为    e.preventDefault()
        例:document.querySelector('button').addEventListener('click',(e)=>{e.preventDefault())        //阻止了button默认的点击提交


    

节点操作
    找父级节点  let father= document.querySelector('.son').parentNode
    找子级节点  let son= document.querySelector('.father').childern                        //会找所有子级
    
    追加节点      let btn= document.querySelector('button')
          let ul    = document.querySelector('ul')
          btn.addEventListener('click',()=>{
                        let li = document.querySelector('li')            //创建节点
                        li.innerHTML = `<h1>新建<h1> <button>删除</button>`    //添加内容
                        ul.appendChild(li)/ul.insertBefore(li, 谁的前面)        //追加到最后面/追加xxx的前面
                        }
                   )

        
         btn.addEventListener('click',()=>{
                        let li = document.querySelector('li')            //创建节点
                        li.innerHTML = `<h1>新建<h1> <button>删除</button>`    //添加内容
                        ul.appendChild(li)/ul.insertBefore(li, 谁的前面)        //追加到最后面/追加xxx的前面
                        }
                   )
        document.querySelector('newLi button').addEventListener('click'),()=>{
                                    ul.removeChild(li)        //删除节点
                                          })


    删除节点


构造函数
    function Obj(uname,age){
                this.uname = uname,
                this.age      = age
                  }
    let obj1 = new Obj('zhangsan',23)
    let obj2 = new Obj('wanger',18)
    Obj.prototype.sing = function{.......}                //原型,被所有对象所共享。obj1.sing()与obj2.sing()共享这个内容


    Obj.prototype={
            constructor:Obj,                    //手动添加构造器指向构造函数
            sing:function(){console.log('我要唱歌')},
            dance:function(){console.log('我要跳舞')}
            
                }
    


this关键字
    默认指向windows    构造函数中指向实例化的对象    对象中指向当前对象        函数基本调用时,也指向windows    =>函数this指向上一层环境中this

js执行机制--单线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值