前端JavaScript的简单学习

1:什么是javaScript:是一门世界上最流行的脚本语言(注意,java和javaScript没有关系),大概10天就开发的,一个合格的后端人员,必须精通javaScript。(ECMAScript可以理解成是javaScript的一个标准)

2:javaScript

  (1)快速入门javaScript

 

    <!--script:在里面写javaScript代码    -->
    <!--    <script>-->
    <!--        // alert表示弹出一个框-->
    <!--        alert("这是第一个javaScript程序");-->
    <!--    </script>-->

    <!--外部引入的方式,注意:Script必须是成对的出现,不能省略来写    -->
    <script src="js/a.js"></script>

 

  (2)基本的语法

        'use strict';
        //1:正常的字符串使用单引号或者双引号包裹
        console.log("a");
        console.log('a');
        //2:拼接字符串可以用``进行使用(局部变量建议用let)
        let msg = `hello
        world
        message
        `
        let name = 'xst'
        let age = 3;
        console.log(`你好呀+${name}:+${age}`)//ES6的新语法
        //3:字符串的长度(字符串定义后不可变,不能重新对某个字符串进行赋值)
        let student = 'student'
        console.log(student.length)//7
        console.log(student[0])//s
        console.log(student.toUpperCase())//转换成大写STUDENT
        console.log(student.toLowerCase())//转换成小写
        console.log(student.indexOf('t'))//1获取t出现的第一个索引位置
        console.log(student.substring(1,3))//截取1,3的位置,包含1但是不包含3

  (2)数组的详解

<script>
    'use strict'
    let arr = [1,2,3,4,5]
    //1:注意,假如给arr的length赋值,数组的长度会改变(如果赋值的过小,元素会丢失)
    console.log(arr.length)//5
    arr.length = 10;
    console.log(arr.length)//10
    //2:常用的数组中的方法
    console.log(arr.indexOf(2))//获取下标的索引1
    console.log(arr.slice(1,2))//截取方法,截取位置1到2的数组返回一个新的数组
    console.log(arr.slice(3))//从位置3开始截取
    let newArr = [1,2,3,4,5,6]
    //3:数组尾部的操作
    newArr.push(7,8,9,10)//向数组中的后面添加元素
    console.log(newArr.pop())//弹出的尾部的一个元素,这里应该是10
    console.log(newArr)//弹出之后重新打印将没有了
    //4:数组头部的操作
    newArr.unshift(1,2,3,4,5)//向头部添加元素
    newArr.shift()//弹出头部的一个元素
    //5:排序
    newArr.sort()
    //6:反转
    newArr.reverse()
    //7:拼接
    let otherArray = ['a','b','c'];
    otherArray.concat([1,2,3,4])//返回一个新的数组['a','b','c',1,2,3,4]
    //8:拼接
    let oneArr = [1,2,3]
    oneArr.join('-')
    console.log(oneArr);//'1-2-3'
</script>

  (3)对象的详解

<script>
    'use strict'
    /*1:定义对象的格式(js中的对象一般用大括号)
        var object = {
            属性名:属性值,
            属性名:属性值,
            属性名:属性值
        }
     */
    var obj = {
        name: 'xst',
        age: 12,
        school: '清华大学'
    }
    //对象的赋值的问题
    obj.name = 'mm'
    console.log(obj.name)//mm
    //动态的删除的值
    delete obj.name
    console.log(obj.name)//undefined
    //动态的添加值
    obj.aa = 'aa'
    console.log(obj.aa)
    //判断这个属性值是否在这个对象中(xx in xxx)javaScript中所有的键都是字符串
    console.log('aa' in obj)//true
    //判断这个对象中是否拥有这个属性
    console.log(obj.hasOwnProperty('aa'))//true

</script>

 

  (4)流程控制:和java中的if else类似(不做过多的讲解)

  (5)Map和Set集合(在ES6中的新特性)

 

    'use strict'
    //ES6的新语法
    //map:
    let map = new Map([['tom', 100], ['age', 99], ['haha', 98]]);
    console.log(map.get('tom'))//100
    map.set('key', 11111)
    console.log(map.get('key'))//11111
    //set:会自动去重
    let set = new Set([3, 1, 12, 3, 123, 123]);
    set.delete(3)//删除set中3这个元素
    set.add(9999)//添加9999到set中
    set.has(1)//判断这个set是否包含1这个元素

    //of 和in的区别  of是遍历每一个元素  in是遍历数组下标
    for (let a of map) {
        console.log(a)
    }
    for (let a of set) {
        console.log(a)
    }

 

 3:javaScript中的函数方法的定义

  (1)函数的定义和试用

