其他分享
首页 > 其他分享> > day57

day57

作者:互联网

(1)变量提升 (2)函数提升 (3)BOM操作 (4)JS选择器 (5)创建、添加、删除、替换 (6)类属性操作

变量提升
定义:
在js中,代码的执行分两步,1、解析 2、依次执行
那么变量提升就是变量声明会被提升到作用域的最顶上去,也就是该变量不管是在作用域的哪个地方声明的,都会提升到自身作用域的最顶上去。
console.log(a)      //undefined
var a=111
console.log(a)      //111
// 相当于
var a               //先声明
console.log(a)
a=111               //再定义 
console.log(a)


var x=111
function f1() {
    console.log('--->',x)      //undefined
    var x=222
    console.log('===>',x)      //222
}
f1()

var x=111
function f2() {
    console.log('--->',x)      //111
    x=222
    console.log('===>',x)      //222
}
f2()


var x=111
if (true) {
    console.log(x)      //111
    var x=222
    console.log(x)      //222
}
console.log(x)          //222



函数提升
定义:
函数声明式,会将函数的声明和定义一起提升到作用域的最顶上去。

可以先调用再定义。
console.log(f)
f()                     //fff
function f() {
    console.log('fff')
}
console.log(f)
f()                     //fff


# 1、所有的声明都会提升到作用域的最顶上去。
# 2、同一个变量只会声明一次,其他的会被忽略掉。
# 3、函数声明的优先级高于变量声明的优先级,并且函数声明和函数定义的部分一起被提升。

闭包函数和let
//闭包函数
var arr=[]
for (var i=0;i<=4;i++) {
    function outter(x){
        function f() {
            console.log(x)
        }
        return f
    }
    var f=outter(i)
    arr.push(f)
}

console.log(arr[0]())
console.log(arr[1]())
console.log(arr[2]())
console.log(arr[3]())


var arr=[]
for (let i=0;i<=4;i++) {
    function f() {
        console.log(i)
    }
    arr.push(f)
}

console.log(arr[0]())
console.log(arr[1]())
console.log(arr[2]())
console.log(arr[3]())

//let属于块级作用域,声明i为自身级别,每循环一次i都为一个单独的值



BOM操作
https://www.cnblogs.com/linhaifeng/articles/9472477.html
了解:
#1、history对象包不包含浏览器的历史
history.back() //后退一页,等同于history.go(-1)
history.forward() //前进一页,等同于history.go(1)
history.go(0) //0是刷新
用的不多。因为浏览器中已经自带了这些功能的按钮:

#2、navigator对象包含了浏览器相关信息。
navigator.appName  // Web浏览器全称
navigator.userAgent  // 客户端绝大部分信息
navigator.platform   // 浏览器运行所在的操作系统

#3、可以用screen对象得到可用的屏幕宽读和高度
screen.availWidth  //可用的屏幕宽度
screen.availHeight  //可用的屏幕高度


location对象
location.href  //获取URL
location.href="URL" // 跳转到指定页面
location.reload() //重新加载页面

BOM详细操作
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BOM操作</title>
    <style>
        .box {
            width: 200px;
            height: 200px;
            background-color: chartreuse;
        }
    </style>
</head>
<body>
<div class="box">去B站</div>
<script>
    window.location='http://www.baidu.com'          //window.location跳转至
    location='http://www.hao123.com'                //window可省略
    window.history.back()           //回到历史(后退)
    window.history.forward()        //前进
    window.history.go(0)            //0相当于刷新

    document.getElementsByClassName('box')[0].onclick=function(){
        location.href='http://www.bilibili.com'
    }

    location.reload()           //重新加载

    alert('这是一个弹窗')         //弹窗,只有’确定‘按键
    confirm('这是一个弹窗2')      //弹窗,有’确定‘和’取消‘两个按键
    var a=confirm('弹窗3')
    console.log(a)              //’确定‘为true,’取消‘为false

    prompt('请输入用户名:')       //输入框弹窗
    username=prompt('用户名:')
    password=prompt('密码:')
    console.log(username)
    console.log(password)

    open('http://www.jd.com','_blank',"width=500,height=500")    //弹出新窗口,self从当前页面打开,blank新窗口打开,可设置属性
    var x=window.open("http://www.tmall.com","_blank", "width=400, height=400")
    x.close()           //关闭

    setTimeout(function () {
        location.href='http://www.taobao.com'
    },3000)                                     //setTimeout定时器,参数(函数功能,定时时间(单位毫秒)),只运行一次
    setInterval(function () {
            location.reload()
    },3000)                                 //与timeout的区别:会循环执行
    var s1=setTimeout(function () {
        location.href='http://www.taobao.com'
    },3000)
    clearTimeout(s1)                         //关闭定时器
    var s2=setInterval(function () {
        location.href='http://www.taobao.com'
    },3000)
    clearInterval(s2)

</script>
</body>
</html>


JS选择器
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JS选择器</title>
    <style>
        .box1 {
            width: 200px;
            height: 200px;
            background-color: red;
        }
    </style>
</head>
<body>
<div class="box1">第一个</div>
<hr>
<div class="box1">第二个</div>
<hr>
<div id="btn">
    <p>ID</p>
    aaa
    <p>IIDD</p>
