js整理(4)

85 阅读11分钟

(一)数组方法补充

(1)map
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。 注意:map不会对空数组进行检测,也不会改变原数组
语法:array.map(function(currentValue,index,arr), thisValue)
参数: currentValue:必需;当前元素 index:可选;元素的索引 arr:可选;当前元素所属的数组 thisValue:可选;传递给函数的值一般用 "this" 值。如果这个参数为空, "undefined" 会传递给 "this" 值。

        let arr=[1,2,3,4,5]
        let arr2=arr.map((item)=>{
            return  item*2      
        })
        console.log(arr2);
        输出: [2, 4, 6, 8, 10]
        注意:一定要return返回数据

(2)find(es6新增)
find() 方法返回通过测试(函数内判断)的数组的第一个元素的值, find() 方法为数组中的每个元素都调用一次函数执行:
注意: find() 对于空数组,函数是不会执行的,find() 并没有改变数组的原始值。
语法:array.find(function(currentValue, index, arr),thisValue)
参数: currentValue:必需;当前元素 index:可选;元素的索引 arr:可选;当前元素所属的数组 thisValue:可选;传递给函数的值一般用 "this" 值。如果这个参数为空, "undefined" 会传递给 "this" 值。

        let arr=[1,2,3,4,5]
        let arr2=arr.find((item)=>{
            return item>1
        })
        console.log(arr2);
        输出:2

(3)findIndex(es6新增)
findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置(索引)。
findIndex() 方法为数组中的每个元素都调用一次函数执行:
当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数。如果没有符合条件的元素返回 -1
注意: findIndex() 对于空数组,函数是不会执行的, findIndex() 并没有改变数组的原始值。
语法:array.findIndex(function(currentValue, index, arr),thisValue)
参数:currentValue:必需;当前元素 index:可选;元素的索引 arr:可选;当前元素所属的数组 thisValue:可选;传递给函数的值一般用 "this" 值。如果这个参数为空, "undefined" 会传递给 "this" 值。

        let arr=[1,2,3,4,5]
        let arr2=arr.findIndex((item)=>{
            return item>1
        })
        console.log(arr2);
        输出:1

(4)join 数组转换为字符串
join() 方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。
语法:arrayObject.join(separator)
separator:分隔符

        let arr=[2012,12,21]
        let str=arr.join("-")
        console.log(str);
        输出:2012-12-21

(5)includes(es6新增)
includes() 方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似。
语法:string.includes(searchvalue, start)
参数:searchvalue:必需;要查找的字符串。 start:可选;设置从那个位置开始查找,默认为 0。

        let arr=[2012,12,21]
        let bool=arr.includes(12)
        console.log(bool);
        输出:true

(6)reverse 改变原数组
reverse() 方法用于颠倒数组中元素的顺序。
语法:array.reverse()

let arr=[2012,12,21]
        let arr2=arr.reverse()
        console.log(arr2);
        console.log(arr);
        输出:[21, 12, 2012]
             [21, 12, 2012]

(7)sort 改变原数组
sort() 方法用于对数组的元素进行排序,排序顺序可以是字母或数字,并按升序或降序,默认排序顺序为按字母升序。使用数字排序,你必须通过一个函数作为参数来调用,函数指定数字是按照升序还是降序排列。

 let arr=["a","c","d","e","g","b"]
        arr.sort()
        console.log(arr);
        输出: ['a', 'b', 'c', 'd', 'e', 'g']
  
 let arr=[1,3,21,45,2,44,99]
        arr.sort((a,b)=>{
            return a-b  //升序
        })
        console.log(arr);
        输出: [1, 2, 3, 21, 44, 45, 99]
        
let arr=[1,3,21,45,2,44,99]
        arr.sort((a,b)=>{
            return b-a //降序
        })
        console.log(arr);
        输出:[99, 45, 44, 21, 3, 2, 1]

数组对象,根据对象里特定属性排序

         let arr=[
            { id:1,name:"张三" },
            { id:6,name:"李四" },
            { id:8,name:"王宇" },
            { id:3,name:"二麻子"},
            { id:4,name:"小小" }
        ]
        arr.sort((a,b)=>{
            return a.id-b.id //升序
        })
        console.log(arr);
        输出:[
            { id:1,name:"张三" },
            { id:3,name:"二麻子"},
            { id:4,name:"小小" },
            { id:6,name:"李四" },
            { id:8,name:"王宇" }
        ]
        
        
         let arr=[
            { id:1,name:"张三" },
            { id:6,name:"李四" },
            { id:8,name:"王宇" },
            { id:3,name:"二麻子"},
            { id:4,name:"小小" }
        ]
        arr.sort((a,b)=>{
            return b.id-a.id //降序
        })
        console.log(arr);
        输出:[
            { id:8,name:"王宇" },
            { id:6,name:"李四" },
            { id:4,name:"小小" },
            { id:3,name:"二麻子"},
            { id:1,name:"张三" }
        ]

