javascript学习小结

已经学了一段时间javaScript,在针对性的学习这块儿的时候,认为js就是属性、事件、方法,的混合使用。下面对js做个简单的总结。javascript又称js是一种用来交互的弱类型脚本语言,js大致分为以下几部分。

第一部分变量

在es6之前以var进行声明用来存储一个变化数据,可以用来做一个中转的容器方便以后的开发进行使用js数据类型可分为基本数据类型,引用数据类型

基本数据类型:**Number、String、Boolean、Null、 Undefined**这些类型可以直接操作保存在变量中的实际值。

引用数据类型Object(在JS中除了基数据类型以外的都是对象,数据是对象,函数是对象,正则表达式是对象

注:基本数据类型直接进行存储,而引用数据类型则是将地址存储在栈中(具体的可以看我的引用型数据类型的赋值里面有详细的解释)

Number:用来表示一些数字型的数据主要可以分为浮点数,整数和NAN三种数据

整数顾名思义就是整数没有小数点的数,浮点数即为小数,nan就是非数字类型。数字和纯数字字符串之间也进行转换

        Number可以将纯数字字符串转换为数字型

        parseInt:可以提取数字的整数部分

        paseFloat可以提取数字的整数和小数部分;

String:字符串型用来表示字符串的变量类型

Boolean:布尔类型又称为逻辑数据类型由true和false两部分组成一般用来进行设置一些布尔数据类型的属性的值例如diabled等等。以及状态切换的一种判断

第二部分数组

数组:就是用来表示一组有序数据的集合,分为基本数组和伪数组,伪数组具有数组的一些常用的属性和方法。

定义数组

   // var arr=[10,20,30]
        var arr = new Array();
        var arr0 = new Array(10, 20, 30);
        var arr1 = new Array(10);//声明一个长度为10的空数组

2.1数组的使用

1.取值,通过索引

var arr=[1,2,12]
console.log(arr[0])

2.赋值  

var arr=[1,2,12]
arr[0]=23
console.log(arr[0])

2.2数组遍历

//数组是一个有序的集合   索引 从0开始
for
for..in
foreach    

2.3数组的普通方法

//1.concat   合并数组
         var arrx=arr.concat(arr1,arr1,arr1)
        var arrx=arr.concat()  //复制
        console.log(arrx);
//2.push	数组末尾添加元素
	
//3.splice   删除、添加、替换
	        // arr.splice(1,1)     //删除
        // arr.splice(1,3)
        // arr.splice(1,0,'hello',"word")      //添加
        arr.splice(1,1,'hello')  //替换
//4.slice   截取数组
	var arrx=arr.slice(1,2)    //[start,end)   取不到end
//5.pop  删除数组末尾元素    
//6.shift  删除数组头部元素
//7.unshift  头部添加元素
//8.indexOf   获取元素在数组中的索引
//9.lastIndexOf
//10.sort     排序
//11.reverse
//12.join
//...

2.4数组的迭代方法

//some
//every
//filter
//map
//forEach        不能被return或break终止循环
//reduce       累加器
//redudeRight  累加器(自右向左)

第三部分函数

函数就是把一些常用的代码段进行封装,需要的时候进行调用,使之用来简化代码,提高效率。

3.1函数的声明

    匿名函数
        function(){}
    命名函数
        function 函数名(){
            函数体
        }
        var 函数名=function(){
            函数体
        }

3.2函数的使用

匿名函数的使用:一般用来设置事件触发函数和作为高阶函数的参数

  div.onclick=function(){

    }
    setInterval(function(){
        
    })

命名函数的使用

函数名+()

3.3高阶函数

高阶函数:可以接收一个函数作为参数的函数

3.3.1回调函数

     function show(fn) {     //fn回调函数   show:高阶函数
             console.log(fn);
       }

         show(function(){
             console.log('hello world');
         })

3.3.2自执行函数

  (function() {
            console.log('哈哈哈');
        })();

3.3.3闭包

闭包:有权在一个函数内访问另一个函数作用域中的变量(返回该函数)

闭包是连通函数内外的一个桥梁,可以实现局部变量常驻内存。

例如

 var arr = [];

        for (var i = 0; i < 3; i++) {
            (function (i) {
                arr.push(function () {
                    console.log(i);
                })
            })(i)
        }

        // console.log(arr);
        arr[0]()
        arr[1]()
        arr[2]()

3.3.4递归

在函数执行过程中将改变的函数作为参数再传给该函数

 //递归
        //求阶乘
        // function fn(n){
        //     if(n==1){
        //         return 1;
        //     }
        //     return n*fn(n-1);
        // }

        // console.log(fn(10));
        // 10*fn(9)
    打印杨辉三角
        for (var i = 1; i < 9; i++) {   //行
            for (var j = 1; j <= i; j++) {//列
                document.write(cal(i, j) + "&nbsp;&nbsp;&nbsp;&nbsp;")
            }
            document.write("<br>")
        }

        //数字的计算
        function cal(m, n) {
            //第一行、第一列、最后一列
            if (m == 1 || n == 1 || m == n) {
                return 1;
            }
            return cal(m - 1, n) + cal(m - 1, n - 1)
        }

第四部分DOM

4.1找元素

找元素

  • 方法

    • getElementById  根据Id查找符合的第一个元素

    • getElementsByClassName  根据classname查找符合的所有元素

    • getElementsByTagName  根据标签名查找符合的所有元素

    • getElementsByName  根据name属性查找元素

    • querySelector   根据选择器来查找符合的第一个元素

    • querySelectorAll    根据选择器来查找符合的所有元素

  • DOM节点的属性

    • childNodes 子节点(文本节点和元素节点)

    • children 子节点 元素节点

    • firstChild  第一个子节点

    • lastChild   最后一个子节点

    • parentNode   父节点

    • previousSibling  上一个兄弟节点

    • nextSibling  下一个兄弟节点

4.2修改/获取页面的样式

   获取样式

  • 对象.style.样式名 行内样式

  • getComputedStyle() 获取样式(行内和样式表) 不支持IE8之下

  • currentStyle IE低版本

    修改样式

  • 节点.style.样式名=值

4.3修改页面的内容

修改文本内容(闭合标签、表单元素)

  • innerHTML innerText

  • value

属性

  • 获取

    • 节点.属性名

    • 节点[属性名]

    • 节点.getAttribute(属性名)

  • 设置

    • 节点.属性名=值

    • 节点[属性名]=值

    • 节点.setAttribute(属性名,值

4.4页面节点操作

  • 创建节点:

    • createElement 创建元素节点

    • createTextNode 创建文本节点

    • appendChild 末尾追加子元素

    • insertBefore 指定位置插入元素

    • removeChild

    • remove

    • replaceChild() 替换

4.5事件

事件的机制:事件不会自动执行,需要触发才可以执行

  • 添加事件

    • HTML标签中添加

    • 脚本绑定 节点.on-事件名 注意:不能为同一个节点对象添加多个同名事件

    • 绑定

      • addEventListener() 不兼容低版本IE

      • attachEvent()

                /*
                    事件兼容性写法
                    @nodeObj   事件绑定对象
                    @eventName  事件名称(不含on)
                    @callback   事件函数
                */
                function addEvent(nodeObj, eventName, callback) {
                    if (nodeObj.addEventListener) {         //标准浏览器
                        nodeObj.addEventListener(eventName, callback, false);
                        return;
                    }
                    nodeObj.attachEvent('on' + eventName, callback)       //低版本IE
                }

      • 移除事件

        • removeEventListener  用来移除有addEventListener 设置的事件

        • detachEvent    用来移除有attachEvent设置的事件

        • null  用来移除由on设置的事件

      •   /*
                    事件移除兼容性写法
                    @nodeObj   事件绑定对象
                    @eventName  事件名称(不含on)
                    @callback   事件函数
                */
                function removeEvent(nodeObj, eventName, callback) {
                    if (nodeObj.removeEventListener) {         //标准浏览器
                        nodeObj.removeEventListener(eventName, callback);
                        return;
                    }
                    nodeObj.detachEvent('on' + eventName, callback)       //低版本IE
                }

        事件对象、事件流

        • 事件对象:是对事件的一个抽象表述。当事件触发时,浏览器会将事件对象传递

        • 事件对象的属性:

          • type 事件类型

          • srcElement(IE低版本)/target(标准浏览器) 事件绑定者

          • clientX/clientY 用来获取相对于可视区域的偏移量

          • pageX/pageY  用来获取相对于页面的偏移量

          • screenX/screenY    用来获取滚动的偏移量

          • altKey 是否按下alt键 true/false

          • ctrlKey 是否按下了Ctrl键 true/false

          • keyCode 键码

          • 事件对象的兼容性写法

            •    e = e || window.event;

      • 事件流:事件的传递机制(捕获、冒泡)

        • 冒泡:

          • 阻止事件冒泡

                 e ? e.stopPropagation() : window.event.cancelBubble = true
        • 捕获:

      • 事件默认行为

        • 阻止事件默认行为

        •        addEventListener()   e.preventDefault()
                  节点.事件             return false;
                  attachEvent()       e.returnVlaue=false

          aC

      • 事件委托 :又可以称为事件代理

      • 将事件委托给父元素,子元素触发事件(冒泡机制)

      •   box.onclick=function(e){
                    // console.log(e.target.nodeName);
                    if(e.target.nodeName=='BUTTON'){
                        alert("哈哈哈哈,终于知道")
                    }
                    // alert("我是一个按钮")
                }
        ​
                document.querySelector('button').onclick = function () {
                    // box.innerHTML =box.innerHTML+ "<button>按钮</button>";
                    var btn = document.createElement('button')
                    btn.innerHTML = '按钮'
                    box.appendChild(btn)
                }

      • 滚轮事件

        • onmousewheel 谷歌、IE

          • wheelDelta 上:正值 下:负值

               
             var box = document.querySelector("div");
                  box.onmousewheel = function (e) {
                      // console.log(e.wheelDelta);//上 正值   下:负值
                      // console.log(e.wheelDelta);
                      if (e.wheelDelta > 0) {
                          console.log(1,this.offsetHeight);
                          this.style.height = this.offsetHeight - 5 + 'px'
                      } else {
                          console.log(2,this.offsetHeight);
                          this.style.height = this.offsetHeight + 5 + 'px'
                      }
                  }

        • addEventListener("DOMMouseScroll") 火狐

          • detail 上:负值 下:正值

              
            //火狐
                  box.addEventListener("DOMMouseScroll", function (e) {
                      // console.log(e.wheelDelta);//上 正值   下:负值
                      // console.log(e.detail);      // 上:负值   下:正值
                      if (e.detail < 0) {
                          console.log(1, this.offsetHeight);
                          this.style.height = this.offsetHeight - 5 + 'px'
                      } else {
                          console.log(2, this.offsetHeight);
                          this.style.height = this.offsetHeight + 5 + 'px'
                      }
                  })

      • 其它事件:

        • onfocus  聚焦事件

        • onblur  失焦事件

        • onresize 尺寸改变

        • ....

第五部分BOM

bom 浏览器对象是浏览器自带的一些属性方法的集合

5.1定时器

自动执行定时器需要手动关闭不会自动关闭,每隔一段时间会自动执行

    setInterval(function(){

    },1000)

function:自动执行的函数

1000:间隔时间(以ms为单位)

一次执行函数只会执行一次执行以后自动停止不需要手动关闭

    setTimeout(function(){

},1000)

function:自动执行的函数

1000:间隔时间(以ms为单位)

5.2this指向

在事件函数中this指向事件的调用者

    div.onclick=function(){
        console.log(this);

    }

在函数中this指向window

 function da() {
            console.log(this);

        }
        da();

在构造函数中this指向函数的调用者

  function Ma(name) {
            this.name = name
            console.log(this);
        }
        var xm = new Ma('小明')

以上就是本人对js全部总结

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值