</div>
<hr>
<div name="welt">welt</div>
<script>
    var box=document.getElementsByClassName('box1')         //通过类查找,找到多个会放在数组中
    console.log(box)
    console.log(box[0])
    console.log(box.length)

    var box_id=document.getElementById('btn')               //通过ID查找
    console.log(box_id)

    var box_tag=document.getElementsByTagName('div')        //通过标签查找
    console.log(box_tag)

    var box_name=document.getElementsByName('welt')         //通过属性查找
    console.log(box_name)

    var s1=document.getElementById('btn').childNodes        //[text, p, text, p, text] 查找子内容,包含文本内容
    console.log(s1)
    var s2=document.getElementById('btn').children        //[p, p] 仅查找子标签,不包含文本内容
    console.log(s2)
    var s3=document.getElementById('btn').parentNode        //<body>  查找父级节点
    console.log(s3)
    var s4=document.getElementById('btn').nextSibling       //获取下一个兄弟节点,包含文本
    console.log(s4)
    var s5=document.getElementById('btn').nextElementSibling    //获取下一个兄弟节点,不包含文本
    console.log(s5)
    var s6=document.getElementById('btn').previousSibling   //获取上一个兄弟节点,包含文本
    console.log(s6)
    var s7=document.getElementById('btn').previousElementSibling   //获取上一个兄弟节点,不包含文本
    console.log(s7)
    var s8=document.getElementById('btn').firstChild   //获取第一个子节点,包含文本
    console.log(s8)
    var s9=document.getElementById('btn').firstElementChild   //获取第一个子节点,不包含文本
    console.log(s9)
    var s10=document.getElementById('btn').lastChild   //获取最后一个子节点,包含文本
    console.log(s10)
    var s11=document.getElementById('btn').lastElementChild   //获取最后一个子节点,不包含文本
    console.log(s11)

</script>
</body>
</html>




创建、添加、删除、替换
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>增删替换</title>
    <style>
        .box {
            width: 200px;
            height: 200px;
            border: 1px solid red ;
        }
    </style>
</head>
<body>
<div class="box">
    <p>111</p>
    <p>222</p>
    <p>333</p>
</div>
<script>
    //创建元素
    var oDiv=document.createElement('div')
    oDiv.style.width='80px'
    oDiv.style.height='80px'
    oDiv.style.backgroundColor='blue'

    //末尾添加子元素
    // var box=document.getElementsByClassName('box')[0]
    // box.appendChild(oDiv)                                //appendChild添加子元素

    //插入子元素
    // var p3=document.getElementsByTagName('p')[2]         //box.insertBefore(新节点,目标节点)
    // box.insertBefore(oDiv,p3)

    //删除子元素
    // var box=document.getElementsByClassName('box')[0]
    // var p3=document.getElementsByTagName('p')[2]
    // box.removeChild(p3)                              //removeChild删除子元素

    //替换子元素
    // var box=document.getElementsByClassName('box')[0]
    // var p3=document.getElementsByTagName('p')[2]
    // box.replaceChild(oDiv,p3)

</script>
</body>
</html>

修改
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改</title>
    <style>
        .box {
            width: 200px;
            height: 200px;
            border: 1px solid red ;
        }
    </style>
</head>
<body>

<div class="box">
    <div class="box2" name="welt"></div>
    <p>33333</p>
</div>

<img src="http://www.xxx.com/1.jpg" alt="">
<input type="text" value="111">
<p id='ppp' name="wweltt"></p>
<script>
    var box=document.getElementsByClassName("box")[0]
    // box.innerText="哈哈哈"                 //innerText添加内容,会覆盖原来的子标签
    // box.innerHTML="<p>1111</p>"             //innerHTML添加标签,有覆盖效果

    // var s1=box.getAttribute('class')
    // var s1=box.getAttribute('name')
    // console.log(s1)

    // var res=box.setAttribute("x","11111")       //设置属性
    // box.removeAttribute("class")             //删除属性
    // console.log(res)
    // box.setAttribute("style","background-color: red;width:100px")
    // box.style.fontSize="50px"
    // box.style.backgroundColor="red"

    // var img = document.getElementsByTagName('img')[0]
    // console.log(img.getAttribute("src"))
    // console.log(img.src)                              //元素一定有的属性可以通过 '.属性名' 来获取
    // var inp = document.getElementsByTagName('input')[0]
    // alert(inp.getAttribute("value"))
    // alert(inp.value)
    // var p=document.getElementById("ppp")
    // alert(ppp.name)                         //undefined  '.+属性名'不能获取手动设置的属性

</script>
</body>
</html>


类属性操作
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            border: 1px solid red;
        }
        .box {
            background-color: red;
        }

        .box3 {
            width: 300px;
            height: 300px;
        }
    </style>
</head>
<body>
<div>11111</div>
<hr>
<div>2222</div>
<hr>
<div class="box22222">3333</div>
<script>
    //给所有div标签添加属性
    // var arr=document.getElementsByTagName('div')
    // for (var i=0;i<arr.length;i++){
    //     arr[i].classList.add("box")
    // }

    //删除属性
    // var oDiv=document.getElementsByClassName("box3")[0]
    // oDiv.classList.remove('box3')

    // var oDiv=document.getElementsByClassName("box3")[0]
    // alert(oDiv.classList.contains("box3"))               //contains判断是否包含某一属性

    // var oDiv=document.getElementsByTagName("div")[2]
    // oDiv.classList.toggle("box3")                        //toggle 如果有该属性,则删除;如果没有,则添加
</script>

</body>
</html>

 

标签:box,console,log,getElementById,var,document,day57
来源: https://www.cnblogs.com/bronya/p/13771008.html