(8)indexOf
indexOf() 方法可返回数组中某个指定的元素位置。
该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时)。如果找到一个 item,则返回 item 的第一次出现的位置。开始位置的索引为 0。如果在数组中没找到指定元素则返回 -1。
语法:Array.indexOf(searchvalue,start)
检索的元素必须是完全匹配才能找到,不能是只包含其中一部分。

       let arr=["a","b","cd","e"]
       console.log(arr.indexOf("cd"));
       输出:2
       console.log(arr.indexOf("c"));
       输出:-1

(9)flat(es6新增)
flat(n)用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数据没有影响。 语法:array.flat(n) 不确定是几维数组可以使用:array.flat(Infinity),可以将任意多维数组转换为一维数组 (10)every
every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
every() 方法使用指定函数检测数组中的所有元素:
如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。 如果所有元素都满足条件,则返回 true。
注意: every() 不会对空数组进行检测,every() 不会改变原始数组。
语法:array.every(function(currentValue,index,arr), thisValue)
参数:currentValue:必需;当前元素 index:可选;元素的索引 arr:可选;当前元素所属的数组 thisValue:可选;传递给函数的值一般用 "this" 值。如果这个参数为空, "undefined" 会传递给 "this" 值。

        let arr=[
            { id:1,name:"张三" },
            { id:6,name:"李四" },
            { id:8,name:"王宇" },
            { id:3,name:"二麻子"},
            { id:4,name:"小小" }
        ]
       let arr2= arr.every((item)=>{
            return item.id>0
        })
        console.log(arr2);
        输出:true
        
          let arr=[
            { id:1,name:"张三" },
            { id:6,name:"李四" },
            { id:8,name:"王宇" },
            { id:3,name:"二麻子"},
            { id:4,name:"小小" }
        ]
       let arr2= arr.every((item)=>{
            return item.id>6
        })
        console.log(arr2);
        输出:false

(11)some
some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。
some() 方法会依次执行数组的每个元素: 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。 如果没有满足条件的元素,则返回false。 注意: some() 不会对空数组进行检测,some() 不会改变原始数组。
语法:array.some(function(currentValue,index,arr), thisValue)
参数:currentValue:必需;当前元素 index:可选;元素的索引 arr:可选;当前元素所属的数组 thisValue:可选;传递给函数的值一般用 "this" 值。如果这个参数为空, "undefined" 会传递给 "this" 值。

        let arr=[
            { id:1,name:"张三" },
            { id:6,name:"李四" },
            { id:8,name:"王宇" },
            { id:3,name:"二麻子"},
            { id:4,name:"小小" }
        ]
       let arr2= arr.some((item)=>{
            return item.id>6
        })
        console.log(arr2);
        输出:true

(12)filter
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测,filter() 不会改变原始数组。
语法:array.filter(function(currentValue,index,arr), thisValue)
参数:currentValue:必需;当前元素 index:可选;元素的索引 arr:可选;当前元素所属的数组 thisValue:可选;传递给函数的值一般用 "this" 值。如果这个参数为空, "undefined" 会传递给 "this" 值。

        let arr=[
            { id:1,name:"张三" },
            { id:6,name:"李四" },
            { id:8,name:"王宇" },
            { id:3,name:"二麻子"},
            { id:4,name:"小小" }
        ]
       let arr2= arr.filter((item)=>{
            return item.id>4
        })
        console.log(arr2);
        输出:[{ id:6,name:"李四" },{ id:8,name:"王宇" }]

(13)slice
slice() 方法可从已有的数组中返回选定的元素。
slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
注意:slice() 方法不会改变原始数组。
语法:array.slice(start,end)
参数:start:可选;规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。 end:可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

            let arr=[
            { id:1,name:"张三" },
            { id:6,name:"李四" },
            { id:8,name:"王宇" },
            { id:3,name:"二麻子"},
            { id:4,name:"小小" }
        ]
       let arr2= arr.slice(1,-1)
       let arr2= arr.slice(-4,-1) 这种写法和上面写法效果一致
        console.log(arr2);
        输出:[{id6name'李四'},{id8name'王宇'}, { id:3,name:"二麻子"}]