<script>
    /*1:函数的定义都是通过function来定义的(绝对值函数),一旦执行了return表示方法结束
        如果函数没有执行return 也会返回  返回的值为NaN
    */
    //定义方式1
    function abs(x) {
        if (x >= 0) {
            return x
        } else {
            return -x
        }
    }

    console.log(abs(-10))//10
    /*
     * 定义方式2:(两种定义方式的作用是一样的)
     */
    var abs = function (x) {
        if (x >= 0) {
            return x
        } else {
            return -x
        }
    }
    //2:javaScript可以传任意的参数,也可以不传递参数
    //手动定义异常
    var abs = function (x) {
        //typeOf:判断变量的类型
        if (typeof x !== "number") {
            throw  "x不是一个number"
        }
    }
    //3:arguments是js免费赠予的一个关键字,代表传进来的参数,是一个数组
    var a = function (x) {
        if (arguments.length === 1) {
            console.log("传进来了一个参数")
        }
        if (arguments.length === 2) {
            console.log("传进来了两个参数")
        }
    }

    //4:rest是ES6的新特性,获取除了已经定义的参数之外的所有参数(rest函数必须写在最后一个,必须用...)
    function m(a, b, ...rest) {
        console.log(a)
        console.log(b)
        console.log(rest.length)
        for (var i = 0; i < rest.length; i++) {
            console.log(rest[i])
        }
    }
    m(1, 2, 3, 4, 5, 6, 7, 8,)


</script>

  (2)变量的作用域问题(var let const的区别)

    <script>
        /*  1:var定义的变量是存在作用域的,假设在函数体里面中声明的,在函数体外面不可以使用,
        *       (1)内部函数可以访问外部函数的成员变量
        */
        //2:变量的作用域问题
        function xst() {
            var x = 'x' + y;
            console.log(x)
            var y = 'y';
        }//结果xundefined:说明js执行引擎,自动提升了y的声明, 但是不会对y进行变量的赋值:所以所有的javaScript的变量定义发那个在头部
        //3:全局变量
        var z = '1'

        function method() {
            console.log(z);//1
        }

        method();
        console.log(z);//1
        //4:全局对象window(所有的全局变量,都会绑定在window中)
        var x = 'x'
        alert(x)
        alert(window.x)
        //5:由于所有的全局变量都会绑定到window中,如果js文件中存在相同名称的全局变量就会产生冲突(如何解决)
        //唯一的变量
        var xst = {}
        xst.name = 'xxxxx';
        /*6:let关键字解决局部变量冲突的问题(ES6d的关键字)建议使用let关键字去定义局部作用域的变量
        *   常量const,在ES6之前都是用全大写的定义常量,这种方式不科学
        *       用const定义后的常量不能改变,它是一个只读变量(注意:const定义的数组和对象可改变)
        */

    </script>

 

  (3)方法

<script>
    //1:方法就是把函数放在对象中使用,对象中只有属性和方法
    var xst = {
        name: 'aaa',
        birth: 2021,
        age: function () {
            //今年-出生年月
            let nowYear = new Date().getFullYear();
            return nowYear - this.birth;
        }
    }
    console.log(xst.age());
    //2:this关键字,this是无法指向的,谁调用它,this就指向谁
    //但是javaScript中的apply函数可以改变this指向问题
    var getAge = function () {
        let nowYear = new Date().getFullYear();
        return nowYear - this.birth;
    }
    getAge().apply(xst, [])//表示在调用这个getAge这个方法的时候,this的指向是xst,传的参数为空

</script>

  (6)javaScript中常用的对象

    1:typeOf(用来判断这个变量的类型)

typeof 123
'number'
typeof '123'
'string'
typeof NaN
'number'
typeof []
'object'
typeof {}
'object'

    2:年份

    //年份
    var now = new Date();
    now.getFullYear()//获取当前年
    now.getMonth()//获取当前月(外国的月份是从0-11,即中国的1月表示为0)
    now.getDay()//星期几
    now.getDate()//获取当前日
    now.getHours()//获取时
    now.getMinutes()//获取秒
    now.getTime()//获取时间戳,全世界统一,从1976-1-1 0:00:00到现在时间的毫秒数
    new Date(now.getTime());//获取中国标准时间

    3:JSON对象

<script>
    /*1:json是什么:json是一种轻量级的数据交换格式,简洁而清晰的层次结构使得json成为最理想的数据交换语言
     *  在js中,万物皆为对象,任何js支持的json数据类型表示
     *      格式:对象:{},数组:[],所有的键值对都用key-value的形式
     *
    **/
    let user = {
        name: 'xst',
        age: 3,
        sex: '男'
    }
    let jsonUser = JSON.stringify(user)//将对象转成json对象
    console.log(user)
    console.log(jsonUser)
    let object = JSON.parse(jsonUser);//将json字符串转换为对象
    console.log(object);
</script>

4:javaScript中的原型继承

 

<script>
    var student = {
        name: 'xst',
        age: 1,
        run: function () {
            console.log(this.name + 'run....')
        }
    }
    var xiaoMing = {
        name: 'xiaoMing'
    }
    var xiaoMing = {...student}//student//这样表示xiaoMing的原型对象是Student
    xiaoMing.run()
</script>

 

<script>
    //给student增加一个方法
    //用ES6中引入的(注意class对象的首字母必须大写)
    class Student {
        constructor(name) {
            this.name = name
        }

        hello() {

            alert("这是hello语句")
        }
    }

    class SmallStudent extends Student {
        constructor(name, grade) {
            super(name)
            this.grade = grade;
        }

        MyMethod() {
            alert("我是个小学生")
        }
    }

    var xst = new Student("xst");
    xst.hello();
    var xiaoHong = new SmallStudent("小红");
    xiaoHong.MyMethod();
</script>

5:javaScript中操作BOM节点(重点)

  (1)什么是BOM:浏览器对象

  (2)window对象,代表浏览器窗口

window.innerHeight
397
window.innerWidth
1707
window.outerHeight
1019
window.outerWidth
1707

  (3)Navigator(封装了浏览器的信息)不常用

navigator.appName
'Netscape'
navigator.userAgent
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
navigator.platform
'Win32'

   (4)screen(代表屏幕的尺寸)

screen.width
1707
screen.height
1067

 

   (5)location(代表当前页面的url信息)

host: "new-tab-page"
href: "chrome://new-tab-page/"
location.reload()//刷新页面
location.assign('https://www.baidu.com/')//跳转到百度页面

 

   (6)document代表当前页面,HTML,DOM对象

document.title
'百度一下,你就知道'

 

 获取具体的文档树节点

<dl id="test">
    <dt>java</dt>
    <dd>javaSE</dd>
    <dd>javaEE</dd>
</dl>
<script>

    var testParm = document.getElementById("test")//获取test节点
    console.log(testParm)

</script>

 

 

 

 获取Cookie(document.cookie)这是不安全的,容易获取到

   (7)history.back():网页的后退,histroy.forward():网页的前进

6:操作DOM对象(DOM:文档对象模型)

  (1)获得DOM节点

 

<script>
    document.getElementsByTagName("h1")//标签选择器
    document.getElementById("p1")//id选择器
    document.getElementsByClassName("p2")//class选择器
    var father = document.getElementById("father")
    var allChildren = father.children;//获取父节点的所有子节点
    father.firstChild//获取第一个节点
    father.lastChild//获取最后一个节点
</script>

 

 

   (2)更新节点

 

<script>
    var h1 = document.getElementById("id1");
    h1.innerText = '1234'//给div添加文本信息
    h1.innerHTML = '<strong>1234</strong>'//加一个html  加粗的html
    h1.style.color = 'red'
    h1.style.fontSize = '20px'//操作样式节点
    h1.style.padding = '20px'
</script>

  (3)删除节点

    步骤:

      1:先获取父节点

      2:再通过父节点删除自己

<script>
    //获取到子节点
    var p1 = document.getElementById('p1');
    //获取到父节点
    var father = document.getElementById('id1');
    //通过父节点删除子节点
    father.removeChild(p1)
    //注意:删除 多个节点的时候,children是时刻在变化的,不能通过节点的下标来删除
</script>

   (4)创建和插入节点

    1:如果我们获得了某个DOM节点,我们通过innerHTML就可以新增一个节点,但是如果这个DOM节点已经存在,会覆盖之前的节点,js中为了解决这个问题,通过追加的方式。

<script>
    var js = document.getElementById('p1')
    var div = document.getElementById('div')
    div.appendChild(js)//追加p1到div中
    var newP = document.createElement('p')//创建一个p标签
    newP.id = 'newP'//在新节点设置一个id选择器
    newP.innerText = 'newP'//在p标签中加了一段文字
    div.appendChild(newP)//追加newP到div标签中

    //创建一个标签
    var myscription = document.createElement('script')
    myscription.setAttribute('type', 'text/javascript')//设置标签的属性
    var myStyle =document.createElement('style');
    myStyle.setAttribute('type','text/css');
</script>

7:初识jquery以及公式

  (1)JavaScript和kjquery的关系:jquery是一个库,里面存在大量的jquery的函数 

 

<!--引入jquery-->
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<body>
<!--jquery的公式:$(选择器).action()-->

<a href="" id="test">点我</a>
<script>
    //jQuery中的选择器就是css中的选择器

    $('#test').click(function () {
        alert('Hello,Jquery')

    })

</script>

 

posted @ 2022-09-04 18:31  程序员XiaoXie  阅读(39)  评论(0编辑  收藏  举报