(二)对象

(1)Object.assign
Object.assign()是object的新api,主要用于将一个或多个源对象复制到目标对象,它将返回目标对象。
语法:Object.assign(目标对象,源对象1,源对象2, 源对象3, ...)
注意:多个对象合并的时候,如果key相同,后面的会覆盖前面的【对象的key是唯一的】

        let obj1={
            name:'张三'
        }
        let obj2={
            age:10
        }
        let obj3={
            name:'王五'
        }
        let obj=Object.assign(obj1,obj2,obj3)
        console.log(obj);
        console.log(obj1);
        console.log(obj2);
        输出:{name: '王五', age: 10}
             {name: '王五', age: 10}
             {age: 10}
             
       let obj1={
            name:'张三'
        }
        let obj2={
            age:10
        }
        let obj3={
            name:'王五'
        }
        let obj=Object.assign({},obj1,obj2,obj3)
        console.log(obj);
        console.log(obj1);
        console.log(obj2);
        输出: {name: '王五', age: 10}
              {name: '张三'}
              {age: 10}

(2)location对象常用API属性和方法
location对象属性 
location.href    // 设置或返回完整的 URL
location.protocol // 设置或返回当前 URL 的协议
location.origin // 协议+域名+端口
location.host  // 域名+端口
location.hostname // 域名
location.port // 端口
location.pathname // 路径【端口之后,从/开始,到参数之前,?之前结束】
location.search // 参数
location.hash // 哈希
location对象方法
location.reload() // 重新加载网页【刷新】
onhashchange
Window.onhashchange可以监听浏览器hash的改变

window.onhashchange = function () {
    console.log('hash地址改变...')
  }

onpopstate

window.onpopstate = function () {
  console.log('监听浏览器的前进、后退')
}

(三)正则表达式

正则表达式:是描述字符模式的对象,以一个用简单方式描述或者匹配一系列符合某个句法规则的字符串。正则表达式通常被用来验证、检索、替换那些符合某个模式的文本。
作用:
1、检查字符串是否合法性 例如:验证用户名  (a-z,0-9,不能全是数字,不能全是字母);验证邮箱格式 (xxx@qq.com);验证电话号码(11位数字);验证身份证   (18位 )
2、提取字符串中信息 例如:提取一条短信中数字;提取文件名的后缀;
3、替换字符串 例如:替换字符串中的非法字符;对电话号码进行屏蔽;(1852****0102)

正则表达式是一种字符模式对象(RegExp)
定义: 两种方法 let reg = new RegExp("字符串",[模式修饰符]);
let reg = /字符串/[模式修饰符]
修饰符:i:不区分大小写;g:全局匹配
RegExp方法:exec;检索字符串中指定的值。返回找到的值,并确定其位置 test:检索字符串中指定的值。返回 true 或 false

        let str="1237456"
        let reg=new RegExp(7)
        console.log(reg.exec(str));
        输出:['7', index: 3, input: '1237456', groups: undefined]
        
        let str="12374567"
        console.log(str.match(/7/g));
        输出:['7', '7']
        
        let str="Hello Box"
        // let reg=new RegExp("box","i")
        let reg=/box/i
        console.log(reg.test(str));
        输出:true

(四)事件对象

概念:就是当你触发了一个事件以后,对该事件的一些描述信息。event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。
语法:dom节点.addEventListener(“事件类型”,function(event){ //event:事件对象
})
属性: event.target : 获取事件源                   event.type : 获取事件类型      
event.clientX:水平坐标
event.clientY:垂直坐标
event.keycode 键盘码
方法:
event.preventDefault(); //阻止浏览器的默认行为
event.stopPropagation(); //阻止事件传播 === 阻止事件冒泡

(五)DOM事件流

概念:事件流描述元素接收事件的顺序。包括3个阶段:事件捕获阶段、当前目标阶段、冒泡阶段。
事件委派:事件的委派也叫事件代理,简单理解就是:原本是某个元素需要绑定的事件,现在将这个事件交给别的元素去做,正常我们把它交给父级元素,比如:原本是给li绑定点击事件,现在交给它父级ul绑定,利用冒泡原理,点击li的时候会触发ul的事件;
好处:提升性能;能绑定新添加标签的事件